Created
September 16, 2020 09:06
-
-
Save mrandrewmills/bcc33bbf10dfe9da468ff0d20c10e5b5 to your computer and use it in GitHub Desktop.
quick and dirty JS to see if low to high, high to low, or random approach is best for lucky number games
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// gets a random number between min and max, inclusive. Source: Mozilla Developer Network | |
function getRandomIntInclusive(min, max) { | |
min = Math.ceil(min); | |
max = Math.floor(max); | |
return Math.floor(Math.random() * (max - min + 1) + min); | |
} | |
// find lucky number, going from 1 to 100, in sequence | |
function runLowToHighTrial(){ | |
let guessHistory = []; | |
let guessTokens = 0; | |
let results = {}; | |
// randomly assign our lucky number | |
let luckyNumber = getRandomIntInclusive(1,100); | |
// make guesses from 1 to 100, until lucky number is found | |
for (let x = 1; x <= 100; x++) { | |
thisGuess = x; | |
guessTokens = guessTokens + thisGuess; | |
if (thisGuess == luckyNumber){ | |
break; | |
} else { | |
guessHistory.push(thisGuess); | |
} | |
} | |
results.luckyNumber = luckyNumber; | |
results.guessHistory = guessHistory; | |
results.guessTokens = guessTokens; | |
return results; | |
} | |
// find lucky number, going from 100 to 1, in sequence | |
function runHighToLowTrial(){ | |
let guessHistory = []; | |
let guessTokens = 0; | |
let results = {}; | |
// randomly assign our lucky number | |
let luckyNumber = getRandomIntInclusive(1,100); | |
// make guesses from 100 to 1, until lucky number is found | |
for (let x = 100; x >= 1; x--) { | |
thisGuess = x; | |
guessTokens = guessTokens + thisGuess; | |
if (thisGuess == luckyNumber){ | |
break; | |
} else { | |
guessHistory.push(thisGuess); | |
} | |
} | |
results.luckyNumber = luckyNumber; | |
results.guessHistory = guessHistory; | |
results.guessTokens = guessTokens; | |
return results; | |
} | |
// find lucky number, random guesses, remember/ignore previous guesses | |
function runRandomTrial(){ | |
let guessHistory = []; | |
let guessTokens = 0; | |
let results = {}; | |
// randomly assign our lucky number | |
let luckyNumber = getRandomIntInclusive(1,100); | |
// make one hundred random guesses, no duplicates | |
for (let x = 1; x <= 100; x++) { | |
do{ | |
thisGuess = getRandomIntInclusive(1,100); | |
} while ( guessHistory.indexOf(thisGuess) > -1 ); | |
guessTokens = guessTokens + thisGuess; | |
if (thisGuess == luckyNumber){ | |
break; | |
} else { | |
guessHistory.push(thisGuess); | |
} | |
} | |
results.luckyNumber = luckyNumber; | |
results.guessHistory = guessHistory; | |
results.guessTokens = guessTokens; | |
return results; | |
} | |
// calculate the average number of guesses and costs for each trial/approach | |
function getAverages(arrTrials){ | |
let totalGuesses = 0; | |
let totalTokens = 0; | |
let results = {}; | |
arrTrials.forEach( function(trial){ | |
totalGuesses = totalGuesses + trial.guessHistory.length; | |
totalTokens = totalTokens + trial.guessTokens; | |
}); | |
results.avgGuesses = totalGuesses / arrTrials.length; | |
results.avgTokens = totalTokens / arrTrials.length; | |
return results; | |
} | |
// we need to store our trial results | |
let lowToHighTrials = []; | |
let highToLowTrials = []; | |
let randomTrials = []; | |
// run 100K trials of each kind, storing results for averaging later | |
for (let a = 1; a <= 100000; a++){ | |
lowToHighTrials.push( runLowToHighTrial() ); | |
highToLowTrials.push( runHighToLowTrial() ); | |
randomTrials.push( runRandomTrial() ); | |
} | |
// calculate averages, show results | |
console.log("Low To High Trials:"); | |
console.log( getAverages(lowToHighTrials) ); | |
console.log("High To Low Trials:"); | |
console.log( getAverages(highToLowTrials) ); | |
console.log("Random Trials:"); | |
console.log( getAverages(randomTrials) ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment