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

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

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

詳しくはコチラ

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

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

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

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

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

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

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

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

・M は 1 以上 100 以下の整数
・a_{i,j} は 1 以上 100 以下の整数 (1 ≦ i ≦ 3, 1 ≦ j ≦ M)
入力例1
5
1 2 3 4 5
8 1 3 8 1
813 138 381 183 831
出力例1
1 2 3 4 5
8 1 3 8 1
813 138 381 183 831

解答

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

または

#1行目の入力値(数値)を受け取る
n = gets.to_i
#半角スペース刻みの入力値を受け取り、半角スペース刻みで文字列として出力する
puts readlines.map(&:chomp)

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

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

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

N M
a_{1,1} ... a_{1,M}
...      ...
a_{N,1} ... a_{N,M}

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

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

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

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

解答

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

または

#1行目の半角スペース刻みの入力値を受け取る
n, m = gets.split.map(&:to_i)
#半角スペース刻みの入力値を受け取り、半角スペース刻みで数値として出力する
puts readlines.map(&:chomp)

FINAL問題【N 行 M 列のデータの入力】行ごとに要素数の異なる整数列の入力 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目から (N + 1) 行目までの先頭に整数 M_i (1 ≦ i ≦ N) が与えられます。それに続いて M_i 個の整数 a_1, …, a_{M_i} が与えられます。
上から i 番目、左から j 番目の整数は a_{i,j} です。
N 行の a_1, …, a_M をそのまま出力してください。

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

N
M_1 a_{1,1} ... a_{1,M_1}
...         ...
M_N a_{N,1} ... a_{N,M_N}

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

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

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

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

解答 .shiftを使うと配列の先頭部分を取り除くことができる

# 1行目の半角スペース刻みの入力値を受け取る
n = gets.to_i
# n回繰り返す
n.times do 

# 半角スペース刻みの入力値を受け取る
  numbers = gets.split

# 配列の最初の部分を取り出す(破壊的)
  numbers.shift

# 配列を半角スペース刻みで出力する
  puts numbers.join(' ')
end