日別アーカイブ: 2022年10月1日

paizaLvアップ問題と解答(標準入力19)Ruby

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題1 3 行 3 列の整数の入力 (paizaランク D 相当)

3 行 3 列の行列が与えられます。上から i 番目、左から j 番目の整数は a_{i,j} です。
3 行 3 列の行列をそのまま出力してください。

入力される値

3 行 3 列の行列が以下の形式で標準入力によって与えられます。

a_{1,1} a_{1,2} a_{1,3}
a_{2,1} a_{2,2} a_{2,3}
a_{3,1} a_{3,2} a_{3,3}

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
3 行 3 列の行列をそのまま出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_{1,1} a_{1,2} a_{1,3}
a_{2,1} a_{2,2} a_{2,3}
a_{3,1} a_{3,2} a_{3,3}
条件
すべてのテストケースにおいて、以下の条件をみたします。

・a_{i,j} は 1 以上 100 以下の整数 (1 ≦ i ≦ 3, 1 ≦ j ≦ 3)
入力例1
8 1 3
1 2 3
3 1 8
出力例1
8 1 3
1 2 3
3 1 8

解答

# ↓一行ずつ半角スペース刻みの入力値を受け取り変数に配列として代入していく
#[[8, 1, 3], [1, 2, 3], [3, 1, 8]]
numbers = readlines.map{ |i| i.split.map(&:to_i)} # 配列の長さ分(3)繰り返し半角スペース刻みで出力する。 numbers.size.times { |i| puts numbers[i].join(' ') }

または

# 一行ずつ半角スペース刻みの入力値を受け取り,出力する。
puts numbers = readlines

または

# 一行ずつ半角スペース刻みの入力値を受け取り、半角スペース刻みで出力する。
numbers = readlines.map{ |i| i.split.map(&:to_i).join(' ') }

または

# 3列と決まっているので3回繰り返す
# 半角スペース刻みの入力値を受け取り半角スペース刻みで出力する
3.times { puts gets.split.map(&:to_i).join(' ') }

問題2 N 行 3 列の整数の入力 (paizaランク D 相当)

1 行目で整数 N が与えられます。
2 行目以降で N 行 3 列の行列が与えられます。上から i 番目、左から j 番目の整数は a_{i,j} です。
N 行 3 列の行列をそのまま出力してください。

入力される値
1 行目に整数 N が与えられます。
2 行目以降に N 行 3 列の行列が与えられます。
以下の形式で標準入力によって与えられます。

N
a_{1,1} a_{1,2} a_{1,3}
...
a_{N,1} a_{N,2} a_{N,3}

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
N 行 3 列の行列をそのまま出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

a_{1,1} a_{1,2} a_{1,3}
...
a_{N,1} a_{N,2} a_{N,3}
条件
すべてのテストケースにおいて、以下の条件をみたします。

・N は 1 以上 100 以下の整数
・a_{i,j} は 1 以上 100 以下の整数 (1 ≦ i ≦ N, 1 ≦ j ≦ 3)
入力例1
2
1 2 3
8 1 3
出力例1
1 2 3
8 1 3

解答

#1行目の入力値(数値)を受け取る
n = gets.to_i
#半角スペース刻みの入力値を受け取り、半角スペース刻みで出力することをn回繰り返す
n.times { puts gets.split.map(&:to_i).join(' ') }

または

#1行目の入力値(数値)を受け取る
n = gets.to_i
#半角スペース刻みの入力値を受け取り、半角スペース刻みで出力する
readlines.map{ |i| puts i.split(' ').map(&:to_i).join(' ')}