フィヨルドブートキャンプに入り、3ヶ月が経ちました。
目次
今月やったこと(2月)
チェリー本を読んだ
今月は伊藤さんの著書「プロを目指す人のためのRuby入門」(通称:チェリー本)を読みました。
この本はフィヨルドブートキャンプに入る前にも1度読んでいました。その時はほぼコードを書いたことがない状態で読んだので難しかった...
でも、今回はカレンダープログラムを書いた後に読んだので、実際のコードのイメージができて理解度が上がった気がします。
ボウリング課題が難しかった
(コードは1行も載せていませんが、ボウリングプログラムの考え方など書いているので、これから作る、ヒントさえ見たくない方は飛ばしてください。)
ずっとボウリングのこと考えてる
— Emiko Ando (@siroemk) 2021年2月15日
月の後半はボウリングスコアを計算するプログラムを作っていました。
% ./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,6,4,5 139
このようにボウリングスコアを引数に渡すと、スコアを計算してくれるプログラムです。
私はボウリングをあまりやらないので、スコア計算のルールが分からなかったのですが、ボウリングは単純にスコアを足していくのではなく、
- 1フレーム2投球の10フレームでスコア算出
- 1投球目にストライクが出たら2投球目は投げない
- 1投球目と2投球目合わせて10本倒したらスペア
- 10フレーム目は1投球目と2投球目で10本倒したら3投球目を投げることができる
- スペアの時はボーナスポイントとして、次の1投の点を足す
- ストライクの時はボーナスポイントとして、次の2投の点を足す
- 10フレーム目は単純に足すだけ
というルールがあるそうです。詳しくはこちらのサイトに分かりやすく書いてあります。
% ./bowling.rb 6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,6,4,5 139
まず、スコアを計算するために、フレームに分けた方が分かりやすそうだったので、引数でわたされた6,3,9,0,0,3,8,2,7,3,X,9,1,8,0,X,6,4,5
この数字を配列に分けていきました。
[[6, 3], [9, 0], [0, 3], [8, 2], [7, 3], [10], [9, 1], [8, 0], [10], [6, 4, 5]]
このフレーム分けに苦労します。 初めは頭から2つずつ取って、配列にしていけば良いのではと思ったのですが、
- ストライクの場合、配列には1つの要素だけ入る
例: [10]
- 10フレーム目は3つの要素が入ることもある
例: [6, 4, 5]
ということを考慮しなくてはいけません。
私の場合、each
メソッドで要素を1つずつ取っていき、ストライクの場合は配列に[10]
を入れて、残りは2つずつ配列に入れていきました。
そうすると、10フレーム目で3回投げた時や、10フレーム目にストライクがきた時に11フレームや12フレームができてしまいます。この溢れたフレームを10フレーム目に追加するしようとしたのですが、上手くいかず...
考えても分からなかったので、質問して、なんとか思ったように動くようになりました。
ボウリングプログラムの10フレーム目が作れなくて悶々としてたけど質問タイムでみんなの知見により解決した🥺🎉さいこう〜〜〜 #fjordbootcamp
— Emiko Ando (@siroemk) 2021年2月16日
その時に使ったメソッドについてはこちらにメモしています。
完成した後に他の方のコードを読んでいて気づいたのですが、わざわざ11フレーム目を10フレーム目にぶち込むという分かりにくいやり方をしなくても、もっとシンプルに書けましたね。
でも、配列周りを色々試す良い機会になったので、これはこれで良かったです。ポジティブ。
プラクティスの進め方について考えてみた
フィヨルドブートキャンプではプラクティスという課題が用意されています。
プラクティスをこなすことで卒業できるのですが、「早く先に進みたい!」という気持ちから毎日プラクティスを進めることやインプットに一生懸命になっていました。
もちろんそれも良いのですが、学習したことをしっかりと身につけるためにもアウトプットを増やしたいと思うようになりました。
そこで学習時間の3分の1はプラクティス以外のことをやってみることに決めました。
- 気になった分野の技術書を読む
- ブートキャンプ内のQ&Aなどで他の人の質問に積極的に回答する(回答することで自分の知識を深める)
- 誰かに学んだことを説明する
- ○○.rbに参加する
- アウトプットする(気軽に書きたい時→scrapbox、じっくり考えて書く時→hatena)
日々の学習メモ的なやつはscrapboxに書いています。
以前はプラクティスの進み具合を他の人と比べて焦っていたこともあったのですが、「3分の1はプラクティス以外のことやるぞ!」と決めたことで、「私には私のペースでいくんだ」と気持ちが楽になりました。
続けることが大事だと思うので、ゆるく自分のペースでやっていきたいです。
3月はRubyでlsコマンドを作っていきます。