HiveBrain v1.2.0
Get Started
← Back to all entries
patternrubyMinor

Generating sequence that uses the previous outcome for the current

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
theprevioususessequencegeneratingoutcomethatforcurrent

Problem

I do not like to use while loops in Ruby. I was wondering how I can generate a "squared sequence" (e.g., squares the first input, then squares the outcome, etc.) in a more idiomatic Ruby way than this one:

value = 2
while value  4
#    16
#    256
#    65536


I have a suspicion that there is a way/method to do this, but I do not know which one. I hope someone can point me in the right direction.

Solution

Using while would be idiomatic in almost any language. while is basically the way to iterate, uh, while a condition is true. Hence the name - it's practically plain English.

You can postfix the while and save a couple of lines, but that's about it

puts value = value**2 while value < 10000


or use until if you want, but same difference

puts value = value**2 until value >= 10000


If you were dealing with a fixed or known number of iterations, you could do something like

4.times.inject(2) do |memo, _|
  puts memo = memo ** 2
  memo
end


but the whole point here is really that you don't know the number of iterations.

Code Snippets

puts value = value**2 while value < 10000
puts value = value**2 until value >= 10000
4.times.inject(2) do |memo, _|
  puts memo = memo ** 2
  memo
end

Context

StackExchange Code Review Q#58223, answer score: 4

Revisions (0)

No revisions yet.