scrabble-solver
Version:
Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Crossplay, Literaki, and Kelimelik. Quickly find the top-scoring words using the given board and tiles.
1 lines • 13.2 kB
JavaScript
(()=>{var a={};a.id=16,a.ids=[16],a.modules={14217:a=>{"use strict";a.exports=require("cheerio")},19362:a=>{"use strict";a.exports=require("@kamilmielnik/trie")},21820:a=>{"use strict";a.exports=require("os")},28298:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.getUniquePatterns=void 0;let d=c(58780);b.getUniquePatterns=a=>{let b=new Set,c=[];for(let e of a){let a=(0,d.getPatternHash)(e);b.has(a)||(b.add(a),c.push(e))}return c}},29021:a=>{"use strict";a.exports=require("fs")},29139:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.solve=void 0;let d=c(64960),e=c(54477),f=c(56550),g=c(81486),h=c(28298);b.solve=(a,b,c,i)=>{let j=(0,f.generatePatterns)(b,c).flatMap(c=>(0,e.fillPattern)(a,b,c,i)),k=b.twoCharacterTiles.length>0?j.filter(a=>(0,d.areDigraphsValid)(b,a)):j;return(0,h.getUniquePatterns)(k).map((a,c)=>({cells:a.cells.map(a=>a.toJson()),collisions:a.getCollisions().map(a=>a.cells.map(a=>a.toJson())),id:c,points:(0,g.getPatternScore)(b,a)}))}},31097:a=>{"use strict";a.exports=require("follow-redirects")},33873:a=>{"use strict";a.exports=require("path")},42029:a=>{"use strict";a.exports=require("unzipper")},46537:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.getCellsScore=void 0;let d=c(34474);b.getCellsScore=(a,b)=>{let c=b.reduce(({multiplier:b,score:c},e)=>{let f=a.getCellBonus(e),{characterMultiplier:g,wordMultiplier:h}=f&&f.canApply(a,e)?f.value:d.NO_BONUS,i=a.pointsMap[e.tile.character]||0;return{multiplier:b*h,score:c+(e.tile.isBlank?a.blankScore:i)*g}},{multiplier:1,score:0});return c.score*c.multiplier}},54477:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.fillPatternRecursive=b.fillPattern=void 0;let d=c(34474),e=c(29562);b.fillPattern=(a,c,d,e)=>{if(d.getEmptyCellsCount()>e.length)return[];let f=[];return(0,b.fillPatternRecursive)(f,a,c,d,d.toString(),e),f},b.fillPatternRecursive=(a,c,f,g,h,i)=>{let j=g.getIndexOfFirstCellWithoutTile();if(-1===j){c.has(h)&&g.getCollisions().every(a=>c.has(a.toString()))&&a.push(new e.FinalPattern(g.clone()));return}for(let k=0;k<i.length;++k){let l=i[k],m=g.cells[j].tile;g.cells[j].tile=l;let n=g.getIndexOfFirstCellWithoutTile(),o=h.indexOf(d.EMPTY_CELL),p=h.substring(0,o),q=h.substring(o+1);for(let d of l.isBlank?f.alphabet:[l.character]){let h=p+d,j=h+q;l.character=d,-1===n?c.has(j)&&g.getCollisions().every(a=>c.has(a.toString()))&&a.push(new e.FinalPattern(g.clone())):c.hasPrefix(h)&&(i.splice(k,1),(0,b.fillPatternRecursive)(a,c,f,g,j,i),i.splice(k,0,l))}g.cells[j].tile=m}}},55124:a=>{"use strict";a.exports=require("winston")},55511:a=>{"use strict";a.exports=require("crypto")},55650:(a,b,c)=>{"use strict";c.d(b,{J:()=>g});var d=c(76095);let e=(a,b)=>{let{isEmpty:c,tile:e,x:f,y:g}=a;return!(f<0)&&!(f>=b.boardWidth)&&!(g<0)&&!(g>=b.boardHeight)&&(!c||null===e)&&(null===e||!!(0,d.Q)(e.character))},f=(a,b)=>{if(a.length!==b.boardWidth)return!1;for(let c of a)if(!e(c,b))return!1;return!0},g=(a,b)=>{if(a.length!==b.boardHeight)return!1;for(let c of a)if(!f(c,b))return!1;return h(a,b)},h=(a,b)=>{for(let c of a.flat().filter(a=>a&&a.tile&&b.isTwoCharacterTilePrefix(a.tile.character)))for(let d of b.twoCharacterTiles){let b=a[c.y+1]?.[c.x],e=a[c.y]?.[c.x+1],f=c.y+1<a.length&&!!b,g=c.x+1<a[0].length&&!!e,h=f&&b.tile&&b.tile.character===d[1],i=g&&e.tile&&e.tile.character===d[1],j=h||i;if(c.tile&&d.startsWith(c.tile.character)&&j)return!1}return!0}},56550:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.generatePatterns=void 0;let d=c(76050),e=c(91816);b.generatePatterns=(a,b)=>{let c=(0,d.generateHorizontalPatterns)(a,b),f=(0,e.generateVerticalPatterns)(a,b);return c.concat(f)}},58780:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.getPatternHash=void 0,b.getPatternHash=a=>a.cells.filter(a=>a.isEmpty).map(a=>{let b=a.tile.isBlank?"!":"",c=a.tile.character+b;return[a.x,a.y,c].join(",")}).join("-")},64960:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.areDigraphsValid=void 0,b.areDigraphsValid=(a,b)=>{let{twoCharacterTiles:c}=a,{cells:d}=b;for(let a=0;a<d.length-1;++a){let b=d[a],e=d[a+1],f=b.tile.character+e.tile.character;if(c.includes(f))return!1}return!0}},66605:a=>{"use strict";a.exports=require("transliteration")},67709:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.generateEndIndices=void 0,b.generateEndIndices=(a,b)=>{if(0===a.length)return[];let c=[];for(let d=b+1;d<a.length-1;++d)a[d+1].hasTile()||c.push(d);return c.push(a.length-1),c}},69804:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.generateStartIndices=void 0,b.generateStartIndices=a=>{if(0===a.length)return[];let b=[0];for(let c=1;c<a.length-1;++c)a[c-1].hasTile()||b.push(c);return b}},71161:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.generateVectors=void 0,b.generateVectors=({getNthVector:a,vectorsCount:b})=>Array.from({length:b},(b,c)=>a(c))},75600:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76050:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.generateHorizontalPatterns=void 0;let d=c(29562),e=c(78927),f=c(71161);b.generateHorizontalPatterns=(a,b)=>{let c=a.boardHeight;return(0,f.generateVectors)({getNthVector:a=>b.getRow(a),vectorsCount:c}).flatMap(c=>(0,e.generatePattern)({board:b,config:a,PatternModel:d.HorizontalPattern,cells:c}))}},76095:(a,b,c)=>{"use strict";c.d(b,{Q:()=>d});let d=a=>0!==a.length&&a.length<=2},77198:(a,b,c)=>{"use strict";b.kH=void 0,c(64960),c(54477),c(67709),c(76050),c(78927),c(56550),c(69804),c(71161),c(91816),c(46537),c(58780),c(81486),c(28298);var d=c(29139);Object.defineProperty(b,"kH",{enumerable:!0,get:function(){return d.solve}})},78927:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.generatePattern=void 0;let d=c(67709),e=c(69804);b.generatePattern=({board:a,cells:b,config:c,PatternModel:f})=>(0,e.generateStartIndices)(b).flatMap(e=>{let g=(0,d.generateEndIndices)(b,e),h=[];for(let d of g){let g=new f(a,b.slice(e,d+1));g.canBePlaced(c)&&h.push(g)}return h})},79551:a=>{"use strict";a.exports=require("url")},81486:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.getPatternScore=void 0;let d=c(29562),e=c(46537);b.getPatternScore=(a,b)=>{let c=b.getEmptyCellsCount()===a.rackSize,f=(0,e.getCellsScore)(a,b.cells),g=b.getCollisions().reduce((b,c)=>b+(0,e.getCellsScore)(a,c.cells),0);if(c){if((0,d.isScoreBingo)(a.bingo))return f+g+a.bingo.score;if((0,d.isMultiplierBingo)(a.bingo))return f*a.bingo.multiplier+g}return f+g}},85771:a=>{a.exports={breakpointXs:"480",breakpointS:"768",breakpointM:"992",breakpointL:"1200",breakpointXl:"1400",borderColor:"#cdcdcd",borderColorLight:"#d9d9d9",borderRadius:"5",borderWidth:"1",colorBlue:"#c7d8f9",colorBlueLight:"#dde4f6",colorGreen:"#bae3ba",colorGreenLight:"#d6ebd6",colorRed:"#f7c2aa",colorRedLight:"#fbe0d4",colorVioletLight:"#b284b8",colorYellow:"#efe3ae",colorYellowLight:"#f7f1d6",colorBackground:"#f4f4f4",colorForegroundSecondary:"#444",colorBonusCharacterMultiplier2:"#b8d5ed",colorBonusCharacterMultiplier3:"#86aed1",colorBonusCharacterMultiplier4:"#3477b2",colorBonusWordMultiplier2:"#fbc997",colorBonusWordMultiplier3:"#f19393",colorBonusWordMultiplier4:"#ed5e5e",spacingXs:"2",spacingS:"5",spacingM:"10",spacingL:"20",spacingXl:"40",transitionDuration:"100",transitionDurationLong:"250",buttonIconSize:"24",dictionaryHeight:"260",dictionaryHeightMobile:"110",logoHeight:"60",logoHeightSmall:"48",modalWidth:"370",resultsItemHeight:"40",solverColumnWidth:"580",textInputHeight:"40"}},91816:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.generateVerticalPatterns=void 0;let d=c(29562),e=c(78927),f=c(71161);b.generateVerticalPatterns=(a,b)=>{let c=a.boardWidth;return(0,f.generateVectors)({getNthVector:a=>b.getColumn(a),vectorsCount:c}).flatMap(c=>(0,e.generatePattern)({board:b,config:a,PatternModel:d.VerticalPattern,cells:c}))}},92804:(a,b,c)=>{"use strict";c.r(b),c.d(b,{config:()=>B,default:()=>A,handler:()=>D});var d,e={};c.r(e),c.d(e,{config:()=>v,default:()=>w});var f=c(61223),g=c(74600),h=c(4409),i=c(46440),j=c(16812),k=c(34474),l=c(77715),m=c(57519),n=c(77198),o=c(29562),p=c(75494),q=c(76095),r=c(55650);c(66605),o.Locale.DE_DE,o.Locale.EN_GB,o.Locale.EN_US,o.Locale.ES_ES,o.Locale.FA_IR,o.Locale.FR_FR,o.Locale.PL_PL,o.Locale.RO_RO,o.Locale.TR_TR;var s=c(85771),t=c.n(s),u=((d={}).BlanksCount="blanks-count",d.ConsonantsCount="consonants-count",d.Coordinates="coordinates",d.Points="points",d.TilesCount="tiles-count",d.VowelsCount="vowels-count",d.Word="word",d.WordsCount="words-count",d);t().breakpointXs,t().breakpointS,t().breakpointM,t().breakpointL,t().breakpointXl,t().transitionDuration,t().transitionDurationLong,t().colorBlue,t().colorGreen,t().colorRed,t().colorYellow,t().colorYellowLight,t().colorGreenLight,t().colorBlueLight,t().colorRedLight,t().colorBonusCharacterMultiplier2,t().colorBonusCharacterMultiplier3,t().colorBonusCharacterMultiplier4,t().colorVioletLight,t().colorBonusWordMultiplier2,t().colorBonusWordMultiplier3,t().colorBonusWordMultiplier4,t().colorForegroundSecondary,t().colorBackground,t().spacingXs,t().spacingS,t().spacingM,t().spacingL,t().spacingXl,t().borderColor,t().borderColorLight,t().borderRadius,t().borderWidth,t().buttonIconSize,t().dictionaryHeight,t().dictionaryHeightMobile,t().logoHeight,t().logoHeightSmall,t().modalWidth,u.BlanksCount,u.ConsonantsCount,u.Coordinates,u.Points,u.TilesCount,u.VowelsCount,u.Word,u.WordsCount,t().resultsItemHeight,t().solverColumnWidth,t().textInputHeight;let v={api:{responseLimit:"25mb"}},w=async(a,b)=>{let c=(0,p.T)(a);try{let{board:d,characters:e,config:f,game:g,locale:h}=(a=>{let{board:b,characters:c,game:d,locale:e}=a.body;if(!(0,o.isLocale)(e))throw Error('Invalid "locale" parameter');if(!(0,o.isGame)(d))throw Error('Invalid "game" parameter');if(!(Array.isArray(c)&&c.every(a=>"string"==typeof a))||0===c.length)throw Error('Invalid "characters" parameter');if(!(0,j.hasConfig)(d,e))throw Error(`No game "${d}" in "${e}"`);let f=(0,j.getConfig)(d,e);for(let a of c)if(!(0,q.Q)(a))throw Error('Invalid "characters" parameter');if(c.filter(a=>a===k.BLANK).length>f.blanksCount)throw Error("Too many blank tiles passed");if(!(0,o.isBoardJson)(b)||!(0,r.J)(b,f))throw Error('Invalid "board" parameter');return{board:o.Board.fromJson(b),characters:c,config:f,game:d,locale:e}})(a);m.logger.info("solve - request",{meta:c,payload:{board:d.toString(),configId:f.game,boardBlanksCount:d.getBlanksCount(),boardTilesCount:d.getTilesCount(),characters:e.join(""),game:g,locale:h}});let i=await l.dictionaries.get(h),p=e.map(a=>new o.Tile({character:a,isBlank:a===k.BLANK})),s=(0,n.kH)(i,f,d,p);b.status(200).send(s)}catch(d){let a=d instanceof Error?d.message:"Unknown error";m.logger.error("solve - error",{error:d,meta:c}),b.status(500).send({error:"Server error",message:a})}};var x=c(49275),y=c(30879),z=c(53373);let A=(0,i.M)(e,"default"),B=(0,i.M)(e,"config"),C=new h.PagesAPIRouteModule({definition:{kind:g.A.PAGES_API,page:"/api/solve",pathname:"/api/solve",bundlePath:"",filename:""},userland:e,distDir:".next",relativeProjectDir:""});async function D(a,b,c){c.requestMeta&&(0,z.setRequestMeta)(a,c.requestMeta),C.isDev&&(0,z.addRequestMeta)(a,"devRequestTimingInternalsEnd",process.hrtime.bigint());let d="/api/solve",e=await C.prepare(a,b,{srcPage:d});if(!e){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:g,params:h,prerenderManifest:i,routerServerContext:j}=e;try{let c,e=a.method||"GET",f=(0,x.getTracer)(),k=f.getActiveScopeSpan(),l=!!(null==j?void 0:j.isWrappedByNextServer),m=C.instrumentationOnRequestError.bind(C),n=async k=>C.render(a,b,{query:{...g,...h},params:h,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:i.preview,propagateError:!1,dev:C.isDev,page:"/api/solve",internalRevalidate:null==j?void 0:j.revalidate,onError:(...b)=>m(a,...b)}).finally(()=>{if(!k)return;k.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let a=f.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==y.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=a.get("next.route");if(g){let a=`${e} ${g}`;k.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),k.updateName(a),c&&c!==k&&(c.setAttribute("http.route",g),c.updateName(a))}else k.updateName(`${e} ${d}`)});l&&k?await n(k):(c=f.getActiveScopeSpan(),await f.withPropagatedContext(a.headers,()=>f.trace(y.BaseServerSpan.handleRequest,{spanName:`${e} ${d}`,kind:x.SpanKind.SERVER,attributes:{"http.method":e,"http.target":a.url}},n),void 0,!l))}catch(a){if(C.isDev)throw a;(0,f.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}}};var b=require("../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[671,392,812],()=>b(b.s=92804));module.exports=c})();