INDEX
■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
(2022/5/23時点の方針)
メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。
(2022/10/17時点の方針)
しばらくはB問題を小さい番号の方からやっていく。たまにA問題もやるかも。
■問題
●出典
AtCoder Beginner Contest 073のAB問題
https://atcoder.jp/contests/abc073/tasks/abc073_a
●問題文
今、日本は 9 月 9 日です。 二桁の整数 N が与えられるので、十進法で N に 9 が含まれるか答えてください。
●制約
- 10≦N≦99
●入力
入力は以下の形式で標準入力から与えられる。
N
●出力
9 が含まれるとき Yes
、含まれないとき No
を出力せよ。
■回答
●愚直に書く
2桁の数字の十の位もしくは一の位(あるいはその両方)に9が使われているかどうかの判定、ということか。
a, b = gets.chomp.split("").map(&:to_i)
puts a == 9 || b == 9 ? 'Yes' : 'No'
通った!
●メソッド化して書く
メソッドを作る練習のために、あえてそういう書き方をする。
メインメソッド、9が含まれているかの判定メソッド、標準入力を取得するメソッドの3つを作成。
def main
a, b = read_nums
puts include_9?(a, b)
end
def include_9?(a, b)
a == 9 || b == 9 ? 'Yes' : 'No'
end
def read_nums
gets.chomp.split("").map(&:to_i)
end
main
通った!!
●リファクタリング/別アプローチ
正規表現が使えそうな気がする。
n = gets.chomp
puts n.match('9') ? 'Yes' : 'No'
通った!
●他の方の回答例
あ〜そうか正規表現じゃなくてもinclude?
でできるのか。
あと、9があるかどうかを調べるだけだからchomp
も無くて大丈夫。
n = gets
puts n.include?('9') ? 'Yes' : 'No'
●出てきたメソッド等
公式リファレンスを見る訓練。
-
String#match
https://docs.ruby-lang.org/ja/latest/method/String/i/match.html -
String#include?
https://docs.ruby-lang.org/ja/latest/method/String/i/include=3f.html
■振り返りなど
久しぶりにやったので標準入力の取り方とかがちょっとうろ覚えだったが、割とスムーズに解けて良かった。