はじめに
プログラミングを始めた頃、paizaのスキルチェックを始めた時に標準入力で困ったので、同じような人のために、paizaの標準入力の受け取り方を書いていきます。
値が一つだけの場合の標準入力の受け取り方
一番シンプルなパターンですね。
例えば下図のような標準入力があったとします。
標準入力 |
---|
5 |
getsメソッドで受け取れます。 |
input = gets
paizaの標準入力は文字列で与えられます、今回は数字ですのでこのままだと計算したり大小比較ができないので、文字列から数値に変換しましょう。to_iメソッドを使うと可能です。
input = gets.to_i
getsは複数回使うと次の標準入力を受け取ってしまうので、受け取った値を何回も使いたいときは変数に代入しておきましょう。今回はinputという名前の変数にしていますが、a = gets
, number = gets
とかでも大丈夫です。
複数の値が一行にある場合の標準入力の受け取り方
1行に複数の値があった場合です。
paizaだと複数の値に半角スペースを挟んだ文字列が渡されます。
標準入力 |
---|
5 10 20 |
後ろに.chomp!.split(" ")
をつけます
.chomp!
が改行を消すメソッドです、これをつけないと末尾に改行の記号がくっついてしまいます。
.split(" ")
が文字列を分解して配列に変換するメソッドです。引数に" "
を渡すことで半角スペースを区切りにして配列になります。
input = gets.chomp!.split(" ")
出力してみると
p input
=> ["5", "10", "20"]
文字列でなく数値として受け取りたい場合はさらにmapメソッドを使いましょう。配列の値を一個ずつ取り出して数値に変換していきます。
input = gets.chomp!.split(" ").map{|n| n.to_i}
出力してみると
p input
=> [5, 10, 20]
複数行にわたる値の標準入力を受け取り方
複数行に値があった場合です。
paizaの場合、大抵一つ目の標準入力にこの後の標準入力の行数を与えてくれるので、それを利用します。
今回で言うと3ですね。
標準入力 |
---|
3 |
5 |
10 |
20 |
まず最初の標準入力を受け取りましょう。
N = gets.to_i
続いてこの値を用いて複数行の標準入力を受け取っていきます。
今回は5, 10, 20をそれぞれ配列に入れていく形で受け取っていきましょう。
timesメソッドを使います。
numbers = []
N.times do
numbers << gets.to_i
end
numbersと言う空の配列を用意して、N回標準入力を受け取ってnumbersに入れていくと言う流れです。
出力すると
p numbers
=> [5, 10, 20]
これで標準入力が受け取れるので、受け取った値を使って問題を解いていけますね!