※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました。
問題1 N 個の文字を半分ずつ出力 (paizaランク D 相当)
偶数 N が入力されます。まず、 1 行目には 1 以上 N / 2 以下の数値を半角スペース区切りですべて出力してください。次に、 2 行目には N / 2 + 1 以上 N 以下の数値を半角スペース区切りですべて出力してください。
各行の末尾には、半角スペースの代わりに改行を入れてください。
- 入力される値
-
N
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
- 期待する出力
- 答えの数値を出力してください。
1 2 3 ... N/2 N/2+1 N/2+2 ... N
末尾に改行を入れ、余計な文字、空行を含んではいけません。
- 条件
- すべてのテストケースにおいて、以下の条件をみたします。
* N は偶数
* N は 1 以上 1,000 以下
- 入力例1
-
8
- 出力例1
-
1 2 3 4 5 6 7 8
解答
# 入力値(数値)を受け取る n = gets.to_i #[1, 2, 3, 4, 5, 6, 7, 8]を作成 numbers = [*1..n] #(n / 2)の長さで分割する→[[1, 2, 3, 4], [5, 6, 7, 8]] ary = numbers.each_slice(n / 2).to_a # 出力する(このとき半角スペースを間に挟んで結合する) ary.size.times { |i| puts ary[i].join(' ') }
問題2 数値を異なる長さで 2 行出力 (paizaランク D 相当)
自然数 N, M が与えられます。1 行目には 1 以上 N 以下の数値を半角スペース区切りで出力してください。また、2 行目には 1 以上 M 以下の数値を半角スペース区切りで出力してください。
さらに、各行の末尾には、半角スペースの代わりに改行を入れてください。
- 入力される値
-
N M
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
- 期待する出力
- 答えの数値を出力してください。
1 2 3 ... N 1 2 3 ... M
末尾に改行を入れ、余計な文字、空行を含んではいけません。
- 条件
-
すべてのテストケースにおいて、以下の条件をみたします。 * N, Mは 0 以上 1,000 以下
- 入力例1
-
3 5
- 出力例1
-
1 2 3 1 2 3 4 5
解答
# 半角スペース刻みの入力値を受け取り変数に代入 n, m = gets.split.map(&:to_i) # 1からnまで半角スペースを間に挟んで出力する puts [*1..n].join(' ') # 1からmまで半角スペースを間に挟んで出力する puts [*1..m].join(' ')