Skip to content

Instantly share code, notes, and snippets.

@spirinvladimir
Last active September 17, 2018 05:32
Show Gist options
  • Save spirinvladimir/73643dd928afdc0da958e165d0fcd780 to your computer and use it in GitHub Desktop.
Save spirinvladimir/73643dd928afdc0da958e165d0fcd780 to your computer and use it in GitHub Desktop.
Solution for "Follow The White Rabbit" by TrustPilot
var
fetch = require('node-fetch'),
md5 = require('md5'),
md5s = ["e4820b45d2277f3844eac66c903e84be", "23170acc097c24edb98fc5488ab033fe", "665e5bcb0c20062fe8abaaf4628bb154"],
match_md5 = frase => md5s.indexOf(md5(frase)) !== -1,
word2map = word => word.split('').reduce((acc, c) => {acc[c] = acc[c] || 0; acc[c]++; return acc}, {}),
match = rm => word => {
var char, i = 0, wm = {};
while (i < word.length) {
char = word[i];
if (rm[char] === undefined) return false;
wm[char] = wm[char] || 0;
wm[char]++;
if (wm[char] > rm[char]) return false;
i++;
}
return word.length !== 0;
},
minus = (m, word) => word.split('').reduce((acc, c) => {acc[c]--;if (acc[c] === 0) delete acc[c];return acc}, Object.assign({}, m)),
calc = (m, n, words, len, frase) =>
words.forEach(word => {
var l = len + word.length;
if (l > n) return
if (l === n) return match_md5(frase.concat(word).join(' ')) && console.log(frase.concat(word).join(' '))
if (frase.length < 3) {
var cm = minus(m, word);
calc(cm, n, words.filter(match(cm)), l, frase.concat(word))
}
}),
am = word2map("poultryoutwitsants");
fetch("http://followthewhiterabbit.trustpilot.com/cs/wordlist")
.then(r => r.text())
.then(r => r.split('\n').filter(match(am)).reverse())//99176->1788
.then(words => calc(am, 18, words, 0, []))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment