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 • 8.98 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 l=r(9562),n=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,n.generatePattern)({board:t,config:e,PatternModel:l.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:l}=t;for(let e=0;e<l.length-1;++e){let t=l[e],n=l[e+1],o=t.tile.character+n.tile.character;if(r.includes(o))return!1}return!0}},3501:(e,t,r)=>{r.r(t),r.d(t,{config:()=>w,default:()=>y,routeModule:()=>M});var l={};r.r(l),r.d(l,{config:()=>_,default:()=>m});var n=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 b=e=>Array.isArray(e)&&e.every(e=>"string"==typeof e),C=e=>{let{board:t,characters:r,game:l,locale:n}=e.body;if(!(0,g.isLocale)(n))throw Error('Invalid "locale" parameter');if(!(0,g.isGame)(l))throw Error('Invalid "game" parameter');if(!b(r)||0===r.length)throw Error('Invalid "characters" parameter');if(!(0,i.hasConfig)(l,n))throw Error(`No game "${l}" in "${n}"`);let o=(0,i.getConfig)(l,n);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:l,locale:n}},_={api:{responseLimit:"25mb"}},m=async(e,t)=>{let r=(0,f.T)(e);try{let{board:l,characters:n,config:o,game:a,locale:i}=C(e);c.logger.info("solve - request",{meta:r,payload:{board:l.toString(),configId:o.game,boardBlanksCount:l.getBlanksCount(),boardTilesCount:l.getTilesCount(),characters:n.join(""),game:a,locale:i}});let f=await u.dictionaries.get(i),p=n.map(e=>new g.Tile({character:e,isBlank:e===s.BLANK})),h=(0,d.kH)(f,o,l,p);t.status(200).send(h)}catch(l){let e=l instanceof Error?l.message:"Unknown error";c.logger.error("solve - error",{error:l,meta:r}),t.status(500).send({error:"Server error",message:e})}},y=(0,a.M)(l,"default"),w=(0,a.M)(l,"config"),M=new n.PagesAPIRouteModule({definition:{kind:o.A.PAGES_API,page:"/api/solve",pathname:"/api/solve",bundlePath:"",filename:""},userland:l})},4217:e=>{e.exports=require("cheerio")},4477:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.fillPatternRecursive=t.fillPattern=void 0;let l=r(4474),n=r(9562);t.fillPattern=(e,r,l,n)=>{if(l.getEmptyCellsCount()>n.length)return[];let o=[];return(0,t.fillPatternRecursive)(o,e,r,l,l.toString(),n),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 n.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(l.EMPTY_CELL),h=i.substring(0,p),P=i.substring(p+1);for(let l of d.isBlank?o.alphabet:[d.character]){let i=h+l,u=i+P;d.character=l,-1===f?r.has(u)&&a.getCollisions().every(e=>r.has(e.toString()))&&e.push(new n.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:()=>l});let l=e=>0!==e.length&&e.length<=2},6050:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHorizontalPatterns=void 0;let l=r(9562),n=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,n.generatePattern)({board:t,config:e,PatternModel:l.HorizontalPattern,cells:r}))}},6537:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getCellsScore=void 0;let l=r(4474);t.getCellsScore=(e,t)=>{let r=t.reduce(({multiplier:t,score:r},n)=>{let o=e.getCellBonus(n),{characterMultiplier:a,wordMultiplier:i}=o&&o.canApply(e,n)?o.value:l.NO_BONUS,s=e.pointsMap[n.tile.character]||0;return{multiplier:t*i,score:r+(n.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 l=r(6050),n=r(1816);t.generatePatterns=(e,t)=>{let r=(0,l.generateHorizontalPatterns)(e,t),o=(0,n.generateVerticalPatterns)(e,t);return r.concat(o)}},6605:e=>{e.exports=require("transliteration")},6680:(e,t,r)=>{r.d(t,{J:()=>a});var l=r(5713);let n=(e,t)=>{let{isEmpty:r,tile:n,x:o,y:a}=e;return!(o<0)&&!(o>=t.boardWidth)&&!(a<0)&&!(a>=t.boardHeight)&&(!r||null===n)&&(null===n||!!(0,l.Q)(n.character))},o=(e,t)=>{if(e.length!==t.boardWidth)return!1;for(let r of e)if(!n(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 l of t.twoCharacterTiles){let t=r.y+1<e.length,n=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===l[1],s=n&&a.tile&&a.tile.character===l[1],u=i||s;if(r.tile&&l.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 l=r(9139);Object.defineProperty(t,"kH",{enumerable:!0,get:function(){return l.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 l=t+1;l<e.length-1;++l)e[l+1].hasTile()||r.push(l);return r.push(e.length-1),r}},8298:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getUniquePatterns=void 0;let l=r(8780);t.getUniquePatterns=e=>{let t=new Set,r=[];for(let n of e){let e=(0,l.getPatternHash)(n);t.has(e)||(t.add(e),r.push(n))}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 l=r(7709),n=r(9804);t.generatePattern=({board:e,cells:t,config:r,PatternModel:o})=>(0,n.generateStartIndices)(t).flatMap(n=>{let a=(0,l.generateEndIndices)(t,n),i=[];for(let l of a){let a=new o(e,t.slice(n,l+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 l=r(9562),n=r(6537);t.getPatternScore=(e,t)=>{let r=t.getEmptyCellsCount()===e.rackSize,o=(0,n.getCellsScore)(e,t.cells),a=t.getCollisions().reduce((t,r)=>t+(0,n.getCellsScore)(e,r.cells),0);if(r){if((0,l.isScoreBingo)(e.bingo))return o+a+e.bingo.score;if((0,l.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 l=r(2579),n=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,n.fillPattern)(e,t,r,s)),c=t.twoCharacterTiles.length>0?u.filter(e=>(0,l.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),l=t.X(0,[60,812],()=>r(3501));module.exports=l})();