Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save brubsby/0301c7756367b980a1b2f183acb40e60 to your computer and use it in GitHub Desktop.
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
//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