Skip to content

Instantly share code, notes, and snippets.

@mrandrewmills
Created September 16, 2020 09:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrandrewmills/bcc33bbf10dfe9da468ff0d20c10e5b5 to your computer and use it in GitHub Desktop.
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
// 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