今回はpaiza 標準入力メニューセクション7(文字列の入力)を解説します。
セクション7は、1行目で要素数nが与えられ、続くn行の文字列を受け取る問題と、1行目または1要素目で要素数nが与えられ、半角スペース区切りの文字列を受け取る問題です。
本記事で使用しているメソッドについて
解答例で使っているメソッドについて、下記の記事で詳しく解説していますので参考にしてみて下さい。
- [Ruby] 標準入力によるデータ取得1
- [Ruby] 標準入力によるデータ取得2
- [Ruby] 標準入力によるデータ取得3
- [Ruby] 標準出力(データを任意に整形して出力する)
- [Ruby]配列の基本操作1
- [Ruby]繰り返し処理
セクション7:【N個の文字列の入力】1 行目で与えられる N 個の文字列の入力 (large)
7-STEP1: 改行区切りでの N 個の文字列の入力 (paizaランク D 相当)
1行目でデータ数nが与えられ、続くn行の入力データを受け取り、データの先頭から順に出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 hello paiza 813 paiza2020 Nice EOS OUTPUT1 = <<~"EOS" hello paiza 813 paiza2020 Nice EOS
Ruby解答例
まず、1行目の入力を受け取り、整数に変換し変数nに格納します。
次に、n.times
でn回のループを設定し、.map{ gets.chomp }
で入力データの末尾の改行を削除した文字列を、配列aryに格納します。
# 解答例 # 1 行目入力 n = gets.to_i # 続く n 行入力 ary = n.times.map { gets.chomp } # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目入力 n = int(input()) # 続く n 行入力 ary = [input() for _ in range(n)] # 出力 [print(s) for s in ary]
7-STEP2: 2 行目で与えられる N 個の文字列の入力 (paizaランク D 相当)
1行目で要素数nが与えられ、2行目のn個の文字列を半角スペースで分割して受け取り、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 paiza 813 paiza813 hello813 good EOS OUTPUT1 = <<~"EOS" paiza 813 paiza813 hello813 good EOS
Ruby解答例1
1行目で要素数nが与えられますが、2行目の文字列を半角スペースで分割すると自動的にn個になるため、そのまま配列aryへ格納しています。
# 解答例 # 1 行目入力 n = gets.to_i # 2 行目入力 ary = gets.split # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目入力 n = int(input()) # 2 行目入力 ary = input().split() # 出力 [print(s) for s in ary]
7-STEP3: 1 行目で与えられる N 個の文字列の入力 (paizaランク D 相当)
1行の半角スペース区切りでデータが与えられ、1個目の要素を要素数n、2個目以降を文字列のデータとして受け取り、先頭から順に出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 paiza 813 paiza813 Hello World! EOS OUTPUT1 = <<~"EOS" paiza 813 paiza813 Hello World! EOS
Ruby解答例1
半角スペースで分割した文字列の1個目の要素を _、2個目以降の要素を ary へ格納しています。
※ この問題で1個目の要素は使わないので _ に代入して捨てています。
# 解答例 # 入力 _, *ary = gets.split # 出力 puts(ary)
Ruby解答例2
1個目の要素は使いませんが、整数型で受け取る場合、次のようになります。
# 解答例2 # 入力 ary = gets.split n = ary.shift.to_i # 出力 puts(ary)
Python解答例
# 解答例 # 入力 _, *ary = input().split() # 出力 [print(s) for s in ary]
7-STEP4: 2 行目で与えられる N 個の文字列の入力 (large) (paizaランク D 相当)
1行目で要素数nが与えられ、2行目のn個の文字列を半角スペースで分割して受け取り、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 813 paiza pa13 Hello World! EOS OUTPUT1 = <<~"EOS" 813 paiza pa13 Hello World! EOS
Ruby解答例1
7-STEP2 と同じコードです。
# 解答例 # 1 行目入力 n = gets.to_i # 2 行目入力 ary = gets.split # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目入力 n = int(input()) # 2 行目入力 ary = input().split() # 出力 [print(s) for s in ary]
7-FINAL: 【N個の文字列の入力】1 行目で与えられる N 個の文字列の入力 (large) (paizaランク D 相当)
1行の半角スペース区切りでデータが与えられ、1個目の要素を要素数n、2個目以降を文字列のデータとして受け取り、先頭から順に出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 813 paiza 8iza Hello Paiza! EOS OUTPUT1 = <<~"EOS" 813 paiza 8iza Hello Paiza! EOS
Ruby解答例1
7-STEP3 解答例1と同じコードです。
# 解答例1 # 入力 _, *ary = gets.split # 出力 puts(ary)
Ruby解答例2
7-STEP3 解答例2と同じコードです。
# 解答例2 # 入力 ary = gets.split n = ary.shift.to_i # 出力 puts(ary)
Python解答例
# 解答例 # 入力 _, *ary = input().split() # 出力 [print(s) for s in ary]
今回のまとめ
- 1行目で入力行数n、続くn行で入力データが与えられる場合
- 1行目の入力行数nを整数型で受け取り、n回のループで続くn行の入力を受け取る
- 半角スペース区切りのデータが与えられ、1個目の要素に要素数nが与えられた場合
n, *ary = gets.split
で1個目の要素と2個目以降の要素を分けて受け取るary = gets.split
で全ての要素と受け取った後、ary.shift
で1個目の要素を取り出す
セクション1~7では基本的な文字列・整数型のデータ受け取りを学習しました。
次のセクション8は小数点数ですが、今回とほぼ同様のコードで受け取ることが出来ます。