Skip to content

Instantly share code, notes, and snippets.

@hellola
Created November 13, 2017 05:22
Show Gist options
  • Save hellola/043e9129cfd5f7c35ac94efbab5ee98d to your computer and use it in GitHub Desktop.
Save hellola/043e9129cfd5f7c35ac94efbab5ee98d to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
class LSystem
attr_accessor :axiom
attr_accessor :rules
def initialize(axiom, rules)
@axiom = axiom
@rules = rules
@layer = [axiom]
end
def generate
(0..5).each do ||
previous_layer = @layer
@layer = []
previous_layer.each do |var|
@layer << transform(var)
@layer.flatten!
end
puts @layer.join(' ')
end
end
def transform(var)
@rules.each do |r|
return r[:to] if r[:from] == var
end
var
end
end
rules = [
{ from: 'a', to: ['b'] },
{ from: 'b', to: %w[a c] },
{ from: 'c', to: %w[b a] }
]
sys = LSystem.new('a', rules)
puts sys.generate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment