はじめに
Paizaのプログラミング問題で標準入力を使い、値を持ってくる方法がいくつかあったのでメモ
前提
使用する言語はRubyです
一行に一要素だけしか存在しない場合
標準入力
Tokyo
line = gets
p line
出力結果
"Tokyo"
一行に複数要素存在する場合
標準入力
Tokyo Osaka Kyoto
line = gets.split(' ')
p line
出力結果
["Tokyo", "Osaka", "Kyoto"]
splitを使用することで3つの要素をそれぞれ別のものとして配列に格納しています
※splitの使い方
splitはsplit('')のシングルクォート内の文字で文字列を分解する
例えば、Tokyoという文字をそれぞれ一文字ずつ取得したければ、シングルクォートの中に何も入れずにすると下記のように取得できる
標準入力
Tokyo
line = gets.split('')
p line
出力結果
["T", "o", "k", "y", "o"]
複数行に一つずつ要素が存在する場合
標準入力
Tokyo
Osaka
Kyoto
line = readlines
len = line.length
i = 0
while i < len
line[i] = line[i].chomp
i += 1
end
p line
出力結果
["Tokyo", "Osaka", "Kyoto"]
上記のものの簡潔な書き方として、mapを使用したものがあります
標準入力
Tokyo
Osaka
Kyoto
line = readlines.map(&:chomp)
p line
出力結果
["Tokyo", "Osaka", "Kyoto"]
複数行に複数要素が存在する場合
標準入力
Tokyo Osaka Kyoto
Japan USA China
line = readlines
len = line.length
i = 0
while i < len
line[i] = line[i].chomp.split(' ')
i += 1
end
p line
出力結果
[["Tokyo", "Osaka", "Kyoto"], ["Japan", "USA", "China"]]
上記のものの簡潔な書き方として以下のものもあります
標準入力
Tokyo Osaka Kyoto
Japan USA China
lines = []
while line = gets
lines << line.chomp.split(' ')
end
p lines
出力結果
[["Tokyo", "Osaka", "Kyoto"], ["Japan", "USA", "China"]]
while line = getsとすることで、標準入力の値を全て取得するまで繰り返されます
より簡単な方法をコメントでいただいたので追記
標準入力
Tokyo Osaka Kyoto
Japan USA China
lines = readlines(chomp: true).map{|line| line.split(' ')}
p lines
出力結果
[["Tokyo", "Osaka", "Kyoto"], ["Japan", "USA", "China"]]
出力結果を見ると、受け取った値は文字列なので数値を受け取りたい場合は次のようにします
数値として受け取りたい場合
一行に一要素だけしか存在しない
標準入力
123
line = gets.to_i
p line
出力結果
123
一行に複数要素存在する場合
標準入力
1 2 3
line = gets.split(' ')
p line
出力結果
["1", "2", "3"]
このままだと文字列として扱われるので、mapを使用して数値型の配列に変換します
標準入力
1 2 3
line = gets.split(' ').map(&:to_i)
p line
出力結果
[1, 2, 3]
複数行に一つずつ要素が存在する場合
標準入力
1
2
3
line = readlines.map(&:to_i)
p line
出力結果
[1, 2, 3]
複数行に複数要素が存在する場合
標準入力
1 2 3
4 5 6
lines = []
while line = gets
lines << line.chomp.split(' ').map(&:to_i)
end
p lines
出力結果
[[1, 2, 3], [4, 5, 6]]
より簡潔に書く方法
標準入力
1 2 3
4 5 6
lines = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}
p lines
出力結果
[[1, 2, 3], [4, 5, 6]]