30 lines
691 B
Ruby
30 lines
691 B
Ruby
# Build environments
|
|
envs = (1..12).map do |n|
|
|
Object.new.instance_eval {@n = n; @cnt = 0; self}
|
|
end
|
|
|
|
# Until all values are 1:
|
|
until envs.all? {|e| e.instance_eval{@n} == 1}
|
|
envs.each do |e|
|
|
e.instance_eval do # Use environment _e_
|
|
printf "%4s", @n
|
|
if @n > 1
|
|
@cnt += 1 # Increment step count
|
|
@n = if @n.odd? # Calculate next hailstone value
|
|
@n * 3 + 1
|
|
else
|
|
@n / 2
|
|
end
|
|
end
|
|
end
|
|
end
|
|
puts
|
|
end
|
|
puts '=' * 48
|
|
envs.each do |e| # For each environment _e_
|
|
e.instance_eval do
|
|
printf "%4s", @cnt # print the step count
|
|
end
|
|
end
|
|
puts
|