Skip to content

Instantly share code, notes, and snippets.

@devNoiseConsulting
Created January 3, 2018 03:25
Show Gist options
  • Select an option

  • Save devNoiseConsulting/b09e14dd6023ea88a447412a3fad6c00 to your computer and use it in GitHub Desktop.

Select an option

Save devNoiseConsulting/b09e14dd6023ea88a447412a3fad6c00 to your computer and use it in GitHub Desktop.
Dueling Generators - Advent of Code - 20171215
let generator = function(value, factor) {
return (value * factor) % 2147483647;
};
let generatorA1 = function(value) {
return generator(value, 16807);
};
let generatorA2 = function(value) {
let found = false;
while (!found) {
value = generator(value, 16807)
if (value % 4 == 0) {
found = true;
}
}
return value;
};
let generatorA = generatorA2;
let generatorB1 = function(value) {
return generator(value, 48271);
};
let generatorB2 = function(value) {
let found = false;
while (!found) {
value = generator(value, 48271)
if (value % 8 == 0) {
found = true;
}
}
return value;
};
let generatorB = generatorB2;
let lower16Bits = function(number) {
return number.toString(2).substr(-16);
};
let judge = function(size, seedA, seedB) {
let valueA = generatorA(seedA);
let valueB = generatorB(seedB);
let count = 0;
for (let i = 0; i <= size; i++) {
let bitsA = lower16Bits(valueA);
let bitsB = lower16Bits(valueB);
if (bitsA == bitsB) {
count++;
}
valueA = generatorA(valueA);
valueB = generatorB(valueB);
}
return count;
};
let seedA = 883;
let seedB = 879;
let size = 5 * Math.pow(10, 6);
let result = judge(size, seedA, seedB);
console.log(result);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment