Created
December 9, 2019 22:47
-
-
Save brubsby/0301c7756367b980a1b2f183acb40e60 to your computer and use it in GitHub Desktop.
javascript to convert rule integer for life-like cellular automata to it's black/white reversal ruleset
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
//https://www.conwaylife.com/wiki/Rule_integer | |
//https://www.conwaylife.com/wiki/Black/white_reversal | |
var rule_integer = 6152; // conway's game of life | |
function reverse_bits(bits, size) { | |
let i = 0 | |
let reversed = 0 | |
let last | |
while (i < size) { | |
last = bits & 1 | |
bits >>= 1 | |
reversed += last | |
reversed <<= 1 | |
i++ | |
} | |
return reversed >> 1 | |
} | |
function ruleint_to_string(rule_integer) { | |
var birth_rules = rule_integer & 511; //(2^9)-1 | |
var survive_rules = rule_integer >>> 9; | |
var birth_string = "B"; | |
var survive_string = "S"; | |
for (var string_bit = 0; string_bit < 9; string_bit++) { | |
var bit_mask = Math.pow(2, string_bit); | |
if ((bit_mask & birth_rules) > 0) { | |
birth_string += string_bit; | |
} | |
if ((bit_mask & survive_rules) > 0) { | |
survive_string += string_bit; | |
} | |
} | |
return birth_string + "/" + survive_string; | |
} | |
function ruleint_black_white_reversal(rule_integer) { | |
var birth_rules = rule_integer & 511; //(2^9)-1 | |
var survive_rules = rule_integer >>> 9; | |
birth_rules ^= 511; //(2^9)-1 | |
survive_rules ^= 511; //(2^9)-1 | |
birth_rules = reverse_bits(birth_rules, 9); | |
survive_rules = reverse_bits(survive_rules, 9); | |
return (birth_rules << 9) + survive_rules; | |
} | |
console.log(ruleint_to_string(ruleint_black_white_reversal(rule_integer))); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment