gotagota日記

「面白きことは良きことなり」

「プログラミング入門 - Rubyを使って」 Lesson6

プログラミング入門 - Rubyを使って -, by Chris Pine, 日本語ver. by S. Nishiyama

今回はLesson6の「制御構造」をやりました。
耳の遠いおばあちゃんプログラムがなかなかやっかいでした・・・。
うるう年のプログラムも苦戦した記憶しかありませんが、なんとかそれらしく見えるものを書いてみました。

練習問題1

• "99本のビールが壁に..." 遠足などでよく歌われる古典的な童謡の歌詞、"99 Bottles of Beer on the Wall" を 出力するプログラムを書いてみましょう。

「プログラミング入門 - Rubyを使って」 Lesson6

実行結果
99Bottles of beer on the wall
99Bottles of beer
Take one down and pass it around
98Bottles of beer on the wall

98Bottles of beer on the wall
98Bottles of beer
Take one down and pass it around
97Bottles of beer on the wall

...略...

2Bottles of beer on the wall
2Bottles of beer
Take one down and pass it around
1Bottles of beer on the wall

1Bottles of beer on the wall
1Bottles of beer
Take one down and pass it around
0Bottles of beer on the wall
練習問題2

• 耳の遠いおばあちゃんのプログラムを書いてみましょう。 おばあちゃんに何を言っても(何をタイプしても)、叫ばない限り (つまり、全部大文字でタイプしない限り)、 は?! もっと大きな声で話しておくれ、坊や! と返事をします。もし叫んだときは、彼女はあなたの言葉を聞いて (少なくとも聞いた気がして)、 いやー、1938年以来ないねー! と大声で返事をします。 プログラムにちょっと真実味 を持たせるため、 1930年から1950年のランダムな数字で毎回違う年を叫ぶようにしましょう。 (この部分はオプションです。メソッドの 章で、Rubyの乱数発生法の節を読んでいたら簡単でしょう。) あなたはBYEと叫ぶまでおばあちゃんとの会話から逃れられません。
ヒント: chompをお忘れなく! Enter付きの 'BYE'はついていない 'BYE'とは 違うものです。
ヒント2:あなたの書いたプログラムのどの部分が 何度も何度も繰り返し実行されるべきなのかを良く考えてみましょう。 そのすべてを whileループの中に入れます。

「プログラミング入門 - Rubyを使って」 Lesson6

実行結果
hi
は?! もっと大きな声で話しておくれ、坊や!
HI
いやー、1939年以来ないねー!
hi
は?! もっと大きな声で話しておくれ、坊や!
HI
いやー、1946年以来ないねー!
bye
は?! もっと大きな声で話しておくれ、坊や!
BYE
練習問題3

• 上で作った、「耳の遠いおばあちゃんのプログラム」を拡張しましょう。 おばあちゃんはあなたに行って欲しくないのです。 あなたがBYEと叫んでもおばあちゃんは聞こえないふりをします。 BYEを3回連続で 叫ばないといけないように変更してみてください。 BYEと3回叫んでも 連続していない限り、おばあちゃんとの会話は続くようになっているか プログラムをテストして確認してみましょう。

「プログラミング入門 - Rubyを使って」 Lesson6

実行結果
BYE
なんだって?
BYE
え?なんだって???
bye
は?! もっと大きな声で話しておくれ、坊や!
BYE
なんだって?
BYE
え?なんだって???
BYE
練習問題4

• うるう年。 開始の年と終わりの年を聞いて、その間にあるすべてのうるう年を (もし開始や終了の年がうるう年だったらそれも含めて)表示するプログラムを書きましょう。 うるう年は(1984年とか2004年のように)4で割り切れる数の年です。ただし、100で割り切れる年は うるう年ではなくて (たとえば1800年や1900年)、さらに、それは 400で割り切れない限り です。(つまり、1600年や2000年はうるう年です。) (確かに、このルールは紛らわしいです。でも7月が冬の真ん中に来てしまうのはもっと紛らわしいと 思いませんか?このルールがなかったらそうなったかもしれないのです。)

「プログラミング入門 - Rubyを使って」 Lesson6

別解

「プログラミング入門 - Rubyを使って」 Lesson6

実行結果
開始の年は?
1896
終わりの年は?
2014
うるう年一覧
1896
1904
1908
1912
1916
1920
1924
1928
1932
1936
1940
1944
1948
1952
1956
1960
1964
1968
1972
1976
1980
1984
1988
1992
1996
2000
2004
2008
2012