Created
January 3, 2018 03:25
-
-
Save devNoiseConsulting/b09e14dd6023ea88a447412a3fad6c00 to your computer and use it in GitHub Desktop.
Dueling Generators - Advent of Code - 20171215
This file contains hidden or 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
| 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