This week’s quiz was fairly easy. The hardest part was finding and
choosing a way to turn the numbers into their English equivalents.
Initially I used an array that extended to TWENTY, but that was
insufficient. I had solved Ruby Q. #25 and some of the other old ones
myself a while ago, but lost it due to a harddrive crash and couldn’t
find a copy. I then just picked someone else’s solution to Ruby Q. #25
that added a to_en method to Integer.
Here’s my solution, minus the Integer#to_en method. I commented out the
code to print out the elements of the cycle, as it turns out the cycle
is about 430 elements long!
def count_and_say(str)
(‘A’…‘Z’).map{l (str.count(l) > 0) ?
[str.count(l).to_en.upcase, l] : “”}.join(’ ‘).squeeze(’ ')
end
order = ARGV[0].chomp.to_i
prev_results = {}
element = “LOOK AND SAY”
for n in (0…order)
if prev_results[element]
puts “Cycle of length #{nprev_results[element]} starting” +
" at element #{prev_results[element]}"
#puts “Cycle’s elements are:”
#puts (prev_results[element]…n).to_a.map{n
prev_results.invert[n]}
break
else
prev_results[element] = n
end
element = count_and_say(element)
end
 Original Message 
From: Ruby Q. [email protected]
To: rubytalk ML [email protected]
Sent: Thursday, September 6, 2007 7:00:20 AM
Subject: [QUIZ] Count and Say (#138)
The three rules of Ruby Q.:

Please do not post any solutions or spoiler discussion for this quiz
until
48 hours have passed from the time on this message. 
Support Ruby Q. by submitting ideas as often as you can:
 Enjoy!
Suggestion: A [QUIZ] in the subject of emails about the problem helps
everyone
on Ruby T. follow the discussion. Please reply to the original quiz
message,
if you can.
========================================
by Martin DeMello
Conway’s “Look and Say” sequence
(Lookandsay sequence  Wikipedia) is a sequence of
numbers in
which each term “reads aloud” the digits of the previous term. For
instance, the
canonical L&S sequence starts off 1, 11, 21, 1211, 111221, …, because:
* 1 is read off as "one 1" or 11.
* 11 is read off as "two 1's" or 21.
* 21 is read off as "one 2, then one 1" or 1211.
* 1211 is read off as "one 1, then one 2, then two 1's" or 111221.
* 111221 is read off as "three 1, then two 2, then one 1" or 312211.
Over on rec.puzzles, Eric A. proposed a variant in which the letters of
a
sentence are grouped, then “counted aloud”, omitting the "s"s for the
plural
form. Thus, seeding the sequence with “LOOK AND SAY”, we get:
0. LOOK AND SAY
1. TWO A ONE D ONE K ONE L ONE N TWO O ONE S ONE Y
2. ONE A ONE D SIX E ONE K ONE L SEVEN N NINE O ONE S TWO T TWO W
ONE Y
3. ONE A ONE D TEN E TWO I ONE K ONE L TEN N NINE O THREE S THREE T
ONE V
THREE W ONE X ONE Y
and so on. (Note the difference between this and the L&S sequence–the
letters
are counted rather than read in order). Eric wants to know when the
sequence
enters a cycle, and how long that cycle is. Well?