<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9206480630077859402</id><updated>2011-04-21T20:32:56.565-07:00</updated><title type='text'>Learn to Program, Answers</title><subtitle type='html'>Answer key to the exercises in Chris Pine's Learn to Program book.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://learntoprogramanswers.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-1135135525699275867</id><published>2008-01-25T08:27:00.000-08:00</published><updated>2008-01-29T16:24:04.353-08:00</updated><title type='text'>Learn to Program Answer Key</title><content type='html'>&lt;br/&gt;This here is an answer key for the exercises in Chris Pine's wonderful &lt;a href="http://pragprog.com/titles/fr_ltp"&gt;Learn to Program&lt;/a&gt; book.  The answers, while not the prettiest or most efficient code, have been tested to work as the problems were understood. &lt;br /&gt;&lt;br /&gt;Please excuse some of the formatting, it may not make the code as readable as it should be.&lt;br /&gt;&lt;br /&gt;If you have better solutions to any of the problems please feel free to &lt;a href = "mailto:widemine@gmail.com"&gt;pass them along&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-1135135525699275867?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/1135135525699275867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/1135135525699275867'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/learn-to-program-answer-key.html' title='Learn to Program Answer Key'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-765412013445243399</id><published>2008-01-23T21:28:00.001-08:00</published><updated>2008-01-25T08:42:28.699-08:00</updated><title type='text'>PAGE 12 2.4 A Few Things to Try</title><content type='html'>&lt;div&gt;&lt;br /&gt;1. Hours in a year&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts 365 * 24&lt;/p&gt;&lt;br /&gt;2. Minutes in a decade&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts 10 * 365 * 24 * 60&lt;/p&gt;&lt;br /&gt;3. Seconds I'm old, 8/8/76 to 5/7/07 (9:45pm)&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts (30 * 365 * 24 * 60 * 60) + (272 * 24 * 60 * 60) + (21 * 60 * 60) + (45 * 60)&lt;/p&gt;&lt;br /&gt;4. 912,000,000 seconds, how old?&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts 912000000/60/60/24/365&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-765412013445243399?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/765412013445243399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/765412013445243399'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-12-24-few-things-to-try.html' title='PAGE 12 2.4 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-1118409142316342564</id><published>2008-01-22T21:16:00.000-08:00</published><updated>2008-01-28T21:26:04.869-08:00</updated><title type='text'>PAGE 26 5.4 A Few Things to Try</title><content type='html'>1. Ask first, middle and last name. Greet with full name.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;ask first, middle, last name. greet with full name.&lt;br /&gt;puts 'What is your first name?'&lt;br /&gt;nameF = gets.chomp&lt;br /&gt;puts 'What is your middle name?'&lt;br /&gt;nameM = gets.chomp&lt;br /&gt;puts 'What is your last name?'&lt;br /&gt;nameL = gets.chomp&lt;br /&gt;puts ''&lt;br /&gt;puts 'Hi ' + nameF + ' ' + nameM + ' ' + nameL&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;2. Ask for favorite number. Add one and suggest the result is bigger and better.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;ask for favorite number. add 1 to the number and suggest the result is bigger and better than favorite number.&lt;br /&gt;puts 'What is your favorite number?'&lt;br /&gt;numFAV = gets.chomp&lt;br /&gt;numBET = numFAV.to_i + 1&lt;br /&gt;puts ''&lt;br /&gt;puts 'Your favorite number ' + numFAV.to_s + ' is nice, however ' + numBET.to_s + ' is bigger and better.'&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-1118409142316342564?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/1118409142316342564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/1118409142316342564'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/p-26-54-few-things-to-try.html' title='PAGE 26 5.4 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-6011430992766666979</id><published>2008-01-21T21:27:00.000-08:00</published><updated>2008-01-28T21:30:58.486-08:00</updated><title type='text'>PAGE 32 Last Paragraph</title><content type='html'>Ask for first, middle, last name and add the lengths together.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts 'What is your first name?'&lt;br /&gt;fname = gets.chomp&lt;br /&gt;puts 'What is your middle name?'&lt;br /&gt;mname = gets.chomp&lt;br /&gt;puts 'What is your last name?'&lt;br /&gt;lname = gets.chomp&lt;br /&gt;numletters = fname.length + mname.length + lname.length&lt;br /&gt;puts 'Did you know, there are ' + numletters.to_s + ' letters in your full name?'&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-6011430992766666979?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/6011430992766666979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/6011430992766666979'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-32-last-paragraph.html' title='PAGE 32 Last Paragraph'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-2499035802038467279</id><published>2008-01-20T21:31:00.000-08:00</published><updated>2008-01-28T21:34:40.996-08:00</updated><title type='text'>PAGE 35 6.2 A Few Things to Try</title><content type='html'>1. Angry boss program&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts 'What do you want!?'&lt;br /&gt;want = gets.chomp&lt;br /&gt;puts 'WHADDYA MEAN "I WANT ' + want.upcase + '" ?!?  YOU\'RE FIRED'&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;2. Program to display a table of contents.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;page_width = 60&lt;br /&gt;puts ('Table of Contents'.center(page_width))&lt;br /&gt;puts ''&lt;br /&gt;puts ('Chapter 1:  Getting Started'.ljust(page_width/2) + 'page 1'.rjust(page_width/2))&lt;br /&gt;puts ('Chapter 2:  Numbers'.ljust(page_width/2) + 'page 9'.rjust(page_width/2))&lt;br /&gt;puts ('Chapter 3:  Letters'.ljust(page_width/2) + 'page 13'.rjust(page_width/2))&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-2499035802038467279?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/2499035802038467279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/2499035802038467279'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-35-few-things-to-try.html' title='PAGE 35 6.2 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-6151145452750799837</id><published>2008-01-19T21:39:00.000-08:00</published><updated>2008-01-28T21:41:46.231-08:00</updated><title type='text'>PAGE 49 Sidebar</title><content type='html'>Change example 'bye' program to get rid of first space&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;input = ''&lt;br /&gt;while input != 'bye'&lt;br /&gt;    input = gets.chomp&lt;br /&gt;    if input != 'bye'&lt;br /&gt;        puts input&lt;br /&gt;    end   &lt;br /&gt;end&lt;br /&gt;puts 'Come again soon!'&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-6151145452750799837?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/6151145452750799837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/6151145452750799837'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-49-sidebar.html' title='PAGE 49 Sidebar'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-8048031205549536525</id><published>2008-01-19T20:45:00.000-08:00</published><updated>2008-01-28T21:49:59.304-08:00</updated><title type='text'>PAGE 55 7.5 A Few Things to Try</title><content type='html'>1. 99 Bottles of Beer on the Wall...&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;bottles = 99&lt;br /&gt;while bottles != 0&lt;br /&gt;    puts bottles.to_s + ' bottles of beer on the wall'&lt;br /&gt;    puts bottles.to_s + ' bottles of beer'&lt;br /&gt;    bottles = bottles - 1&lt;br /&gt;    puts 'take one down, pass it around'&lt;br /&gt;   &lt;br /&gt;    if bottles == 1&lt;br /&gt;        puts bottles.to_s + ' bottle of beer on the wall'&lt;br /&gt;    else   &lt;br /&gt;        puts bottles.to_s + ' bottles of beer on the wall'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    puts ''&lt;br /&gt;   &lt;br /&gt;    if bottles == 1&lt;br /&gt;        puts bottles.to_s + ' bottle of beer on the wall'&lt;br /&gt;        puts bottles.to_s + ' bottle of beer'&lt;br /&gt;        bottles = bottles - 1&lt;br /&gt;        puts 'take one down, pass it around'&lt;br /&gt;        puts bottles.to_s + ' bottles of beer on the wall'&lt;br /&gt;    end   &lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;2. A Deaf Grandma program. &lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;say = 'hi grammy'&lt;br /&gt;while say != 'BYE'&lt;br /&gt;    say = gets.chomp&lt;br /&gt;    while say != say.upcase&lt;br /&gt;        puts 'HUH?  SPEAK UP SONNY!'&lt;br /&gt;        say = gets.chomp&lt;br /&gt;    end&lt;br /&gt;year = rand(21) + 1930&lt;br /&gt;puts 'NO, NOT SINCE ' + year.to_s&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;3. Extend your Deaf Grandma program.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;say1 = ''&lt;br /&gt;say2 = ''&lt;br /&gt;say3 = ''&lt;br /&gt;&lt;br /&gt;while say1 != 'BYE' || say2 != 'BYE' || say3 != 'BYE'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while say1 != 'BYE'&lt;br /&gt;   &lt;br /&gt;    say1 = gets.chomp   &lt;br /&gt;&lt;br /&gt;    if say1 == say1.upcase&lt;br /&gt;        year1 = rand(22) + 1929&lt;br /&gt;        puts 'NO, NOT SINCE ' + year1.to_s   &lt;br /&gt;    else&lt;br /&gt;        puts 'HUH?! SPEAK UP, SONNY!'&lt;br /&gt;    end   &lt;br /&gt;&lt;br /&gt;    if say1 != 'BYE'&lt;br /&gt;        say2 = ''&lt;br /&gt;        say3 = ''&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;while say2 != 'BYE'&lt;br /&gt;&lt;br /&gt;    say2 = gets.chomp&lt;br /&gt;&lt;br /&gt;    if say2 == say2.upcase&lt;br /&gt;        year2 = rand(22) + 1929&lt;br /&gt;        puts 'NO, NOT SINCE ' + year2.to_s   &lt;br /&gt;    else&lt;br /&gt;        puts 'HUH?! SPEAK UP, SONNY!'&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    if say2 != 'BYE'&lt;br /&gt;        say1 = ''&lt;br /&gt;        say3 = ''&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end   &lt;br /&gt;&lt;br /&gt;while say3 != 'BYE'&lt;br /&gt;&lt;br /&gt;    say3 = gets.chomp&lt;br /&gt;&lt;br /&gt;    if say3 == say3.upcase&lt;br /&gt;        year3 = rand(22) + 1929&lt;br /&gt;        puts 'NO, NOT SINCE ' + year3.to_s   &lt;br /&gt;    else&lt;br /&gt;        puts 'HUH?! SPEAK UP, SONNY!'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if say3 != 'BYE'&lt;br /&gt;        say1 = ''&lt;br /&gt;        say2 = ''&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;end   &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;4. Leap Years.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts 'Input a starting year:'&lt;br /&gt;start_year = gets.chomp&lt;br /&gt;puts 'Input an ending year:'&lt;br /&gt;end_year = gets.chomp&lt;br /&gt;puts ''&lt;br /&gt;&lt;br /&gt;while start_year.to_i &lt;= end_year.to_i&lt;br /&gt;&lt;br /&gt;    if start_year.to_f%400 == 0&lt;br /&gt;        puts start_year&lt;br /&gt;    elsif start_year.to_f%100 == 0&lt;br /&gt;    elsif start_year.to_f%4 == 0&lt;br /&gt;        puts start_year&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    start_year = start_year.to_i + 1&lt;br /&gt;   &lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-8048031205549536525?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/8048031205549536525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/8048031205549536525'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-55-75-few-things-to-try.html' title='PAGE 55 7.5 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-8565525434580238907</id><published>2008-01-19T19:58:00.000-08:00</published><updated>2008-01-28T22:04:01.294-08:00</updated><title type='text'>PAGE 62 Last Paragraph</title><content type='html'>Puts an array containing other arrays.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;array = ['one', 'two', ['alpha', 'beta']]&lt;br /&gt;puts array&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-8565525434580238907?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/8565525434580238907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/8565525434580238907'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-62-last-paragraph.html' title='PAGE 62 Last Paragraph'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-4780182619516603967</id><published>2008-01-19T19:04:00.000-08:00</published><updated>2009-02-22T21:17:18.473-08:00</updated><title type='text'>PAGE 63 8.3 A Few Things to Try</title><content type='html'>1. Type as many words as you want. When you press enter on an empty line, the typed words are printed in alphabetical order.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts 'Type in as many words as you want. When finished press \'Enter\' on an empty line'&lt;br /&gt;x = 0&lt;br /&gt;word = 'word1'&lt;br /&gt;array =[]&lt;br /&gt;while word != ''&lt;br /&gt;    word = gets.chomp&lt;br /&gt;    array[x] = word&lt;br /&gt;    x = x + 1&lt;br /&gt;end&lt;br /&gt;puts ''&lt;br /&gt;puts array.sort&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;i&gt;A more straight-forward alternative, courtesy Adrian:&lt;/i&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;&lt;br /&gt;word = 'word'&lt;br /&gt;words =[]&lt;br /&gt;&lt;br /&gt;puts 'Please type as many words per line then press the Enter Key.'&lt;br /&gt;puts 'When you are finished press the Enter Key without typing anything.'&lt;br /&gt;while word != ''&lt;br /&gt;word = gets.chomp&lt;br /&gt;words = words.push word&lt;br /&gt;end&lt;br /&gt;puts ''&lt;br /&gt;puts 'Your original values:'&lt;br /&gt;puts words&lt;br /&gt;puts ''&lt;br /&gt;puts 'Your values sorted:'&lt;br /&gt;puts words.sort&lt;br /&gt;puts ''&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;i&gt;. . . and another alternative, courtesy Stephen:&lt;/i&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;awords = []&lt;br /&gt;word = "x"&lt;br /&gt;&lt;br /&gt;puts "Type as many words as you want, or press \"enter\" to quit."&lt;br /&gt;while word != ""&lt;br /&gt; #get word from user&lt;br /&gt; word = gets.chomp&lt;br /&gt;&lt;br /&gt; #add to array&lt;br /&gt; awords.push word&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;#user exited loop  test for array before printing&lt;br /&gt;if awords.empty?&lt;br /&gt; puts "Now sorting what you typed.. thanks."&lt;br /&gt; puts awords.sort&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;i&gt;. . . one more from Joraaver:&lt;/i&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts "Type in as many words as you want. When you are done, press \'Enter'\ on the next line."&lt;br /&gt;# array for the entries&lt;br /&gt;words = []&lt;br /&gt;entry = "0"&lt;br /&gt;# taking responses and pushing them into the array&lt;br /&gt;while entry != ""&lt;br /&gt;    entry = gets.chomp&lt;br /&gt;    words.push entry&lt;br /&gt;end&lt;br /&gt;# displaying data&lt;br /&gt;puts "Thanks for your input. Sorting data ..."&lt;br /&gt;puts words.sort &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;2. Rewrite table of contents program from p. 35 using arrays.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;toc = ['Table of Contents', 'Chapter 1:  Getting Started', 'page 1','Chapter 2:  Numbers','page 9',&lt;br /&gt;'Chapter 3:  Letters','page 13']&lt;br /&gt;page_width = 60&lt;br /&gt;puts (toc[0].center(page_width))&lt;br /&gt;puts ''&lt;br /&gt;puts (toc[1].ljust(page_width/2) + toc[2].rjust(page_width/2))&lt;br /&gt;puts (toc[3].ljust(page_width/2) + toc[4].rjust(page_width/2))&lt;br /&gt;puts (toc[5].ljust(page_width/2) + toc[6].rjust(page_width/2))&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;i&gt;Joraaver offers another solution:&lt;/i&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;toc = ["Table of Contents","Chapter 1: Getting Started", "page 1", &lt;br /&gt;"Chapter 2: Numbers", "page 9", "Chapter 3: Letters", "page 13"]&lt;br /&gt;line_width = 60&lt;br /&gt;i = 0&lt;br /&gt;puts(toc[0].center(line_width))&lt;br /&gt;puts ""&lt;br /&gt;# loop to define when to stop putting lines for the contents.&lt;br /&gt;until i == 6&lt;br /&gt;puts(toc[i += 1].ljust(line_width/2) + toc[i += 1].rjust(line_width/2))&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-4780182619516603967?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/4780182619516603967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/4780182619516603967'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-63-83-few-things-to-try.html' title='PAGE 63 8.3 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-7447573700104937091</id><published>2008-01-19T17:20:00.000-08:00</published><updated>2008-01-29T15:24:29.497-08:00</updated><title type='text'>PAGE 72 Top of Page</title><content type='html'>Find out what say_moo returns.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def say_moo number_of_moos&lt;br /&gt;    puts 'mooooooo....'*number_of_moos&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts say_moo(3)&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-7447573700104937091?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/7447573700104937091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/7447573700104937091'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-72-top-of-page.html' title='PAGE 72 Top of Page'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-5516208984118347976</id><published>2008-01-18T13:25:00.000-08:00</published><updated>2009-02-22T21:08:25.645-08:00</updated><title type='text'>PAGE 76 9.4 A Few Things to Try</title><content type='html'>1. Fix up the ask method.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def ask question&lt;br /&gt;&lt;br /&gt;puts question&lt;br /&gt;reply = gets.chomp.downcase&lt;br /&gt;&lt;br /&gt;while reply != 'yes' &amp;&amp; reply != 'no'&lt;br /&gt;    puts 'Please answer "yes" or "no".'&lt;br /&gt;    puts question&lt;br /&gt;    reply = gets.chomp.downcase&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if reply == 'yes'&lt;br /&gt;    return true&lt;br /&gt;else&lt;br /&gt;    return false&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts 'Hello, and thank you for ...'&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;ask 'Do you like eating tacos?'&lt;br /&gt;ask 'Do you like eating burritos?'&lt;br /&gt;wets_bed = ask 'Do you wet the bed?'&lt;br /&gt;ask 'Do you like eating chimichangas?'&lt;br /&gt;ask 'Do you like eating sopapillas?'&lt;br /&gt;puts 'Just a few more questions...'&lt;br /&gt;ask 'Do you like drinking horchata?'&lt;br /&gt;ask 'Do you like eating flautas?'&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;puts 'DEBRIEFING'&lt;br /&gt;puts 'Thank you for ...'&lt;br /&gt;puts&lt;br /&gt;puts wets_bed&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;i&gt;Erez Ben offers an alternative:&lt;/i&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def ask question&lt;br /&gt;    while question != ''&lt;br /&gt;        puts question&lt;br /&gt;        reply = gets.chomp.downcase&lt;br /&gt;        if reply == 'yes'&lt;br /&gt;          return true&lt;br /&gt;        elsif reply == 'no'&lt;br /&gt;          return false&lt;br /&gt;        end&lt;br /&gt;      puts ' Please answer "yes" or "no".'&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts ' Hello, and thank you for...'&lt;br /&gt;puts&lt;br /&gt;ask ' Do you like eating tacos?' # Ignore this return value&lt;br /&gt;ask ' Do you like eating burritos?' # And this one&lt;br /&gt;wets_bed = ask ' Do you wet the bed?' # Save this return value&lt;br /&gt;ask ' Do you like eating chimichangas?'&lt;br /&gt;ask ' Do you like eating sopapillas?'&lt;br /&gt;puts ' Just a few more questions...'&lt;br /&gt;ask ' Do you like drinking horchata?'&lt;br /&gt;ask ' Do you like eating flautas?'&lt;br /&gt;puts&lt;br /&gt;puts ' DEBRIEFING:'&lt;br /&gt;puts ' Thank you for...'&lt;br /&gt;puts&lt;br /&gt;puts wets_bed&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;i&gt;Eelco also offers an alternative:&lt;/i&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def ask question&lt;br /&gt;while true&lt;br /&gt;puts question&lt;br /&gt;reply = gets.chomp.downcase&lt;br /&gt;if reply == 'yes'&lt;br /&gt;return true&lt;br /&gt;else if reply == 'no'&lt;br /&gt;return  false&lt;br /&gt;else&lt;br /&gt;puts ' Please answer "yes" or "no".'&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts ' Hello, and thank you for...'&lt;br /&gt;puts&lt;br /&gt;ask ' Do you like eating tacos?' # Ignore this return value&lt;br /&gt;ask ' Do you like eating burritos?' # And this one&lt;br /&gt;wets_bed = ask ' Do you wet the bed?' # Save this return value&lt;br /&gt;ask ' Do you like eating chimichangas?'&lt;br /&gt;ask ' Do you like eating sopapillas?'&lt;br /&gt;puts ' Just a few more questions...'&lt;br /&gt;ask ' Do you like drinking horchata?'&lt;br /&gt;ask ' Do you like eating flautas?'&lt;br /&gt;puts&lt;br /&gt;puts ' DEBRIEFING:'&lt;br /&gt;puts ' Thank you for...'&lt;br /&gt;puts&lt;br /&gt;puts wets_bed&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Old-school Roman numerals.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def roman number&lt;br /&gt;&lt;br /&gt;m_length = 0&lt;br /&gt;d_length = 0&lt;br /&gt;c_length = 0&lt;br /&gt;l_length = 0&lt;br /&gt;x_length = 0&lt;br /&gt;v_length = 0&lt;br /&gt;i_length = 0&lt;br /&gt;&lt;br /&gt;    if number &gt;= 1000&lt;br /&gt;        m_length  = number/1000&lt;br /&gt;        number = number%1000&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    if number &gt;= 500&lt;br /&gt;        d_length  = number/500&lt;br /&gt;        number = number%500&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 100&lt;br /&gt;        c_length  = number/100&lt;br /&gt;        number = number%100&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 50&lt;br /&gt;        l_length  = number/50&lt;br /&gt;        number = number%50&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 10&lt;br /&gt;        x_length  = number/10&lt;br /&gt;        number = number%10&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 5&lt;br /&gt;        v_length  = number/5&lt;br /&gt;        number = number%5&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &lt; 5&lt;br /&gt;        i_length  = number/1&lt;br /&gt;        number = number%10&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;puts 'M'*m_length + 'D'*d_length + 'C'*c_length + 'L'*l_length + 'X'*x_length +&lt;br /&gt;'V'*v_length + 'I'*i_length &lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;roman 2999&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;3. Modern Roman numerals.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def roman number&lt;br /&gt;&lt;br /&gt;m_length = 0&lt;br /&gt;n900_length = 0&lt;br /&gt;d_length = 0&lt;br /&gt;n400_length = 0&lt;br /&gt;c_length = 0&lt;br /&gt;n90_length = 0&lt;br /&gt;l_length = 0&lt;br /&gt;n40_length = 0&lt;br /&gt;x_length = 0&lt;br /&gt;n9_length = 0&lt;br /&gt;v_length = 0&lt;br /&gt;n4_length = 0&lt;br /&gt;i_length = 0&lt;br /&gt;&lt;br /&gt;    if number &gt;= 1000&lt;br /&gt;        m_length  = number/1000&lt;br /&gt;        number = number%1000&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    if number &gt;= 900&lt;br /&gt;        n900_length  = number/900&lt;br /&gt;        number = number%900&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 500&lt;br /&gt;        d_length  = number/500&lt;br /&gt;        number = number%500&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 400&lt;br /&gt;        n400_length  = number/400&lt;br /&gt;        number = number%400&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 100&lt;br /&gt;        c_length  = number/100&lt;br /&gt;        number = number%100&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 90&lt;br /&gt;        n90_length  = number/90&lt;br /&gt;        number = number%90&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 50&lt;br /&gt;        l_length  = number/50&lt;br /&gt;        number = number%50&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 40&lt;br /&gt;        n40_length  = number/40&lt;br /&gt;        number = number%40&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 10&lt;br /&gt;        x_length  = number/10&lt;br /&gt;        number = number%10&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 9&lt;br /&gt;        n9_length  = number/9&lt;br /&gt;        number = number%9&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 5&lt;br /&gt;        v_length  = number/5&lt;br /&gt;        number = number%5&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &gt;= 4&lt;br /&gt;        n4_length  = number/4&lt;br /&gt;        number = number%4&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    if number &lt; 4&lt;br /&gt;        i_length  = number/1&lt;br /&gt;        number = number%10&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;puts 'M'*m_length + "CM"*n900_length + 'D'*d_length + 'CD'*n400_length + 'C'*c_length +&lt;br /&gt;'XC'*n90_length + 'L'*l_length + 'XL'*n40_length + 'X'*x_length + 'IX'*n9_length +&lt;br /&gt;'V'*v_length + 'IV'*n4_length + 'I'*i_length&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;x = ''&lt;br /&gt;while x != 'exit'&lt;br /&gt;puts 'Enter a number, and the equivalent roman numeral will be returned.'&lt;br /&gt;puts 'Type exit to quit.'&lt;br /&gt;x = gets.chomp&lt;br /&gt;roman x.to_i&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-5516208984118347976?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/5516208984118347976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/5516208984118347976'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-76-94-few-things-to-try.html' title='PAGE 76 9.4 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-1765055809884188364</id><published>2008-01-17T23:00:00.000-08:00</published><updated>2008-01-29T15:50:41.533-08:00</updated><title type='text'>PAGE 83 Bottom of the page.</title><content type='html'>Check to make sure don't fall off world&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;M = 'land'&lt;br /&gt;o = 'water'&lt;br /&gt;&lt;br /&gt;world = [&lt;br /&gt;[o,o,o,o,o,M,o,o,o,o,o],&lt;br /&gt;[o,o,o,o,M,M,o,o,o,o,o],&lt;br /&gt;[o,o,o,o,o,M,o,o,M,M,o],&lt;br /&gt;[o,o,o,M,o,M,o,o,o,M,o],&lt;br /&gt;[o,o,o,o,o,M,M,o,o,o,o],&lt;br /&gt;[o,o,o,o,M,M,M,M,o,o,o],&lt;br /&gt;[M,M,M,M,M,M,M,M,M,M,M],&lt;br /&gt;[o,o,o,M,M,o,M,M,M,o,o],&lt;br /&gt;[o,o,o,o,o,o,M,M,o,o,o],&lt;br /&gt;[o,M,o,o,o,M,M,o,o,o,o],&lt;br /&gt;[o,o,o,o,o,M,o,o,o,o,o]]&lt;br /&gt;&lt;br /&gt;def continent_size world, x ,y&lt;br /&gt;&lt;br /&gt;if x &lt; 0 or x &gt; 10 or y &lt; 0 or y &gt; 10&lt;br /&gt;return 0&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if world[y][x] != 'land'&lt;br /&gt;return 0&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;size = 1&lt;br /&gt;world [y][x] = 'counted land'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;size = size + continent_size(world, x-1, y-1)&lt;br /&gt;size = size + continent_size(world, x , y-1)&lt;br /&gt;size = size + continent_size(world, x+1, y-1)&lt;br /&gt;size = size + continent_size(world, x-1, y )&lt;br /&gt;size = size + continent_size(world, x+1, y )&lt;br /&gt;size = size + continent_size(world, x-1, y+1)&lt;br /&gt;size = size + continent_size(world, x , y+1)&lt;br /&gt;size = size + continent_size(world, x+1, y+1)&lt;br /&gt;size&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts continent_size(world, 5, 5)&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-1765055809884188364?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/1765055809884188364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/1765055809884188364'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-83-bottom-of-page.html' title='PAGE 83 Bottom of the page.'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-4958003603589081205</id><published>2008-01-17T22:00:00.000-08:00</published><updated>2008-01-29T15:53:19.848-08:00</updated><title type='text'>PAGE 84 10.2 Sorting</title><content type='html'>Sort method.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;# starting condition&lt;br /&gt;list = [ ]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# ask the question&lt;br /&gt;puts 'Enter a list of words, press \'enter\' to quit and they will be returned sorted.'&lt;br /&gt;word = 'one'&lt;br /&gt;&lt;br /&gt;# get the words in the first list&lt;br /&gt;while word != ''&lt;br /&gt;    word = gets.chomp   &lt;br /&gt;    list.push word&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# sort definition wrapper method&lt;br /&gt;def sort array&lt;br /&gt;count = -2&lt;br /&gt;&lt;br /&gt;# count number of words in first list&lt;br /&gt;    array.each do |word|&lt;br /&gt;    count = count + 1&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;recursive_sort(array, [ ], [ ], count)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# recursive sort method definition&lt;br /&gt;def recursive_sort listA, listB, sorted, nums&lt;br /&gt;&lt;br /&gt;# local variables&lt;br /&gt;x = 0&lt;br /&gt;y = 0&lt;br /&gt;z = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# cycle I&lt;br /&gt;while x &lt;= nums&lt;br /&gt;       &lt;br /&gt;    if listA[x] &lt;= listA[y]&lt;br /&gt;        y = y + 1&lt;br /&gt;&lt;br /&gt;        if y == nums + 1&lt;br /&gt;            sorted.push listA[x]&lt;br /&gt;            x = x + 1&lt;br /&gt;            y = 0&lt;br /&gt;            z = z + 1&lt;br /&gt;        end   &lt;br /&gt;&lt;br /&gt;    else&lt;br /&gt;        listB.push listA[x]&lt;br /&gt;        x = x + 1&lt;br /&gt;        y = 0   &lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# cycle II&lt;br /&gt;nums = nums - z&lt;br /&gt;listA = [ ]&lt;br /&gt;x = 0&lt;br /&gt;y = 0&lt;br /&gt;z = 0&lt;br /&gt;if nums &lt; 0&lt;br /&gt;    x = nums + 5&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;while x &lt;= nums&lt;br /&gt;   &lt;br /&gt;    if listB[x] &lt;= listB[y]&lt;br /&gt;        y = y + 1&lt;br /&gt;       &lt;br /&gt;        if y == nums + 1&lt;br /&gt;            sorted.push listB[x]&lt;br /&gt;            x = x + 1&lt;br /&gt;            y = 0&lt;br /&gt;            z = z + 1           &lt;br /&gt;        end&lt;br /&gt;   &lt;br /&gt;    else&lt;br /&gt;        listA.push listB[x]&lt;br /&gt;        x = x + 1&lt;br /&gt;        y = 0&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;nums = nums - z&lt;br /&gt;x = 0&lt;br /&gt;y = 0&lt;br /&gt;z = 0&lt;br /&gt;&lt;br /&gt;    if nums &lt; 0&lt;br /&gt;        puts 'sorted list: '&lt;br /&gt;        puts sorted&lt;br /&gt;   &lt;br /&gt;    else recursive_sort(listA, [ ], sorted, nums)&lt;br /&gt;&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;sort list&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-4958003603589081205?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/4958003603589081205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/4958003603589081205'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-84-102-sorting.html' title='PAGE 84 10.2 Sorting'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-7600674894201063680</id><published>2008-01-17T21:00:00.000-08:00</published><updated>2008-01-29T16:02:55.227-08:00</updated><title type='text'>PAGE 85 10.3 A Few Things to Try</title><content type='html'>1. Shuffle method.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;# starting condition&lt;br /&gt;list = [ ]&lt;br /&gt;&lt;br /&gt;# as the question&lt;br /&gt;puts 'Enter a list of words, press \'enter\' to quit and they will be returned randomly shuffled.'&lt;br /&gt;word = 'one'&lt;br /&gt;&lt;br /&gt;# get the words in the first list&lt;br /&gt;while word != ''&lt;br /&gt;    word = gets.chomp    &lt;br /&gt;    list.push word&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# define shuffle method&lt;br /&gt;def shuffle array&lt;br /&gt;&lt;br /&gt;# starting conditions of local variables&lt;br /&gt;randomized = [ ]&lt;br /&gt;count = -2&lt;br /&gt;x = 0&lt;br /&gt;y = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;array.each do |word|&lt;br /&gt;    count = count + 1&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;    while y &lt;= count&lt;br /&gt;&lt;br /&gt;        x = rand(count+1)&lt;br /&gt;&lt;br /&gt;        if array[x] != 'used'&lt;br /&gt;            randomized.push array[x]&lt;br /&gt;            array [x] = 'used'&lt;br /&gt;            y = y + 1&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;puts randomized&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;shuffle list&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;2. Dictionary sort method.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;# starting condition&lt;br /&gt;list = [ ]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# ask the question&lt;br /&gt;puts 'Enter a list of words, press \'enter\' to quit and they will be returned sorted.'&lt;br /&gt;word = 'one'&lt;br /&gt;&lt;br /&gt;# get the words in the first list&lt;br /&gt;while word != ''&lt;br /&gt;    word = gets.chomp  &lt;br /&gt;    list.push word&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# sort definition wrapper method&lt;br /&gt;def sort array&lt;br /&gt;count = -2&lt;br /&gt;&lt;br /&gt;# count number of words in first list&lt;br /&gt;    array.each do |word|&lt;br /&gt;    count = count + 1&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;recursive_sort(array, [ ], [ ], count)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# recursive sort method definition&lt;br /&gt;def recursive_sort listA, listB, sorted, nums&lt;br /&gt;&lt;br /&gt;# local variables&lt;br /&gt;x = 0&lt;br /&gt;y = 0&lt;br /&gt;z = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# cycle I&lt;br /&gt;while x &lt;= nums&lt;br /&gt;      &lt;br /&gt;    if listA[x].downcase &lt;= listA[y].downcase&lt;br /&gt;        y = y + 1&lt;br /&gt;&lt;br /&gt;        if y == nums + 1&lt;br /&gt;            sorted.push listA[x]&lt;br /&gt;            x = x + 1&lt;br /&gt;            y = 0&lt;br /&gt;            z = z + 1&lt;br /&gt;        end  &lt;br /&gt;&lt;br /&gt;    else&lt;br /&gt;        listB.push listA[x]&lt;br /&gt;        x = x + 1&lt;br /&gt;        y = 0  &lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# cycle II&lt;br /&gt;nums = nums - z&lt;br /&gt;listA = [ ]&lt;br /&gt;x = 0&lt;br /&gt;y = 0&lt;br /&gt;z = 0&lt;br /&gt;if nums &lt; 0&lt;br /&gt;    x = nums + 5&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;while x &lt;= nums&lt;br /&gt;  &lt;br /&gt;    if listB[x].downcase &lt;= listB[y].downcase&lt;br /&gt;        y = y + 1&lt;br /&gt;      &lt;br /&gt;        if y == nums + 1&lt;br /&gt;            sorted.push listB[x]&lt;br /&gt;            x = x + 1&lt;br /&gt;            y = 0&lt;br /&gt;            z = z + 1          &lt;br /&gt;        end&lt;br /&gt;  &lt;br /&gt;    else&lt;br /&gt;        listA.push listB[x]&lt;br /&gt;        x = x + 1&lt;br /&gt;        y = 0&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;nums = nums - z&lt;br /&gt;x = 0&lt;br /&gt;y = 0&lt;br /&gt;z = 0&lt;br /&gt;&lt;br /&gt;    if nums &lt; 0&lt;br /&gt;        puts 'sorted list: '&lt;br /&gt;        puts sorted&lt;br /&gt;  &lt;br /&gt;    else recursive_sort(listA, [ ], sorted, nums)&lt;br /&gt;&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;sort list&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-7600674894201063680?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/7600674894201063680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/7600674894201063680'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-85-103-few-things-to-try.html' title='PAGE 85 10.3 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-4994937691677828498</id><published>2008-01-17T20:00:00.000-08:00</published><updated>2008-01-29T16:09:38.926-08:00</updated><title type='text'>PAGE 92 10.5 A Few More Things To Try</title><content type='html'>1 &amp; 2. Expand upon english_number with thousands, millions, billions, and trillions&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def english_number number&lt;br /&gt;    if number &lt; 0 # no neg numbers&lt;br /&gt;        return 'Please enter a number that isn\'t negative'&lt;br /&gt;    end&lt;br /&gt;    if number == 0&lt;br /&gt;        return 'zero'&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # no more special cases, no more returns&lt;br /&gt;   &lt;br /&gt;    num_string = '' # This is the string we will return, define it an start 'empty'&lt;br /&gt;   &lt;br /&gt;    ones_place = [    'one',        'two',        'three',&lt;br /&gt;                    'four',        'five',        'six',&lt;br /&gt;                    'seven',    'eight',    'nine']&lt;br /&gt;   &lt;br /&gt;    tens_place = [    'ten',        'twenty',    'thirty',&lt;br /&gt;                    'forty',    'fifty',    'sixty',&lt;br /&gt;                    'seventy',    'eighty',    'ninty']&lt;br /&gt;   &lt;br /&gt;    teenagers = [    'eleven',        'twelve',        'thirteen',&lt;br /&gt;                    'fourteen',        'fifteen',        'sixteen',&lt;br /&gt;                    'seventeen',    'eighteen',        'nineteen']&lt;br /&gt;                   &lt;br /&gt;   &lt;br /&gt;    # "left" is how much of the number we still have to write&lt;br /&gt;    #  "write" is which part we are writing out at the time&lt;br /&gt;&lt;br /&gt;    left = number&lt;br /&gt;&lt;br /&gt;    # trillions&lt;br /&gt;    write = left/1000000000000&lt;br /&gt;    left = left - write*1000000000000&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        trillions = english_number write&lt;br /&gt;        num_string = num_string + trillions + ' trillion'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # billions&lt;br /&gt;    write = left/1000000000&lt;br /&gt;    left = left - write*1000000000&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        billions = english_number write&lt;br /&gt;        num_string = num_string + billions + ' billion'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    # millions&lt;br /&gt;    write = left/1000000&lt;br /&gt;    left = left - write*1000000&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        millions = english_number write&lt;br /&gt;        num_string = num_string + millions + ' million'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # thousands&lt;br /&gt;    write = left/1000&lt;br /&gt;    left = left - write*1000&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        thousands = english_number write&lt;br /&gt;        num_string = num_string + thousands + ' thousand'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    write = left/100            # how many hundreds left&lt;br /&gt;    left = left - write*100     # subtract off those hundreds&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        # recursion&lt;br /&gt;        hundreds = english_number write&lt;br /&gt;        num_string = num_string + hundreds + ' hundred'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        # adds a space&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    write = left/10            # how many tens left&lt;br /&gt;    left = left - write*10    # subtract off those tens&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        if ((write == 1) and (left &gt; 0))&lt;br /&gt;        # exception for teenagers&lt;br /&gt;        num_string = num_string + teenagers[left-1]&lt;br /&gt;        # -1 because of the array ordering [0] is eleven etc.&lt;br /&gt;        # with teenagers the digit in the ones place is taken care of so nothing left&lt;br /&gt;        left = 0&lt;br /&gt;        else&lt;br /&gt;            num_string = num_string + tens_place[write-1]&lt;br /&gt;        end&lt;br /&gt;   &lt;br /&gt;        if left &gt; 0&lt;br /&gt;            # add a space&lt;br /&gt;            num_string = num_string + '-'&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    write = left    # how many ones left&lt;br /&gt;    left = 0        # subtract off those ones&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        num_string = num_string + ones_place[write-1]&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # now we just return the num_string&lt;br /&gt;   &lt;br /&gt;    num_string&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts english_number(  0)&lt;br /&gt;puts english_number(  9)&lt;br /&gt;puts english_number( 10)&lt;br /&gt;puts english_number( 11)&lt;br /&gt;puts english_number( 17)&lt;br /&gt;puts english_number( 32)&lt;br /&gt;puts english_number( 88)&lt;br /&gt;puts english_number( 99)&lt;br /&gt;puts english_number(100)&lt;br /&gt;puts english_number(101)&lt;br /&gt;puts english_number(234)&lt;br /&gt;puts english_number(3211)&lt;br /&gt;puts english_number(999999)&lt;br /&gt;puts english_number(1000000000000)&lt;br /&gt;puts english_number(1000)&lt;br /&gt;puts english_number(10000)&lt;br /&gt;puts english_number(1000000)&lt;br /&gt;puts english_number(10000000)&lt;br /&gt;puts english_number(1000000000)&lt;br /&gt;puts english_number(10000000000)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;3. Wedding number format.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def english_number number&lt;br /&gt;    if number &lt; 0 # no neg numbers&lt;br /&gt;        return 'Please enter a number that isn\'t negative'&lt;br /&gt;    end&lt;br /&gt;    if number == 0&lt;br /&gt;        return 'zero'&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # no more special cases, no more returns&lt;br /&gt;   &lt;br /&gt;    num_string = '' # This is the string we will return, define it an start 'empty'&lt;br /&gt;   &lt;br /&gt;    ones_place = [    'one',        'two',        'three',&lt;br /&gt;                    'four',        'five',        'six',&lt;br /&gt;                    'seven',    'eight',    'nine']&lt;br /&gt;   &lt;br /&gt;    tens_place = [    'ten',        'twenty',    'thirty',&lt;br /&gt;                    'forty',    'fifty',    'sixty',&lt;br /&gt;                    'seventy',    'eighty',    'ninty']&lt;br /&gt;   &lt;br /&gt;    teenagers = [    'eleven',        'twelve',        'thirteen',&lt;br /&gt;                    'fourteen',        'fifteen',        'sixteen',&lt;br /&gt;                    'seventeen',    'eighteen',        'nineteen']&lt;br /&gt;                   &lt;br /&gt;   &lt;br /&gt;    # "left" is how much of the number we still have to write&lt;br /&gt;    #  "write" is which part we are writing out at the time&lt;br /&gt;&lt;br /&gt;    left = number&lt;br /&gt;&lt;br /&gt;    # trillions&lt;br /&gt;    write = left/1000000000000&lt;br /&gt;    left = left - write*1000000000000&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        trillions = english_number write&lt;br /&gt;        num_string = num_string + trillions + ' trillion'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # billions&lt;br /&gt;    write = left/1000000000&lt;br /&gt;    left = left - write*1000000000&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        billions = english_number write&lt;br /&gt;        num_string = num_string + billions + ' billion'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' and '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    # millions&lt;br /&gt;    write = left/1000000&lt;br /&gt;    left = left - write*1000000&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        millions = english_number write&lt;br /&gt;        num_string = num_string + millions + ' million'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' and '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # thousands&lt;br /&gt;    write = left/1000&lt;br /&gt;    left = left - write*1000&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        thousands = english_number write&lt;br /&gt;        num_string = num_string + thousands + ' thousand'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' and '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    write = left/100            # how many hundreds left&lt;br /&gt;    left = left - write*100     # subtract off those hundreds&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        # recursion&lt;br /&gt;        hundreds = english_number write&lt;br /&gt;        num_string = num_string + hundreds + ' hundred'&lt;br /&gt;       &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        # adds a space&lt;br /&gt;        num_string = num_string + ' and '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    write = left/10            # how many tens left&lt;br /&gt;    left = left - write*10    # subtract off those tens&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        if ((write == 1) and (left &gt; 0))&lt;br /&gt;        # exception for teenagers&lt;br /&gt;        num_string = num_string + teenagers[left-1]&lt;br /&gt;        # -1 because of the array ordering [0] is eleven etc.&lt;br /&gt;        # with teenagers the digit in the ones place is taken care of so nothing left&lt;br /&gt;        left = 0&lt;br /&gt;        else&lt;br /&gt;            num_string = num_string + tens_place[write-1]&lt;br /&gt;        end&lt;br /&gt;   &lt;br /&gt;        if left &gt; 0&lt;br /&gt;            # add a space&lt;br /&gt;            num_string = num_string + ' and '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    write = left    # how many ones left&lt;br /&gt;    left = 0        # subtract off those ones&lt;br /&gt;   &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        num_string = num_string + ones_place[write-1]&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # now we just return the num_string&lt;br /&gt;   &lt;br /&gt;    num_string&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts english_number(  0)&lt;br /&gt;puts english_number(  9)&lt;br /&gt;puts english_number( 10)&lt;br /&gt;puts english_number( 11)&lt;br /&gt;puts english_number( 17)&lt;br /&gt;puts english_number( 32)&lt;br /&gt;puts english_number( 88)&lt;br /&gt;puts english_number( 99)&lt;br /&gt;puts english_number(100)&lt;br /&gt;puts english_number(101)&lt;br /&gt;puts english_number(234)&lt;br /&gt;puts english_number(3211)&lt;br /&gt;puts english_number(999999)&lt;br /&gt;puts english_number(1000000000000)&lt;br /&gt;puts english_number(1000)&lt;br /&gt;puts english_number(10000)&lt;br /&gt;puts english_number(1000000)&lt;br /&gt;puts english_number(10000000)&lt;br /&gt;puts english_number(1000000000)&lt;br /&gt;puts english_number(10000000000)&lt;br /&gt;puts english_number(1976)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;4. 'Ninety-nine Bottles of Beer" using english_number.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def english_number number&lt;br /&gt;    if number &lt; 0 # no neg numbers&lt;br /&gt;        return 'Please enter a number that isn\'t negative'&lt;br /&gt;    end&lt;br /&gt;    if number == 0&lt;br /&gt;        return 'zero'&lt;br /&gt;    end&lt;br /&gt;  &lt;br /&gt;    # no more special cases, no more returns&lt;br /&gt;  &lt;br /&gt;    num_string = '' # This is the string we will return, define it an start 'empty'&lt;br /&gt;  &lt;br /&gt;    ones_place = [    'one',        'two',        'three',&lt;br /&gt;                    'four',        'five',        'six',&lt;br /&gt;                    'seven',    'eight',    'nine']&lt;br /&gt;  &lt;br /&gt;    tens_place = [    'ten',        'twenty',    'thirty',&lt;br /&gt;                    'forty',    'fifty',    'sixty',&lt;br /&gt;                    'seventy',    'eighty',    'ninty']&lt;br /&gt;  &lt;br /&gt;    teenagers = [    'eleven',        'twelve',        'thirteen',&lt;br /&gt;                    'fourteen',        'fifteen',        'sixteen',&lt;br /&gt;                    'seventeen',    'eighteen',        'nineteen']&lt;br /&gt;                  &lt;br /&gt;  &lt;br /&gt;    # "left" is how much of the number we still have to write&lt;br /&gt;    #  "write" is which part we are writing out at the time&lt;br /&gt;&lt;br /&gt;    left = number&lt;br /&gt;&lt;br /&gt;    # trillions&lt;br /&gt;    write = left/1000000000000&lt;br /&gt;    left = left - write*1000000000000&lt;br /&gt;  &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        trillions = english_number write&lt;br /&gt;        num_string = num_string + trillions + ' trillion'&lt;br /&gt;      &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;  &lt;br /&gt;    # billions&lt;br /&gt;    write = left/1000000000&lt;br /&gt;    left = left - write*1000000000&lt;br /&gt;  &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        billions = english_number write&lt;br /&gt;        num_string = num_string + billions + ' billion'&lt;br /&gt;      &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    # millions&lt;br /&gt;    write = left/1000000&lt;br /&gt;    left = left - write*1000000&lt;br /&gt;  &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        millions = english_number write&lt;br /&gt;        num_string = num_string + millions + ' million'&lt;br /&gt;      &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;  &lt;br /&gt;    # thousands&lt;br /&gt;    write = left/1000&lt;br /&gt;    left = left - write*1000&lt;br /&gt;  &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        thousands = english_number write&lt;br /&gt;        num_string = num_string + thousands + ' thousand'&lt;br /&gt;      &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    write = left/100            # how many hundreds left&lt;br /&gt;    left = left - write*100     # subtract off those hundreds&lt;br /&gt;  &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        # recursion&lt;br /&gt;        hundreds = english_number write&lt;br /&gt;        num_string = num_string + hundreds + ' hundred'&lt;br /&gt;      &lt;br /&gt;        if left &gt; 0&lt;br /&gt;        # adds a space&lt;br /&gt;        num_string = num_string + ' '&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;  &lt;br /&gt;    write = left/10            # how many tens left&lt;br /&gt;    left = left - write*10    # subtract off those tens&lt;br /&gt;  &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        if ((write == 1) and (left &gt; 0))&lt;br /&gt;        # exception for teenagers&lt;br /&gt;        num_string = num_string + teenagers[left-1]&lt;br /&gt;        # -1 because of the array ordering [0] is eleven etc.&lt;br /&gt;        # with teenagers the digit in the ones place is taken care of so nothing left&lt;br /&gt;        left = 0&lt;br /&gt;        else&lt;br /&gt;            num_string = num_string + tens_place[write-1]&lt;br /&gt;        end&lt;br /&gt;  &lt;br /&gt;        if left &gt; 0&lt;br /&gt;            # add a space&lt;br /&gt;            num_string = num_string + '-'&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;  &lt;br /&gt;    write = left    # how many ones left&lt;br /&gt;    left = 0        # subtract off those ones&lt;br /&gt;  &lt;br /&gt;    if write &gt; 0&lt;br /&gt;        num_string = num_string + ones_place[write-1]&lt;br /&gt;    end&lt;br /&gt;  &lt;br /&gt;    # now we just return the num_string&lt;br /&gt;  &lt;br /&gt;    num_string&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;bottles = 999&lt;br /&gt;while bottles != 0&lt;br /&gt;    puts english_number(bottles).to_s + ' bottles of beer on the wall'&lt;br /&gt;    puts english_number(bottles).to_s + ' bottles of beer'&lt;br /&gt;    bottles = bottles - 1&lt;br /&gt;    puts 'take one down, pass it around'&lt;br /&gt;  &lt;br /&gt;    if bottles == 1&lt;br /&gt;        puts english_number(bottles).to_s + ' bottle of beer on the wall'&lt;br /&gt;    else  &lt;br /&gt;        puts english_number(bottles).to_s + ' bottles of beer on the wall'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    puts ''&lt;br /&gt;  &lt;br /&gt;    if bottles == 1&lt;br /&gt;        puts english_number(bottles).to_s + ' bottle of beer on the wall'&lt;br /&gt;        puts english_number(bottles).to_s + ' bottle of beer'&lt;br /&gt;        bottles = bottles - 1&lt;br /&gt;        puts 'take one down, pass it around'&lt;br /&gt;        puts english_number(bottles).to_s + ' bottles of beer on the wall'&lt;br /&gt;    end  &lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-4994937691677828498?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/4994937691677828498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/4994937691677828498'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-92-105-few-more-things-to-try.html' title='PAGE 92 10.5 A Few More Things To Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-2679422616825388355</id><published>2008-01-17T19:00:00.000-08:00</published><updated>2008-01-29T16:21:01.981-08:00</updated><title type='text'>PAGE 104 11.6 A Few Things To Try</title><content type='html'>1. Adapt picture-downloading/file-renaming program to your computer.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;Picture-download/file-rename program&lt;br /&gt;# Mac gives a 'cross-device link error' when using File.rename&lt;br /&gt;# to move between Volumes. So assume all pics are moved from camera drive&lt;br /&gt;# to a folder on the computer, 'camera', and then need to be renamed and moved&lt;br /&gt;# to a pictures folder on the desktop.&lt;br /&gt;&lt;br /&gt;folder_name = 'Desktop/pics/'&lt;br /&gt;&lt;br /&gt;pic_names = Dir['camera/**/*.{JPG,jpg}']&lt;br /&gt;&lt;br /&gt;puts 'what would you like to call this batch?'&lt;br /&gt;batch_name = gets.chomp&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;print 'Downloading '+ pic_names.length.to_s+' files: '&lt;br /&gt;&lt;br /&gt;pic_number  = 1&lt;br /&gt;&lt;br /&gt;pic_names.each do |name|&lt;br /&gt;    print '.'&lt;br /&gt;   &lt;br /&gt;    new_name = if pic_number &lt; 10&lt;br /&gt;        folder_name.to_s + batch_name + '0' + pic_number.to_s + '.jpg'&lt;br /&gt;    else&lt;br /&gt;        folder_name.to_s + batch_name + pic_number.to_s + '.jpg'&lt;br /&gt;    end   &lt;br /&gt;   &lt;br /&gt;    if File.exist? new_name&lt;br /&gt;        puts&lt;br /&gt;        puts 'DANGER: file names already exist, exiting!'&lt;br /&gt;        puts&lt;br /&gt;        exit&lt;br /&gt;    else&lt;br /&gt;    File.rename name, new_name&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    pic_number = pic_number + 1&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;puts 'Done'&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;2. Build your own playlists.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def shuffle array&lt;br /&gt;&lt;br /&gt;x = 0&lt;br /&gt;track_number = 0&lt;br /&gt;number_songs = 0&lt;br /&gt;playlist = [ ]&lt;br /&gt;&lt;br /&gt;number_songs = array.length&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while x &lt; number_songs&lt;br /&gt;&lt;br /&gt;track_number = rand(number_songs)&lt;br /&gt;&lt;br /&gt;    if array[track_number] != ''&lt;br /&gt;        playlist.push array[track_number]&lt;br /&gt;        array[track_number] = ''&lt;br /&gt;        x = x + 1&lt;br /&gt;    else&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;filename = 'Desktop/playlist.m3u'&lt;br /&gt;&lt;br /&gt;File.open filename, 'w' do |f|&lt;br /&gt;    f.puts playlist&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;tracks = Dir['Desktop/music/**/*.{ogg,mp3,m4a}']&lt;br /&gt;&lt;br /&gt;shuffle tracks&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;3. Mixed random better playlist.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;# music_shuffle tries to minimize clumping at the beginning of playlist,&lt;br /&gt;# does not generate a perfectly mixed up playlist&lt;br /&gt;# just less clumpy&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def music_shuffle array&lt;br /&gt;&lt;br /&gt;x = 0&lt;br /&gt;track_number = 0&lt;br /&gt;number_songs = 0&lt;br /&gt;playlist = [ ]&lt;br /&gt;full_song_name = [ ]&lt;br /&gt;album_on_deck = ''&lt;br /&gt;previous_album = ''&lt;br /&gt;&lt;br /&gt;number_songs = array.length&lt;br /&gt;&lt;br /&gt;    while x &lt; number_songs&lt;br /&gt;&lt;br /&gt;    track_number = rand(number_songs)&lt;br /&gt;           &lt;br /&gt;    full_song_name = array[track_number].split'/'&lt;br /&gt;&lt;br /&gt;    album_on_deck = full_song_name[2]&lt;br /&gt;&lt;br /&gt;        if album_on_deck != previous_album&lt;br /&gt;   &lt;br /&gt;            if array[track_number] != ''&lt;br /&gt;                playlist.push array[track_number]&lt;br /&gt;                array[track_number] = ''&lt;br /&gt;                x = x + 1&lt;br /&gt;            else&lt;br /&gt;            end&lt;br /&gt;           &lt;br /&gt;            previous_album = album_on_deck&lt;br /&gt;       &lt;br /&gt;        else   &lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;filename = 'Desktop/playlist.m3u'&lt;br /&gt;&lt;br /&gt;    File.open filename, 'w' do |f|&lt;br /&gt;        f.puts playlist&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;tracks = Dir['Desktop/music/**/*.{ogg,mp3,m4a}']&lt;br /&gt;&lt;br /&gt;music_shuffle tracks&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-2679422616825388355?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/2679422616825388355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/2679422616825388355'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-104-116-few-things-to-try.html' title='PAGE 104 11.6 A Few Things To Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-8839905667404970290</id><published>2008-01-17T18:25:00.000-08:00</published><updated>2008-01-29T16:30:05.209-08:00</updated><title type='text'>PAGE 108 12.2 A Few Things To Try</title><content type='html'>1. one billion seconds . . .&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;birth_time = Time.mktime(1976, 10, 7, 11, 40, 54)&lt;br /&gt;billion_seconds_old = birth_time + 1000000000&lt;br /&gt;puts billion_seconds_old&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;2. Happy Birthday!&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;x = 0&lt;br /&gt;&lt;br /&gt;puts 'What year were you born in?'&lt;br /&gt;year = gets.chomp&lt;br /&gt;&lt;br /&gt;while x != 1&lt;br /&gt;puts 'What month were you born in?'&lt;br /&gt;month = gets.chomp.downcase&lt;br /&gt;&lt;br /&gt;    if month == 'january'&lt;br /&gt;        month = 1&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'february'&lt;br /&gt;        month = 2&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'march'&lt;br /&gt;        month = 3&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'april'&lt;br /&gt;        month = 4&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'may'&lt;br /&gt;        month = 5&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'june'&lt;br /&gt;        month = 6&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'july'&lt;br /&gt;        month = 7&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'august'&lt;br /&gt;        month = 8&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'september'&lt;br /&gt;        month = 9&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'october'&lt;br /&gt;        month = 10&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'november'&lt;br /&gt;        month = 11&lt;br /&gt;        x = 1&lt;br /&gt;    elsif month == 'december'&lt;br /&gt;        month = 12&lt;br /&gt;        x = 1&lt;br /&gt;    else&lt;br /&gt;        puts 'Please type in a month'&lt;br /&gt;        x = 0&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts 'What day were you born on?'&lt;br /&gt;day = gets.chomp&lt;br /&gt;&lt;br /&gt;right_now = Time.new&lt;br /&gt;birth_day = Time.mktime(year.to_i, month.to_i, day.to_i)&lt;br /&gt;&lt;br /&gt;years_old = (right_now - birth_day)/(60*60*24*365)&lt;br /&gt;&lt;br /&gt;puts ''&lt;br /&gt;&lt;br /&gt;years_old.to_i.times do&lt;br /&gt;    puts 'spank'&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-8839905667404970290?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/8839905667404970290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/8839905667404970290'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-108-122-few-things-to-try.html' title='PAGE 108 12.2 A Few Things To Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-4481468442339781457</id><published>2008-01-17T18:00:00.000-08:00</published><updated>2008-01-29T16:37:11.243-08:00</updated><title type='text'>PAGE 113 12.6 A Few Things To Try</title><content type='html'>1. Roman numeral to integer.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;# Create new hash&lt;br /&gt;roman_numeral = { }&lt;br /&gt;status = 'invalid'&lt;br /&gt;&lt;br /&gt;# Defining the roman numeral hash&lt;br /&gt;roman_numeral['I'] = 1&lt;br /&gt;roman_numeral['V'] = 5&lt;br /&gt;roman_numeral['X'] = 10&lt;br /&gt;roman_numeral['L'] = 50&lt;br /&gt;roman_numeral['C'] = 100&lt;br /&gt;roman_numeral['D'] = 500&lt;br /&gt;roman_numeral['M'] = 1000&lt;br /&gt;&lt;br /&gt;while status != 'valid'&lt;br /&gt;&lt;br /&gt;    # Request a Roman numeral, capitalize input and put in array&lt;br /&gt;    puts 'Please input a Roman Numeral'&lt;br /&gt;    input_numeral = gets.chomp.upcase&lt;br /&gt;    no_of_chars = input_numeral.length&lt;br /&gt;        input_array = [ ]&lt;br /&gt;        counter1 = 0&lt;br /&gt;        while counter1 &lt; no_of_chars&lt;br /&gt;            input_array.push input_numeral[counter1]&lt;br /&gt;            counter1 = counter1 + 1&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;    # Check each character in the array to see if its a Roman Numeral&lt;br /&gt;    counter2 = 0&lt;br /&gt;&lt;br /&gt;    input_array.each do |input_letter|&lt;br /&gt;&lt;br /&gt;        roman_numeral.each do |rom_letter,number|   &lt;br /&gt;&lt;br /&gt;            if input_letter.chr == rom_letter&lt;br /&gt;                counter2 = counter2 + 1&lt;br /&gt;            else&lt;br /&gt;            end&lt;br /&gt;&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;    end   &lt;br /&gt;&lt;br /&gt;    if counter2 == input_array.length&lt;br /&gt;        status = 'valid'&lt;br /&gt;    else&lt;br /&gt;        status = 'invalid'&lt;br /&gt;        puts 'Error: Not all characters are valid roman numerals'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Convert roman numeral letter array to array of numbers&lt;br /&gt;number_array = [ ]&lt;br /&gt;&lt;br /&gt;input_array.each do |letter|&lt;br /&gt;    letter = letter.chr&lt;br /&gt;    number = roman_numeral[letter]&lt;br /&gt;    number_array.push number&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Add/Subtract number array one at a time starting from right&lt;br /&gt;counter3 = number_array.length - 1&lt;br /&gt;&lt;br /&gt;    # Starting value, first number&lt;br /&gt;    number = number_array[counter3]&lt;br /&gt;    counter3 = counter3 - 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    while counter3 &gt; -1&lt;br /&gt;   &lt;br /&gt;        # Sum from left to right&lt;br /&gt;        if number_array[counter3] &lt; number_array[counter3+1]&lt;br /&gt;            number = number - number_array[counter3]&lt;br /&gt;        else&lt;br /&gt;            number = number + number_array[counter3]&lt;br /&gt;        end&lt;br /&gt;       &lt;br /&gt;        counter3 = counter3 - 1&lt;br /&gt;&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;puts number   &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;2. Birthday Helper&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;# Program needs .txt input file. &lt;br /&gt;&lt;br /&gt;filename = 'birthdays.txt'&lt;br /&gt;birth_dates = { }&lt;br /&gt;&lt;br /&gt;File.open filename do |f|   &lt;br /&gt;    f.each_line do |entry|&lt;br /&gt;        date = entry[-13..-1]&lt;br /&gt;        name = entry[0..-15]       &lt;br /&gt;        birth_dates[name] = date&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;puts 'Enter a name and their next birthday will be returned'&lt;br /&gt;name = gets.chomp&lt;br /&gt;&lt;br /&gt;date = birth_dates[name]&lt;br /&gt;year = date[-5..-1].to_i&lt;br /&gt;day = date[-9,2].to_i&lt;br /&gt;&lt;br /&gt;month_string = date[-13,3]&lt;br /&gt;    if month_string == 'Jan'&lt;br /&gt;        month = 1&lt;br /&gt;    elsif month_string == 'Feb'&lt;br /&gt;        month = 2&lt;br /&gt;    elsif month_string == 'Mar'&lt;br /&gt;        month = 3&lt;br /&gt;    elsif month_string == 'Apr'&lt;br /&gt;        month = 4&lt;br /&gt;    elsif month_string == 'May'&lt;br /&gt;        month = 5&lt;br /&gt;    elsif month_string == 'Jun'&lt;br /&gt;        month = 6&lt;br /&gt;    elsif month_string == 'Jul'&lt;br /&gt;        month = 7&lt;br /&gt;    elsif month_string == 'Aug'&lt;br /&gt;        month = 8&lt;br /&gt;    elsif month_string == 'Sep'&lt;br /&gt;        month = 9&lt;br /&gt;    elsif month_string == 'Oct'&lt;br /&gt;        month = 10&lt;br /&gt;    elsif month_string == 'Nov'&lt;br /&gt;        month = 11&lt;br /&gt;    elsif month_string == 'Dec'&lt;br /&gt;        month = 12       &lt;br /&gt;    end   &lt;br /&gt;&lt;br /&gt;today = Time.new&lt;br /&gt;&lt;br /&gt;birthdate = Time.mktime(year,month,day)&lt;br /&gt;birthday = Time.mktime(2008,month,day)&lt;br /&gt;&lt;br /&gt;if birthday &lt; today&lt;br /&gt;    next_birthday = Time.mktime(2009,month,day)&lt;br /&gt;    age = (next_birthday - birthdate)/(60*60*24*365)&lt;br /&gt;    age = age.to_i&lt;br /&gt;    puts name + '\'s next birthday will be ' + next_birthday.to_s&lt;br /&gt;    puts 'and they will be ' + age.to_s + ' years old'&lt;br /&gt;else&lt;br /&gt;    age = (birthday - birthdate)/(60*60*24*365)&lt;br /&gt;    age = age.to_i&lt;br /&gt;    puts name + '\'s next birthday will be ' + birthday.to_s&lt;br /&gt;    puts 'and they will be ' + age.to_s + ' years old'&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-4481468442339781457?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/4481468442339781457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/4481468442339781457'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-113-126-few-things-to-try.html' title='PAGE 113 12.6 A Few Things To Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-1667769988969410817</id><published>2008-01-17T17:00:00.000-08:00</published><updated>2008-01-29T16:47:47.496-08:00</updated><title type='text'>PAGE 117 13.1 A Few Things to Try</title><content type='html'>1. Shuffle method as array method&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;# starting condition&lt;br /&gt;list = [ ]&lt;br /&gt;&lt;br /&gt;# ask the question&lt;br /&gt;puts 'Enter a list of words, press \'enter\' to quit and they will be returned randomly shuffled.'&lt;br /&gt;word = 'one'&lt;br /&gt;&lt;br /&gt;# get the words in the first list&lt;br /&gt;while word != ''&lt;br /&gt;    word = gets.chomp   &lt;br /&gt;    list.push word&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# defining the array method&lt;br /&gt;&lt;br /&gt;class Array&lt;br /&gt;&lt;br /&gt;    # defining to_shuffle&lt;br /&gt;    def to_shuffle&lt;br /&gt;&lt;br /&gt;        # starting conditions of local variables&lt;br /&gt;        randomized = [ ]&lt;br /&gt;        count = -2&lt;br /&gt;        x = 0&lt;br /&gt;        y = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        self.each do |word|&lt;br /&gt;            count = count + 1&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        while y &lt;= count&lt;br /&gt;&lt;br /&gt;            x = rand(count+1)&lt;br /&gt;&lt;br /&gt;            if self[x] != 'used'&lt;br /&gt;                randomized.push self[x]&lt;br /&gt;                self[x] = 'used'&lt;br /&gt;                y = y + 1&lt;br /&gt;            end&lt;br /&gt;&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        puts randomized&lt;br /&gt;&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# shuffling and array&lt;br /&gt;&lt;br /&gt;list.to_shuffle&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;2. Factorial method as integer method.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;puts 'Enter a number and the factorial of that number will be returned'&lt;br /&gt;num = gets.chomp.to_i&lt;br /&gt;&lt;br /&gt;class Integer&lt;br /&gt;&lt;br /&gt;    def factorial&lt;br /&gt;        if self &lt; 0&lt;br /&gt;            return 'You can\'t take the factorial of a negative number!'&lt;br /&gt;        end&lt;br /&gt;       &lt;br /&gt;        if self &lt;= 1&lt;br /&gt;            1&lt;br /&gt;        else&lt;br /&gt;            self * (self-1).factorial&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts num.factorial&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;3. Roman numeral method as Integer method.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;class Integer&lt;br /&gt;&lt;br /&gt;    def roman&lt;br /&gt;&lt;br /&gt;    m_length = 0&lt;br /&gt;    n900_length = 0&lt;br /&gt;    d_length = 0&lt;br /&gt;    n400_length = 0&lt;br /&gt;    c_length = 0&lt;br /&gt;    n90_length = 0&lt;br /&gt;    l_length = 0&lt;br /&gt;    n40_length = 0&lt;br /&gt;    x_length = 0&lt;br /&gt;    n9_length = 0&lt;br /&gt;    v_length = 0&lt;br /&gt;    n4_length = 0&lt;br /&gt;    i_length = 0&lt;br /&gt;&lt;br /&gt;    number = self&lt;br /&gt;&lt;br /&gt;        if number &gt;= 1000&lt;br /&gt;            m_length  = number/1000&lt;br /&gt;            number = number%1000&lt;br /&gt;        end&lt;br /&gt;  &lt;br /&gt;        if number &gt;= 900&lt;br /&gt;            n900_length  = number/900&lt;br /&gt;            number = number%900&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 500&lt;br /&gt;            d_length  = number/500&lt;br /&gt;            number = number%500&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 400&lt;br /&gt;            n400_length  = number/400&lt;br /&gt;            number = number%400&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 100&lt;br /&gt;            c_length  = number/100&lt;br /&gt;            number = number%100&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 90&lt;br /&gt;            n90_length  = number/90&lt;br /&gt;            number = number%90&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 50&lt;br /&gt;            l_length  = number/50&lt;br /&gt;            number = number%50&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 40&lt;br /&gt;            n40_length  = number/40&lt;br /&gt;            number = number%40&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 10&lt;br /&gt;            x_length  = number/10&lt;br /&gt;            number = number%10&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 9&lt;br /&gt;            n9_length  = number/9&lt;br /&gt;            number = number%9&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 5&lt;br /&gt;            v_length  = number/5&lt;br /&gt;            number = number%5&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &gt;= 4&lt;br /&gt;            n4_length  = number/4&lt;br /&gt;            number = number%4&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        if number &lt; 4&lt;br /&gt;            i_length  = number/1&lt;br /&gt;            number = number%10&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;    puts 'M'*m_length + "CM"*n900_length + 'D'*d_length + 'CD'*n400_length + 'C'*c_length +&lt;br /&gt;    'XC'*n90_length + 'L'*l_length + 'XL'*n40_length + 'X'*x_length + 'IX'*n9_length +&lt;br /&gt;    'V'*v_length + 'IV'*n4_length + 'I'*i_length&lt;br /&gt;&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;x = ''&lt;br /&gt;while x != 'exit'&lt;br /&gt;puts 'Enter a number, and the equivalent roman numeral will be returned.'&lt;br /&gt;puts 'Type exit to quit.'&lt;br /&gt;x = gets.chomp&lt;br /&gt;num = x.to_i&lt;br /&gt;num.roman&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-1667769988969410817?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/1667769988969410817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/1667769988969410817'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-117-131-few-things-to-try.html' title='PAGE 117 13.1 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-6688226191265182152</id><published>2008-01-17T16:00:00.000-08:00</published><updated>2008-01-29T16:45:14.255-08:00</updated><title type='text'>PAGE 126 13.4 A Few More Things to Try</title><content type='html'>1. Make an OrangeTree Class.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;class OrangeTree&lt;br /&gt;&lt;br /&gt;    def initialize&lt;br /&gt;        @age = 0&lt;br /&gt;        @tall = 0&lt;br /&gt;        @fruit = 0&lt;br /&gt;        puts 'A new Orange Tree is planted.'&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    def height&lt;br /&gt;        puts 'The tree is ' + @tall.to_s + ' feet tall.'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def count_the_oranges&lt;br /&gt;        puts 'The tree has ' + @fruit.to_s + ' oranges.'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def pick_an_orange&lt;br /&gt;        if @fruit &lt; 1&lt;br /&gt;            puts 'Sorry, there are no oranges to pick this year.'&lt;br /&gt;        else&lt;br /&gt;        puts 'You pick an orange from the tree.  It\'s very delicious.'&lt;br /&gt;        @fruit = @fruit - 1&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def one_year_passes&lt;br /&gt;        puts 'One year passes'&lt;br /&gt;        @age = @age + 1&lt;br /&gt;        @tall = @tall + 1&lt;br /&gt;        @fruit = 0&lt;br /&gt;   &lt;br /&gt;            if dead?&lt;br /&gt;                puts 'The Orange Tree dies'&lt;br /&gt;                exit&lt;br /&gt;            end       &lt;br /&gt;   &lt;br /&gt;            if @age &gt; 2&lt;br /&gt;                @fruit = @age*10&lt;br /&gt;            else&lt;br /&gt;                @fruit = 0&lt;br /&gt;            end&lt;br /&gt;   &lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;private&lt;br /&gt;   &lt;br /&gt;    def dead?&lt;br /&gt;        @age &gt; 5&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts ''&lt;br /&gt;tree = OrangeTree.new&lt;br /&gt;tree.height&lt;br /&gt;tree.count_the_oranges&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;puts ''&lt;br /&gt;tree.one_year_passes&lt;br /&gt;tree.height&lt;br /&gt;tree.count_the_oranges&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;puts ''&lt;br /&gt;tree.one_year_passes&lt;br /&gt;tree.one_year_passes&lt;br /&gt;tree.height&lt;br /&gt;tree.count_the_oranges&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.count_the_oranges&lt;br /&gt;puts ''&lt;br /&gt;tree.one_year_passes&lt;br /&gt;tree.height&lt;br /&gt;tree.count_the_oranges&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.count_the_oranges&lt;br /&gt;tree.pick_an_orange&lt;br /&gt;tree.count_the_oranges&lt;br /&gt;puts ''&lt;br /&gt;tree.one_year_passes   &lt;br /&gt;tree.height&lt;br /&gt;tree.count_the_oranges   &lt;br /&gt;puts ''&lt;br /&gt;tree.one_year_passes   &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;2. Interact with your baby dragon.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;class Dragon&lt;br /&gt;&lt;br /&gt;    def initialize name&lt;br /&gt;        @name = name&lt;br /&gt;        @asleep = false&lt;br /&gt;        @stuff_in_belly = 10    # he's full&lt;br /&gt;        @stuff_in_intestine    = 0    # doesn't need to go&lt;br /&gt;       &lt;br /&gt;        puts @name + ' is born.'&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # Feed&lt;br /&gt;    def feed&lt;br /&gt;        puts 'You feed ' + @name + '.'&lt;br /&gt;        @stuff_in_belly = 10&lt;br /&gt;        passage_of_time&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # Walk&lt;br /&gt;    def walk&lt;br /&gt;        puts 'You walk ' + @name + '.'&lt;br /&gt;        @stuff_in_intestine = 0&lt;br /&gt;        passage_of_time&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # Put to bed   &lt;br /&gt;    def put_to_bed&lt;br /&gt;        puts 'You put ' + @name + ' to bed.'&lt;br /&gt;        @asleep = true&lt;br /&gt;        3. times do&lt;br /&gt;            if @asleep&lt;br /&gt;                passage_of_time&lt;br /&gt;            end&lt;br /&gt;            if @asleep&lt;br /&gt;                puts @name + ' snores, filling the room with smoke.'&lt;br /&gt;            end&lt;br /&gt;        end&lt;br /&gt;        if @asleep&lt;br /&gt;            @asleep = false&lt;br /&gt;            puts @name + ' wakes up slowly.'&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # Toss&lt;br /&gt;    def toss&lt;br /&gt;        puts 'You toss ' + @name + ' up into the air.'&lt;br /&gt;        puts 'He giggles, which singes your eyebrows.'&lt;br /&gt;        passage_of_time&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # Rock&lt;br /&gt;    def rock&lt;br /&gt;        puts 'You rock ' + @name + ' gently.'&lt;br /&gt;        @asleep = true&lt;br /&gt;        puts 'He briefly dozes off...'&lt;br /&gt;        passage_of_time&lt;br /&gt;        if @asleep&lt;br /&gt;            @asleep = false&lt;br /&gt;            puts '...but wakes when you stop'&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    private&lt;br /&gt;   &lt;br /&gt;    # following methods are internal&lt;br /&gt;   &lt;br /&gt;    # hungry?&lt;br /&gt;    def hungry?&lt;br /&gt;        @stuff_in_belly &lt;= 2&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # poopy?&lt;br /&gt;    def poopy?&lt;br /&gt;        @stuff_in_intestine &gt;= 8&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    # passage of time, this is when things happen&lt;br /&gt;    def passage_of_time&lt;br /&gt;        if @stuff_in_belly &gt; 0&lt;br /&gt;            # move food from belly to intestine&lt;br /&gt;            @stuff_in_belly = @stuff_in_belly - 1&lt;br /&gt;            @stuff_in_intestine = @stuff_in_intestine + 1&lt;br /&gt;        else&lt;br /&gt;            if @asleep&lt;br /&gt;                @asleep = false&lt;br /&gt;                puts 'He wakes up suddenly!'&lt;br /&gt;            end&lt;br /&gt;            puts @name + ' is starving! In desperation, he ate YOU!'&lt;br /&gt;            exit&lt;br /&gt;        end&lt;br /&gt;       &lt;br /&gt;        if @stuff_in_intestine &gt;= 10&lt;br /&gt;            @stuff_in_intestine = 0&lt;br /&gt;            puts 'Whoops! ' + @name + ' had an accident...'&lt;br /&gt;        end&lt;br /&gt;       &lt;br /&gt;        if hungry?&lt;br /&gt;            if @asleep&lt;br /&gt;                @asleep = false&lt;br /&gt;                puts 'He wakes up suddenly!'&lt;br /&gt;            end&lt;br /&gt;            puts @name + '\'s stomach grumbles...'&lt;br /&gt;        end&lt;br /&gt;       &lt;br /&gt;        if poopy?&lt;br /&gt;            if @asleep&lt;br /&gt;                @asleep = false&lt;br /&gt;                puts 'He wakes up suddenly!'&lt;br /&gt;            end&lt;br /&gt;            puts @name + ' does the potty dance...'&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;pet = Dragon.new 'Norbert'&lt;br /&gt;&lt;br /&gt;command = ''&lt;br /&gt;&lt;br /&gt;while command != 'exit'&lt;br /&gt;    puts 'Enter a command to control your dragon:'&lt;br /&gt;    command = gets.chomp&lt;br /&gt;    if command == 'feed'&lt;br /&gt;        pet.feed&lt;br /&gt;    elsif command == 'walk'&lt;br /&gt;        pet.walk&lt;br /&gt;    elsif command == 'put_to_bed'&lt;br /&gt;        pet.put_to_bed&lt;br /&gt;    elsif command == 'toss'   &lt;br /&gt;        pet.toss&lt;br /&gt;    elsif command == 'rock'   &lt;br /&gt;        pet.rock&lt;br /&gt;    elsif command == 'exit'&lt;br /&gt;        exit&lt;br /&gt;    else   &lt;br /&gt;        puts 'Can\'t recognize your command, please re-enter.'&lt;br /&gt;    end   &lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-6688226191265182152?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/6688226191265182152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/6688226191265182152'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-126-134-few-more-things-to-try.html' title='PAGE 126 13.4 A Few More Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-9206480630077859402.post-3551711519251868605</id><published>2008-01-17T15:00:00.000-08:00</published><updated>2008-01-29T16:59:04.317-08:00</updated><title type='text'>PAGE 136 14.4 A Few Things to Try</title><content type='html'>1. Even better profiling.&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;#Set @profile_toggle 'on' to turn profiling on&lt;br /&gt;&lt;br /&gt;@profile_toggle = 'off'&lt;br /&gt;&lt;br /&gt;def profile block_description, &amp;block&lt;br /&gt;    if @profile_toggle == 'on'&lt;br /&gt;        start_time = Time.now&lt;br /&gt;        block.call&lt;br /&gt;        duration = Time.now - start_time&lt;br /&gt;        puts block_description+' : '+duration.to_s+' seconds'&lt;br /&gt;    else&lt;br /&gt;        block.call&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# 25000 doublings block&lt;br /&gt;profile '25000 doublings' do&lt;br /&gt;    number = 1&lt;br /&gt;   &lt;br /&gt;    25000.times do&lt;br /&gt;        number = number + number&lt;br /&gt;    end&lt;br /&gt;   &lt;br /&gt;    puts number.to_s.length.to_s+' digits'&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# count to a million&lt;br /&gt;profile 'count to a million' do&lt;br /&gt;    number = 0&lt;br /&gt;    1000000.times do&lt;br /&gt;        number = number + 1&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;2. Grandfather Clock&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def clock some_proc&lt;br /&gt;&lt;br /&gt;    #convert hours to 12 hour format&lt;br /&gt;    current_hour = Time.new.hour&lt;br /&gt;    if current_hour == 0&lt;br /&gt;        current_hour = current_hour + 12&lt;br /&gt;    elsif current_hour &gt; 12&lt;br /&gt;        current_hour = current_hour - 12&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    #call the proc the number of hours passed&lt;br /&gt;    current_hour.to_i.times do&lt;br /&gt;        some_proc.call&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;end       &lt;br /&gt;&lt;br /&gt;# Dong proc&lt;br /&gt;dong_proc = Proc.new do&lt;br /&gt;    puts 'DONG!'&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;clock dong_proc&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;3. Program logger.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;def log block_description, &amp;block&lt;br /&gt;    puts 'Beginning "'+block_description+'" . . .'   &lt;br /&gt;            value_returned = block.call&lt;br /&gt;    puts '. . . "'+block_description+'" finished, returning:'&lt;br /&gt;            puts value_returned&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;log 'outer block' do&lt;br /&gt;&lt;br /&gt;    log 'some little block' do&lt;br /&gt;        5&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    log 'yet another block' do&lt;br /&gt;        'I like Thai food!'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    false&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;4.Better logger.&lt;br /&gt;&lt;br /&gt;&lt;p style = "font-family: courier new, monospace; background-color: #c6d2e8"&gt;$nesting_depth = 0&lt;br /&gt;$space = '   '&lt;br /&gt;&lt;br /&gt;def log block_description, &amp;block&lt;br /&gt;    puts $space*$nesting_depth + 'Beginning "'+block_description+'" ...'&lt;br /&gt;        $nesting_depth = $nesting_depth + 1&lt;br /&gt;            value_returned = block.call&lt;br /&gt;        $nesting_depth = $nesting_depth - 1   &lt;br /&gt;    puts $space*$nesting_depth + '... "'+block_description+'" finished, returning:'&lt;br /&gt;            puts $space*$nesting_depth + value_returned.to_s&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;log 'outer block' do&lt;br /&gt;&lt;br /&gt;    log 'some little block' do&lt;br /&gt;   &lt;br /&gt;        log 'teeny-tiny block' do&lt;br /&gt;            'lots of love'&lt;br /&gt;        end&lt;br /&gt;       &lt;br /&gt;        42&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    log 'yet another block' do&lt;br /&gt;        'I love Indian food!'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;     true&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9206480630077859402-3551711519251868605?l=learntoprogramanswers.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/3551711519251868605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9206480630077859402/posts/default/3551711519251868605'/><link rel='alternate' type='text/html' href='http://learntoprogramanswers.blogspot.com/2008/01/page-136-144-few-things-to-try.html' title='PAGE 136 14.4 A Few Things to Try'/><author><name>cp</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
