概要
PracticeA - Welcome to AtCoderの解説はあるけども、メソッドの使い方とか丁寧にまとめておきたいと思いこの記事を書いてます。
Ruby初学者、AtCoder初心者、記事作成初心者、なのでミスが多々あるかもしれません。
問題
今回初めてAtCoderに取り組む人が最初にするであろう問題、PracticeA - Welcome to AtCoderの解説をしていきます。
問題内容については該当ページからご確認ください。
この問題でしたいことは、
1. 入力値を受け取る
2. 必要な型に変換して、変数に格納する
3. 求める形に整えて、出力する
この順番で問題を解いていきます
丁寧に解説
公式の回答があるので、それをベースに何をしているのかを補足として説明していきます。
まずは、公式の回答
# 整数の入力
a = gets.to_i
# スペース区切りの整数の入力
b,c=gets.chomp.split(" ").map(&:to_i);
# 文字列の入力
s = gets.chomp
# 出力
print("#{a+b+c} #{s}\n")
一行目から早速丁寧に解説をしていきます
a = gets.to_i
getsメソッドでは入力値を一行だけ読み込んで、文字列を返り値として取得します。
to_iメソッドでは文字列を整数型に変更します。
以上をまとめると
aに格納される値は、ユーザーが入力した値を取得して、整数型に変換したものです。
gets メソッドで標準入力から取得した値は、デフォルトで改行文字(\n)が含まれています。しかし、to_i メソッドは、文字列の末尾にある改行文字を無視して整数に変換します。
二行目
# スペース区切りの整数の入力
b,c=gets.chomp.split(" ").map(&:to_i);
chomp メソッドを使うと、改行文字が削除されます。
"hello\n".chomp
# => "hello"
splitメソッドでは引数で指定した値で分割して、それぞれを配列の要素として格納します。
mapメソッドは、元の配列に対して要素の分だけ処理を繰り返し、新しく配列を作成します。今回は各要素を取り出して整数型にしたものを新しい配列に格納しています。
ここまでの処理をまとめる
# 入力値は "2 3" とする
test = gets.chomp.split(" ").map(&:to_i);
p test
#=> [2, 3]
左辺がb, cのように2つ設定していると、それに合わせた要素がそれぞれに格納されます。
今回であれば、bに2, cに3が格納されます。
三行目
# 文字列の入力
s = gets.chomp
getsでユーザーの入力を文字列で受け取り、改行文字を排除する
三行目までで、冒頭で説明した
1. 入力値を受け取る
2. 必要な型に変換して、変数に格納する
が終わっている。
四行目で、
3. 求める形に整えて、出力する
を進めていく
四行目
# 出力
print("#{a+b+c} #{s}\n")
#{}の中に定義した変数を利用して、求める形に整形して出力している
最後に
下記の記事を参考にしてこの記事を作成しました。
https://pikawaka.com/ruby/gets
https://pikawaka.com/ruby/map