日別アーカイブ: 2022年8月15日

paizaLvアップ問題と解答(標準出力15)Ruby

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

詳しくはコチラ

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

問題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(' ')