var words = []; var word; var anagram; var alphabet = "qwertyuiopasdfghjklzxcvbnm"; var letters = alphabet + alphabet.toUpperCase(); Array.prototype.equals = function (array) { if (this.length != array.length) return false; for (var i = 0; i < array.length; i++) { if (this[i] != array[i]) return false; } return true; } function containsSymbols(w) { for (var i = 0; i < w.length; i++) { if (!letters.includes(w[i])) return true; } return false; } function letterCounts(w) { var lc = []; for (var i = 0; i < 26; i++) { lc.push(0); } var w = w.toLowerCase(); for (var i = 0; i < w.length; i++) { lc[w.charCodeAt(i)-97]++; } return lc; } function isAnagram(w1, w2) { return letterCounts(w1).equals(letterCounts(w2)); } function findWord() { var numWords = words.length; word = words[Math.floor(Math.random()*numWords)]; if (containsSymbols(word)) findWord(); var lc = letterCounts(word); for (var i = 0; i < numWords; i++) { if (words[i] != word && letterCounts(words[i]).equals(lc)) { anagram = words[i]; return; } } findWord(); } function play() { document.getElementById("hidden").style = "visibility: hidden;"; document.getElementById("again").style = "visibility: hidden;"; document.getElementById("answer").style = "visibility: hidden;"; document.getElementById("guess").value = ""; document.getElementById("loading").innerHTML = "Finding a word with an anagram..."; findWord(); document.getElementById("loading").innerHTML = ""; document.getElementById("word").innerHTML = "Find an anagram of " + word + "."; document.getElementById("hidden").style = ""; } function isWord(x) { return words.indexOf(x) > -1; } function loadWords() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (xhttp.readyState == 4 && xhttp.status == 200) { var allwords = xhttp.responseText.split('\n'); words = []; for (var i = 0; i < allwords.length; i++) { if (allwords[i].length == 7) words.push(allwords[i].toLowerCase()); } play(); } }; xhttp.open("GET", "https://raw.githubusercontent.com/sindresorhus/word-list/master/words.txt", true); xhttp.send(); } function submit() { var guess = document.getElementById("guess").value.toLowerCase(); if (guess != word && letterCounts(guess).equals(letterCounts(word)) && isWord(guess)) { document.getElementById("answer").style = ""; document.getElementById("answer").innerHTML = "Correct!"; document.getElementById("again").style = ""; } else { document.getElementById("answer").style = ""; document.getElementById("answer").innerHTML = "Incorrect!"; } } function giveUp() { document.getElementById("answer").style = ""; document.getElementById("answer").innerHTML = "The answer was " + anagram + "."; document.getElementById("again").style = ""; } loadWords();