Skip to content

Instantly share code, notes, and snippets.

@amiika
Created April 8, 2021 20:43
Show Gist options
  • Save amiika/1840830ff9e862ad909b6fd672ab9521 to your computer and use it in GitHub Desktop.
Save amiika/1840830ff9e862ad909b6fd672ab9521 to your computer and use it in GitHub Desktop.
define :create_ruleset do |n|
rules = Hash.new
return rules if n > 255
binary = "%08b" % n
8.times do |i|
key = "%03b" % i
rules[key] = binary[7-i].to_i
end
return rules
end
gen = [0, 0, 1, 0, 0, 0]
gen2 = [1, 0, 0, 0, 0, 0]
rule = create_ruleset 110
define :mutate do |gen|
next_gen = []
gen.each_with_index do |s,i|
left = i > 0 ? i - 1 : gen.length - 1;
right = i < gen.length - 1 ? i + 1 : 0;
pattern = "#{gen[left]}#{gen[i]}#{gen[right]}";
next_gen[i] = rule[pattern];
end
return next_gen;
end
live_loop :organism_1 do
print gen
gen.each_with_index do |s,i|
play degree i+1, :d, :major if s==1
sleep 0.25
end
gen = mutate gen
end
live_loop :organism_2 do
print gen2
gen2.each_with_index do |s,i|
play degree i+1, :d3, :major if s==1
sleep 0.25
end
gen2 = mutate gen2
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment