今回はpaiza 標準入力メニューセクション6【n * n の 2 次元配列の表示】を解説します。
セクション6は、任意の二次元配列を生成し、出力する問題です。
本記事で使用しているメソッドについて
解答例で使っているメソッドについて、下記の記事で詳しく解説していますので参考にしてみて下さい。
- [Ruby] 標準入力によるデータ取得1
- [Ruby] 標準入力によるデータ取得2
- [Ruby] 標準入力によるデータ取得3
- [Ruby] 標準出力(データを任意に整形して出力する)
- [Ruby]配列の基本操作1
- [Ruby]繰り返し処理
セクション6:【n * n の 2 次元配列の表示】
6-STEP1: 2 * 2 の出力 (paizaランク D 相当)
4個の整数 0, 8, 1, 3 をこの順番で 2 行 2 列で出力する問題です。
Ruby解答例1
4個の整数が2 * 2 の二次元配列ary=[[0, 8], [1, 3]]だった場合
ary.each do |row|
で各行を先頭から順に参照し、joinメソッドで各行の要素を半角スペースで連結して表示しています。
# 解答例1 ary = [[0, 8], [1, 3]] # 出力 ary.each do |row| # 1 行毎に半角スペース区切りで出力する puts(row.join(" ")) end
Ruby解答例2
解答例1を1行にまとめた書き方です。
行の各要素を半角スペースで連結し、putsメソッドで出力しています。
# 解答例2 ary = [[0, 8], [1, 3]] # 出力 puts(ary.map { |row| row.join(" ") })
Ruby解答例3
4個の整数が一次元配列ary=[0, 8, 1, 3]だった場合
空の配列rowを用意し、配列aryを先頭から順に参照します。
整数の要素nを配列rowに追加し、配列rowの要素数が w=2 になったら、半角スペースで連結して出力し、配列rowを空にします。
# 解答例3 w = 2 ary = [0, 8, 1, 3] # 出力 row = [] # ary の先頭から順に参照する ary.each do |n| # n を row に追加する row.push(n) # 要素数 w=2 個毎に半角スペース区切りで出力する if row.length == w puts(row.join(" ")) row = [] end end
Python解答例1
4個の整数が2 * 2 の二次元配列ary=[[0, 8], [1, 3]]だった場合
for row in ary
で各行を先頭から順に参照し、配列rowをアンパックして出力しています。
# 解答例1 ary = [[0, 8], [1, 3]] # 出力 for row in ary: # 1 行毎に半角スペース区切りで出力する print(*row)
Python解答例2
解答例1を1行にまとめた書き方です。
リスト内包表記で各行を参照し、アンパックして出力しています。
# 解答例2 ary = [[0, 8], [1, 3]] # 出力 [print(*row) for row in ary]
Python解答例3
4個の整数が一次元配列ary=[0, 8, 1, 3]だった場合
空の配列rowを用意し、配列aryを先頭から順に参照します。
整数の要素nを配列rowに追加し、配列rowの要素数が w=2 になったら、アンパックで出力し、配列rowを空にします。
# 解答例3 w = 2 ary = [0, 8, 1, 3] # 出力 row = [] # ary の先頭から順に参照する for n in ary: # n を row に追加する row.append(n) # 要素数 w=2 個毎に半角スペース区切りで出力する if len(row) == w: print(*row) row = []
6-STEP2: 3 * 3 の出力 (paizaランク D 相当)
半角スペース区切りで入力された9個の文字列を 3 行 3 列の形式で出力する問題です。
※ 各行は改行区切り、行の各要素は半角スペース区切り
入出力例
# 入出力例 INPUT1 = <<~"EOS" 0 1 2 3 4 5 6 7 8 EOS OUTPUT1 = <<~"EOS" 0 1 2 3 4 5 6 7 8 EOS
Ruby解答例1
半角スペース区切りの9個の整数を一次元配列aryに格納します。
空の配列row を用意し、配列aryの先頭から順に参照します。
整数の要素nを配列rowに追加し、要素数が w=3 になったら配列rowを半角スペースで連結して出力し、rowを空にします。
# 解答例1 w = 3 # 入力 ary = gets.split.map(&:to_i) # ary の先頭から順に参照する row = [] ary.each do |n| # ary の先頭から要素を取り出して row に追加する row.push(n) # 要素数 w=3 個毎に row を出力し row を空にする if row.length == w puts(row.join(" ")) row = [] end end
Ruby解答例2
3 行 3 列の二次元配列matrixを生成してから、まとめて出力する方法です。
半角スペース区切りの9個の整数を一次元配列aryに格納します。
空の配列matrix, row を用意し、配列aryの先頭から順に参照します。
整数の要素nを配列rowに追加し、要素数が w=3 になったら配列rowを二次元配列matrixに追加し、配列rowを空にします。
3 行 3 列の二次元配列matrixの行の各要素を半角スペースで連結し、putsメソッドで出力しています。
# 解答例2 w = 3 # 入力 ary = gets.split.map(&:to_i) # 3 x 3 の行列を作成 matrix = [] row = [] # ary の先頭から順に参照する ary.each do |n| # n を row に追加する row.push(n) # 要素数 w=3 個毎に row を matrix に追加し row を空にする if row.length == w matrix.push(row) row = [] end end # 出力 puts(matrix.map { |row| row.join(" ") })
Python解答例1
半角スペース区切りの9個の整数を一次元配列aryに格納します。
空の配列row を用意し、配列aryの先頭から順に参照します。
整数の要素nを配列rowに追加し、要素数が w=3 になったら配列rowをアンパックして出力し、rowを空にします。
# 解答例1 w = 3 # 入力 ary = map(int, input().split()) # ary の先頭から順に参照する row = [] for n in ary: # n を row に追加する row.append(n) # 要素数 w=3 個毎に row を出力し row を空にする if len(row) == w: print(*row) row = []
Python解答例2
3 行 3 列の二次元配列matrixを生成してから、まとめて出力する方法です。
半角スペース区切りの9個の整数を一次元配列aryに格納します。
空の配列matrix, row を用意し、配列aryの先頭から順に参照します。
整数の要素nを配列rowに追加し、要素数が w=3 になったら配列rowを二次元配列matrixに追加し、配列rowを空にします。
3 行 3 列の二次元配列matrixをリスト内包表記で各行を参照し、要素をアンパックして出力しています。
# 解答例2 w = 3 # 入力 ary = map(int, input().split()) # 3 x 3 の行列を作成 matrix = [] row = [] # ary の先頭から順に参照する for n in ary: # n を row に追加する row.append(n) # 要素数 w=3 個毎に row を matrix に追加し row を空にする if len(row) == w: matrix.append(row) row = [] # 出力 [print(*row) for row in matrix]
6-STEP3: 九九表の出力 (paizaランク D 相当)
9 行 9列で九九の答えを出力する問題です。
※ 各行は改行区切り、行の各要素は半角スペース区切り
Ruby解答例1
i=1 から 9 、j=1 から 9 の二重ループを設定し、各iの段の答えの配列danを生成し、半角スペース区切りで出力しています。
# 解答例1 # i=1 から 9 までのループを設定 1.upto(9) do |i| # i の段の答えを配列 dan に格納 dan = 1.upto(9).map { |j| i * j } # 出力 puts(dan.join(" ")) end
Ruby解答例2
9 行 9 列の二次元配列kukuを生成してから、まとめて出力する方法です。
空の配列kukuを用意し、i=1 から 9 、j=1 から 9 の二重ループを設定します。
各iの段の答えの配列danを生成し、二次元配列kukuに追加します。
二次元配列kukuの行の各要素を半角スペースで連結し、putsメソッドで出力しています。
# 解答例2 # 九九の表を作成 kuku = [] # 1 から9 までの二重ループを設定 1.upto(9) do |i| # i の段の答え 配列 dan を配列 kuku に追加 dan = 1.upto(9).map { |j| i * j } kuku.push(dan) end # 出力 puts(kuku.map { |dan| dan.join(" ") })
Python解答例1
i=1 から 9 、j=1 から 9 の二重ループを設定し、各iの段の答えの配列danを生成し、アンパックして出力しています。
# 解答例1 # 1 から9 までの二重ループを設定 for i in range(1, 10): # i の段の答えを配列 dan に格納 dan = [i * j for j in range(1, 10)] # 出力 print(*dan)
Python解答例2
9 行 9 列の二次元配列kukuを生成してから、まとめて出力する方法です。
空の配列kukuを用意し、i=1 から 9 、j=1 から 9 の二重ループを設定します。
各iの段の答えの配列danを生成し、二次元配列kukuに追加します。
二次元配列kukuをリスト内包表記で各行を参照し、要素をアンパックして出力しています。
# 解答例2 # 九九の表を作成 kuku = [] # 1 から9 までの二重ループを設定 for i in range(1, 10): # i の段の答え 配列 dan を配列 kuku に追加 dan = [i * j for j in range(1, 10)] kuku.append(dan) # 出力 [print(*dan) for dan in kuku]
6-FINAL: 【n * n の 2 次元配列の表示】N * N の九九表の出力 (paizaランク C 相当)
整数nが与えられるので、 n 行 n列で九九の答えを出力する問題です。
※ 各行は改行区切り、行の各要素は半角スペース区切り
入出力例
# 入出力例 INPUT1 = <<~"EOS" 3 EOS OUTPUT1 = <<~"EOS" 1 2 3 2 4 6 3 6 9 EOS
Ruby解答例1
整数nを受け取ります。
i=1 から n 、j=1 から n の二重ループを設定し、各iの段の答えの配列danを生成し、半角スペース区切りで出力しています。
# 解答例1 # 入力 n = gets.to_i # 1 から n までの二重ループを設定 1.upto(n) do |i| # i の段の答えを配列 dan に格納 dan = 1.upto(n).map { |j| i * j } # 出力 puts(dan.join(" ")) end
Ruby解答例2
n 行 n 列の二次元配列kukuを生成してから、まとめて出力する方法です。
整数nを受け取ります。
空の配列kukuを用意し、i=1 から n 、j=1 から n の二重ループを設定します。
各iの段の答えの配列danを生成し、二次元配列kukuに追加します。
二次元配列kukuの行の各要素を半角スペースで連結し、putsメソッドで出力しています。
# 解答例2 # 入力 n = gets.to_i # n * n の表を作成 kuku = [] # 1 から n までの二重ループを設定 1.upto(n) do |i| # i の段の答え 配列 dan を配列 kuku に追加 dan = 1.upto(n).map { |j| i * j } kuku.push(dan) end # 出力 puts(kuku.map { |dan| dan.join(" ") })
Python解答例1
整数nを受け取ります。
i=1 から n 、j=1 から n の二重ループを設定し、各iの段の答えの配列danを生成し、アンパックして出力しています。
# 解答例1 # 入力 n = int(input()) # 1 から n までの二重ループを設定 for i in range(1, n + 1): # i の段の答えを配列 dan に格納 dan = [i * j for j in range(1, n + 1)] # 出力 print(*dan)
Python解答例2
n 行 n 列の二次元配列kukuを生成してから、まとめて出力する方法です。
整数nを受け取ります。
空の配列kukuを用意し、i=1 から n 、j=1 から n の二重ループを設定します。
各iの段の答えの配列danを生成し、二次元配列kukuに追加します。
二次元配列kukuをリスト内包表記で各行を参照し、要素をアンパックして出力しています。
# 解答例1 # 入力 n = int(input()) # 1 から n までの二重ループを設定 for i in range(1, n + 1): # i の段の答えを配列 dan に格納 dan = [i * j for j in range(1, n + 1)] # 出力 print(*dan)
今回のまとめ
Ruby, Python 共通
- 配列に配列を追加すると、二次元配列(多次元配列)を生成することができる
Ruby 二次元配列を出力
puts(二次元配列.map { |行配列| 行配列.join(" 区切り文字") })
Python 二次元配列を出力
[print(*行配列) for 行配列 in 二次元配列]
(アンパック)[print("区切り文字".join(行配列)) for 行配列 in 二次元配列]
(joinメソッド)
セクション6では要素の長さが揃っている二次元配列を扱いました。
次は、要素の長さが異なる二次元配列(ジャグ配列)です!