scrabble-solver
Version:
Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Literaki, and Kelimelik. Quickly find the top-scoring words using the given board and tiles.
1 lines • 9.66 kB
JavaScript
;(()=>{var e={};e.id=16,e.ids=[16],e.modules={838:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},1097:e=>{e.exports=require("follow-redirects")},1161:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateVectors=void 0,t.generateVectors=({getNthVector:e,vectorsCount:t})=>Array.from({length:t},(t,r)=>e(r))},1816:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateVerticalPatterns=void 0;let n=r(9562),l=r(8927),o=r(1161);t.generateVerticalPatterns=(e,t)=>{let r=e.boardWidth;return(0,o.generateVectors)({getNthVector:e=>t.getColumn(e),vectorsCount:r}).flatMap(r=>(0,l.generatePattern)({board:t,config:e,PatternModel:n.VerticalPattern,cells:r}))}},1820:e=>{e.exports=require("os")},2029:e=>{e.exports=require("unzipper")},2579:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.areDigraphsValid=void 0,t.areDigraphsValid=(e,t)=>{let{twoCharacterTiles:r}=e,{cells:n}=t;for(let e=0;e<n.length-1;++e){let t=n[e],l=n[e+1],o=t.tile.character+l.tile.character;if(r.includes(o))return!1}return!0}},3871:(e,t,r)=>{r.r(t),r.d(t,{config:()=>O,default:()=>k,routeModule:()=>j});var n={};r.r(n),r.d(n,{config:()=>S,default:()=>E});var l=r(4409),o=r(4600),a=r(6440),i=r(6812),s=r(4474),u=r(7715),c=r(7519),d=r(7198),g=r(9562),f=r(184),p=r(5713),h=r(6680),P=r(6605);g.Locale.DE_DE,g.Locale.EN_GB,g.Locale.EN_US,g.Locale.ES_ES,g.Locale.FA_IR,g.Locale.FR_FR,g.Locale.PL_PL,g.Locale.RO_RO,g.Locale.TR_TR,e=>e;var v=function(e){return e.BlanksCount="blanks-count",e.ConsonantsCount="consonants-count",e.Coordinates="coordinates",e.Points="points",e.TilesCount="tiles-count",e.VowelsCount="vowels-count",e.Word="word",e.WordsCount="words-count",e}({});v.BlanksCount,v.ConsonantsCount,v.Coordinates,v.Points,v.TilesCount,v.VowelsCount,v.Word,v.WordsCount;let C=e=>Array.isArray(e)&&e.every(e=>"string"==typeof e),b=e=>(t,r)=>t.localeCompare(r,e),m=(e,t)=>e-t,y=(e,t)=>{let r=b(t);return(t,n)=>{let l=t[e],o=n[e];return"string"==typeof l&&"string"==typeof o?r(l,o):"number"==typeof l&&"number"==typeof o?m(l,o):0}},_="ABCDEFGHIJKLMNOPQRSTUVWXYZ",w=(e,t)=>{if("number"===t)return String(e+1);let r="",n=e;for(;n>=0;)r=_[n%_.length]+r,n=Math.floor(n/_.length)-1;return r},M=(e,t)=>{if("hidden"===t)return"";let r=e.cells[0],n=r.x!==e.cells[1].x,l=w(r.x,"original"===t?"letter":"number"),o=w(r.y,"original"===t?"number":"letter");return n?`${o}${l}`:`${l}${o}`};v.BlanksCount,v.ConsonantsCount,v.Coordinates,v.Points,v.TilesCount,v.VowelsCount,v.Word,v.WordsCount,e=>y("wordsCount",e);let x=e=>{let{board:t,characters:r,game:n,locale:l}=e.body;if(!(0,g.isLocale)(l))throw Error('Invalid "locale" parameter');if(!(0,g.isGame)(n))throw Error('Invalid "game" parameter');if(!C(r)||0===r.length)throw Error('Invalid "characters" parameter');if(!(0,i.hasConfig)(n,l))throw Error(`No game "${n}" in "${l}"`);let o=(0,i.getConfig)(n,l);for(let e of r)if(!(0,p.Q)(e))throw Error('Invalid "characters" parameter');if(r.filter(e=>e===s.BLANK).length>o.blanksCount)throw Error("Too many blank tiles passed");if(!(0,g.isBoardJson)(t)||!(0,h.J)(t,o))throw Error('Invalid "board" parameter');return{board:g.Board.fromJson(t),characters:r,config:o,game:n,locale:l}},S={api:{responseLimit:"25mb"}},E=async(e,t)=>{let r=(0,f.T)(e);try{let{board:n,characters:l,config:o,game:a,locale:i}=x(e);c.logger.info("solve - request",{meta:r,payload:{board:n.toString(),configId:o.game,boardBlanksCount:n.getBlanksCount(),boardTilesCount:n.getTilesCount(),characters:l.join(""),game:a,locale:i}});let f=await u.dictionaries.get(i),p=l.map(e=>new g.Tile({character:e,isBlank:e===s.BLANK})),h=(0,d.kH)(f,o,n,p);t.status(200).send(h)}catch(n){let e=n instanceof Error?n.message:"Unknown error";c.logger.error("solve - error",{error:n,meta:r}),t.status(500).send({error:"Server error",message:e})}},k=(0,a.M)(n,"default"),O=(0,a.M)(n,"config"),j=new l.PagesAPIRouteModule({definition:{kind:o.A.PAGES_API,page:"/api/solve",pathname:"/api/solve",bundlePath:"",filename:""},userland:n})},4217:e=>{e.exports=require("cheerio")},4477:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fillPatternRecursive=t.fillPattern=void 0;let n=r(4474),l=r(9562);t.fillPattern=(e,r,n,l)=>{if(n.getEmptyCellsCount()>l.length)return[];let o=[];return(0,t.fillPatternRecursive)(o,e,r,n,n.toString(),l),o},t.fillPatternRecursive=(e,r,o,a,i,s)=>{let u=a.getIndexOfFirstCellWithoutTile();if(-1===u){r.has(i)&&a.getCollisions().every(e=>r.has(e.toString()))&&e.push(new l.FinalPattern(a.clone()));return}for(let c=0;c<s.length;++c){let d=s[c],g=a.cells[u].tile;a.cells[u].tile=d;let f=a.getIndexOfFirstCellWithoutTile(),p=i.indexOf(n.EMPTY_CELL),h=i.substring(0,p),P=i.substring(p+1);for(let n of d.isBlank?o.alphabet:[d.character]){let i=h+n,u=i+P;d.character=n,-1===f?r.has(u)&&a.getCollisions().every(e=>r.has(e.toString()))&&e.push(new l.FinalPattern(a.clone())):r.hasPrefix(i)&&(s.splice(c,1),(0,t.fillPatternRecursive)(e,r,o,a,u,s),s.splice(c,0,d))}a.cells[u].tile=g}}},5124:e=>{e.exports=require("winston")},5511:e=>{e.exports=require("crypto")},5713:(e,t,r)=>{r.d(t,{Q:()=>n});let n=e=>0!==e.length&&e.length<=2},6050:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHorizontalPatterns=void 0;let n=r(9562),l=r(8927),o=r(1161);t.generateHorizontalPatterns=(e,t)=>{let r=e.boardHeight;return(0,o.generateVectors)({getNthVector:e=>t.getRow(e),vectorsCount:r}).flatMap(r=>(0,l.generatePattern)({board:t,config:e,PatternModel:n.HorizontalPattern,cells:r}))}},6537:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getCellsScore=void 0;let n=r(4474);t.getCellsScore=(e,t)=>{let r=t.reduce(({multiplier:t,score:r},l)=>{let o=e.getCellBonus(l),{characterMultiplier:a,wordMultiplier:i}=o&&o.canApply(e,l)?o.value:n.NO_BONUS,s=e.pointsMap[l.tile.character]||0;return{multiplier:t*i,score:r+(l.tile.isBlank?e.blankScore:s)*a}},{multiplier:1,score:0});return r.score*r.multiplier}},6550:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generatePatterns=void 0;let n=r(6050),l=r(1816);t.generatePatterns=(e,t)=>{let r=(0,n.generateHorizontalPatterns)(e,t),o=(0,l.generateVerticalPatterns)(e,t);return r.concat(o)}},6605:e=>{e.exports=require("transliteration")},6680:(e,t,r)=>{r.d(t,{J:()=>a});var n=r(5713);let l=(e,t)=>{let{isEmpty:r,tile:l,x:o,y:a}=e;return!(o<0)&&!(o>=t.boardWidth)&&!(a<0)&&!(a>=t.boardHeight)&&(!r||null===l)&&(null===l||!!(0,n.Q)(l.character))},o=(e,t)=>{if(e.length!==t.boardWidth)return!1;for(let r of e)if(!l(r,t))return!1;return!0},a=(e,t)=>{if(e.length!==t.boardHeight)return!1;for(let r of e)if(!o(r,t))return!1;return i(e,t)},i=(e,t)=>{for(let r of e.flat().filter(e=>e&&e.tile&&t.isTwoCharacterTilePrefix(e.tile.character)))for(let n of t.twoCharacterTiles){let t=r.y+1<e.length,l=r.x+1<e[0].length,o=e[r.y+1][r.x],a=e[r.y][r.x+1],i=t&&o.tile&&o.tile.character===n[1],s=l&&a.tile&&a.tile.character===n[1],u=i||s;if(r.tile&&n.startsWith(r.tile.character)&&u)return!1}return!0}},7198:(e,t,r)=>{t.kH=void 0,r(2579),r(4477),r(7709),r(6050),r(8927),r(6550),r(9804),r(1161),r(1816),r(6537),r(8780),r(9105),r(8298);var n=r(9139);Object.defineProperty(t,"kH",{enumerable:!0,get:function(){return n.solve}})},7709:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateEndIndices=void 0,t.generateEndIndices=(e,t)=>{if(0===e.length)return[];let r=[];for(let n=t+1;n<e.length-1;++n)e[n+1].hasTile()||r.push(n);return r.push(e.length-1),r}},8298:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getUniquePatterns=void 0;let n=r(8780);t.getUniquePatterns=e=>{let t=new Set,r=[];for(let l of e){let e=(0,n.getPatternHash)(l);t.has(e)||(t.add(e),r.push(l))}return r}},8780:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getPatternHash=void 0,t.getPatternHash=e=>e.cells.filter(e=>e.isEmpty).map(e=>{let t=e.tile.isBlank?"!":"",r=e.tile.character+t;return[e.x,e.y,r].join(",")}).join("-")},8927:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generatePattern=void 0;let n=r(7709),l=r(9804);t.generatePattern=({board:e,cells:t,config:r,PatternModel:o})=>(0,l.generateStartIndices)(t).flatMap(l=>{let a=(0,n.generateEndIndices)(t,l),i=[];for(let n of a){let a=new o(e,t.slice(l,n+1));a.canBePlaced(r)&&i.push(a)}return i})},9021:e=>{e.exports=require("fs")},9105:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getPatternScore=void 0;let n=r(9562),l=r(6537);t.getPatternScore=(e,t)=>{let r=t.getEmptyCellsCount()===e.rackSize,o=(0,l.getCellsScore)(e,t.cells),a=t.getCollisions().reduce((t,r)=>t+(0,l.getCellsScore)(e,r.cells),0);if(r){if((0,n.isScoreBingo)(e.bingo))return o+a+e.bingo.score;if((0,n.isMultiplierBingo)(e.bingo))return o*e.bingo.multiplier+a}return o+a}},9139:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.solve=void 0;let n=r(2579),l=r(4477),o=r(6550),a=r(9105),i=r(8298);t.solve=(e,t,r,s)=>{let u=(0,o.generatePatterns)(t,r).flatMap(r=>(0,l.fillPattern)(e,t,r,s)),c=t.twoCharacterTiles.length>0?u.filter(e=>(0,n.areDigraphsValid)(t,e)):u;return(0,i.getUniquePatterns)(c).map((e,r)=>({cells:e.cells.map(e=>e.toJson()),collisions:e.getCollisions().map(e=>e.cells.map(e=>e.toJson())),id:r,points:(0,a.getPatternScore)(t,e)}))}},9362:e=>{e.exports=require("@kamilmielnik/trie")},9551:e=>{e.exports=require("url")},9804:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateStartIndices=void 0,t.generateStartIndices=e=>{if(0===e.length)return[];let t=[0];for(let r=1;r<e.length-1;++r)e[r-1].hasTile()||t.push(r);return t}},9902:e=>{e.exports=require("path")}};var t=require("../../webpack-api-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[60,812],()=>r(3871));module.exports=n})();