※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました。
問題3 直角三角形の出力 (paizaランク D 相当)
自然数 N が与えられます。1 ≦ i ≦ N の各 i について、i 行目には以下の数列を出力してください。
* 1 以上 i 以下の数値をすべて、半角スペース区切りで出力してください
入力される値
- 
N 入力値最終行の末尾に改行が1つ入ります。 
 文字列は標準入力から渡されます。
- 期待する出力
- 答えの数値を出力してください。
1 1 2 1 2 3 ... 1 2 3 ... N-1 1 2 3 ... N-1 N 末尾に改行を入れ、余計な文字、空行を含んではいけません。 
- 条件
- すべてのテストケースにおいて、以下の条件をみたします。
* N は 1 以上 100 以下 
入力例1
4
出力例1
1 1 2 1 2 3 1 2 3 4
入力例2
1
出力例2
1
解答
# 1行目の入力値(数値)を受け取る 
n = gets.to_i 
# 1からi+1まで出力することをn回繰り返す 
n.times do |i|
  puts [*1..i+1].join(' ')
end
短くすると
# 1行目の入力値(数値)を受け取る
n = gets.to_i
# 1からi+1まで出力することをn回繰り返す
n.times { |i| puts [*1..i+1].join(' ') }
※ポイント
iは0から始まるのでi+1とすることを意識する
問題4 すべての行の長さが不定な 2 次元配列の出力 (paizaランク C 相当)
自然数 N と N 個の要素の数列 M が与えられます。1 ≦ i ≦ N の各 i について、i 行目には以下の数列を出力してください。
* 1 以上 M_i 以下のすべての自然数を昇順、半角スペース区切りで出力してください。
- 入力される値
- 
N M_1 M_2 M_3 ... M_N 入力値最終行の末尾に改行が1つ入ります。 
 文字列は標準入力から渡されます。
- 期待する出力
- 答えの数値を出力してください。
1 2 3 4 ... M_1 1 2 3 4 ... M_2 ... 1 2 3 4 ... M_N 末尾に改行を入れ、余計な文字、空行を含んではいけません。 
- 条件
- すべてのテストケースにおいて、以下の条件をみたします。
* N は 1 以上 100 以下 
 * M の各要素の値は 1 以上 100 以下
- 入力例1
- 
4 2 4 3 1 
- 出力例1
- 
1 2 1 2 3 4 1 2 3 1 
- 入力例2
- 
1 1 
- 出力例2
- 
1 
解答 (入力例1で解説)
# 1行目の入力値(数値)を受け取る
n = gets.to_i
# 半角スペース刻みの入力値を受け取る配列として代入していく
m = gets.split.map(&:to_i)
n.times do |i| 
# 1から2,1から4.1から3,1から1を出力する(半角スペースを間に挟んで) 
  puts [*1..m[i]].join(' ')
end
短くすると
# 1行目の入力値(数値)を受け取る 
n = gets.to_i 
# 半角スペース刻みの入力値を受け取る配列として代入していく 
m = gets.split.map(&:to_i) 
# 1から2,1から4.1から3,1から1を出力する(半角スペースを間に挟んで) 
n.times { |i| puts [*1..m[i]].join(' ') }
					