Just do IT

思うは招く

Ruby基礎問題100本ノック#1 特定の文字をカウントする

何をするか

今日から、Rubyの基礎問題を解いていくことにした。

目的:プログラミング脳を鍛えるため

目的はこちら。

  • プログラミング脳を鍛える
    • 自分でロジックを組む力
  • 詰まったときの思考的な対処法を身につける
  • メンタル的なバランスをとる

きっかけは、「Rubyの基礎力がなさすぎる・・・」と感じたこと。 というか、Ruby以前にプログラミング脳ができてないじゃんと。

また、コードをコピペすると後で詰まったとき、コードを理解していないので打つ手がない状況に陥ったことがあった。 「どうしたらいいんだ!何もわからない!うぎゃー!」な状況になる。そもそもコピペやめたい。

今後また詰まったときのため、課題を抽象化、または具体化するなどして、自問自答しながら状況を打開していくといった思考法も身につけたい。

あと、最近学習している問題が自分にとっては難しすぎる一面があり、メンタル的なバランスも取りたいと思っていた。

これをするにあたって、こちらの記事を参考にさせていただいた。

コピペするプログラマに足りないもの 〜 プログラミング脳の鍛え方 | Social Change!

なお「100本ノック」と名付けているが、100回やるかはわからない。

ルール

今日から始めるのでこれからルール変更などあるかもしれないが、とりあえずはこんな感じで進める。

  • 今の自分にとって、ほんの少しだけハードルが高い、もしくは調べる必要のある題材を選ぶ
  • 必ずロジックを先に整理してからコードを書く
  • 学んだことを自分の言葉で説明する
  • ミスしたことを必ず書く
  • 完璧は求めない

たとえば、「〜のメソッドを使っていろいろ試してみる」といった簡単な問題から、「calコマンドを作る」のようなすこし難しいものまで幅広くやっていく。

効率の良い学習をするために

「Learn Better」という書籍で、効率の良い学習は次の方法だと紹介されていた。

  • 概念を自分の言葉で解説する
  • 学んだことを定期的に何回も思い出す
  • ミスを書き出す
  • 誰かに教える

まさにブログが最適だと思い、ここをアウトプット場所として利用していく。

お題1:特定の文字数をカウントする

問題:文字列no pain no gainからnだけをカウントせよ。

回答

strings = 'no pain no gain'
ary = strings.chars.reject { |i| i == ' ' }
count = 0
ary.each do |i| 
  if i == 'n'
    count += 1
  end
end
p count

結果

=> 4

説明

文字列を変数stringsに代入し、charsメソッドで一文字ずつ区切って配列に入れる。rejectメソッドで空文字列を削除している。 そして数える用として変数countを用意し、0を代入する。

aryにeachメソッドを使い「もし配列の要素がnだったら、countにプラス1をする」というコードを書いた。

反省

ary = strings.chars.reject { |i| i == ' ' }

これはもっと良い書き方がありそう。

というか問題が簡単すぎた気がする…。簡単と思えるまで成長できたということか。 初回だし、「基礎力向上」という大義名分があるのでまぁ良しとする。