INDEX
■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、最も簡単なA問題を解いていく)
■問題
●出典
AtCoder Beginner Contest 011のA問題
https://atcoder.jp/contests/abc011/tasks/abc011_1
●問題文
高橋君は、来月遊びに行く約束をしました。
ですが、高橋君は頭が悪いので、来月が何月であるかが解りません。
今月が何月かが与えられるので、来月が何月であるかを出力するプログラムを作ってあげてください。
●入力
入力は以下の形式で標準入力から与えられる。
N
1 行目には、今月の月を表す整数 N(1≦N≦12) が与えられる。
●出力
来月が何月であるかを、 1 行で出力せよ。
■回答
●愚直に書く
12だけは1で、それ以外は1を足せば良さそう
n = gets.to_i
if n == 12
puts 1
else
puts n + 1
end
通った!
●リファクタリング/別アプローチ
三項演算子にできる。
n = gets.to_i
puts (n == 12 ? 1 : n + 1)
あと思ったけど、if式を作るにあたって、現在はifの方に特殊なケース(12)が来ているので、逆(ifの方に多く起こるケースを出して、elseの方に例外を入れる)の方が意味的にしっくりくるかな?
n = gets.to_i
puts (n != 12 ? n + 1 : 1)
通った!(!=
より==
のがわかりやすいから、どっちもどっちな気もする…)
●他の方の回答例
p gets.to_i%12+1
なるほど、「12で割った余り」は、
- 1〜11の場合:1〜11がそのまま返る
- 12の場合:0が返る
ということになるから、それに1を足せば求める回答になるのか。面白い〜
●出てきたメソッド等
公式リファレンスを見る訓練。
■振り返りなど
余りを使う式、思いつきたかったな〜