32 lines
907 B
Ruby
32 lines
907 B
Ruby
padovan = Enumerator.new do |y|
|
|
ar = [1, 1, 1]
|
|
loop do
|
|
ar << ar.first(2).sum
|
|
y << ar.shift
|
|
end
|
|
end
|
|
|
|
P, S = 1.324717957244746025960908854, 1.0453567932525329623
|
|
def padovan_f(n) = (P**(n-1) / S + 0.5).floor
|
|
|
|
puts "Recurrence Padovan: #{padovan.take(20)}"
|
|
puts "Floor function: #{(0...20).map{|n| padovan_f(n)}}"
|
|
|
|
n = 63
|
|
bool = (0...n).map{|n| padovan_f(n)} == padovan.take(n)
|
|
puts "Recurrence and floor function are equal upto #{n}: #{bool}."
|
|
puts
|
|
|
|
def l_system(axiom = "A", rules = {"A" => "B", "B" => "C", "C" => "AB"} )
|
|
return enum_for(__method__, axiom, rules) unless block_given?
|
|
loop do
|
|
yield axiom
|
|
axiom = axiom.chars.map{|c| rules[c] }.join
|
|
end
|
|
end
|
|
|
|
puts "First 10 elements of L-system: #{l_system.take(10).join(", ")} "
|
|
n = 32
|
|
bool = l_system.take(n).map(&:size) == padovan.take(n)
|
|
puts "Sizes of first #{n} l_system strings equal to recurrence padovan? #{bool}."
|