「Rubyがミニツク」の演習問題を解く vol4
Stringクラスレッスンの演習
問題
菱形(ひし形)を出力しなさいという問題。
なお、菱形の横幅は、半角文字で30文字。
* * * * * * * * * * * *
この問題はヒント付き
この3つのヒントを上手く使えということでしょう。
さっそく書いていきます。
私の回答・解説
まずは、問題文の理解から。
菱形の横幅は半角30文字とはどこの事を指しているのか。
そもそも30文字(偶数文字)だと菱形が作れない・・・
* * * * ** * * * * * * ** * * 左が奇数5文字、右が偶数文字4文字
上のように、偶数文字だと最初と最後の*が
中央に表示できない。
なので空白を含めて30文字、
つまり菱形の横幅は29文字と勝手に解釈します。
そして一生懸命考えて行き着いた答えがこちら・・・
表示を4段階に分けました。
- ひし形の上部
- ひし形の広がっていく部分
- ひし形の狭まっていく部分
- ひし形の下部
駄目だ・・、絶対模範回答と違う気がする笑
模範回答を恐る恐る見てみる...
1. def diamond(width, padding=' ') 2. return if width.zero? 3. width += 1 if width.odd? 4. 5. puts("*".center(width)) 6. max = width - 2 7. interval = 1 8. interval.step(max, 2) do |i| 9. puts("*#{padding * i}*".center(width)) 10. end 11. max -= 3 12. max.step(interval, -2) do |i| 13. puts("*#{padding * i}*".center(width)) 14. end 15. puts("*".center(width)) 16. end 17. 18. diamond(30)
あれ、以外と似ている。
メソッドにしてなかった事と
ループ処理で使う数字を変数にセットしている事ぐらい。
3. width += 1 if width.odd?
これ意味あるのかな・・・
11行目で-3してるので+1しとかないとズレるって事かな。
あとでじっくり確認しときます。
次回から演習コースになります。
そろそろついていけない!