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

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

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

詳しくはコチラ

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

問題4 ペアの数値の入った表を罫線入りで出力 (paizaランク C 相当)

自然数 H, W, A, B が与えられます。縦に H 行、横に W 行で計 H * W 個の (A, B) という形式の文字列を出力してください。ただし、横は | (半角スペース 2 つとバーティカルライン) 区切りで、縦は = で区切って出力してください。また、縦の文字列間で = を出力する際は、その上の行と文字数が等しくなるように出力します。

入力される値
H W A B

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

期待する出力
答えの文字列を出力してください。

(A_{1,1}, B_{1,1}) | (A_{1,2}, B_{1,2}) ... (A_{1,W}, B_{1,W})
=================== ... ====================
(A_{2,1}, B_{2,1}) | (A_{2,2}, B_{2,2}) ... (A_{2,W}, B_{2,W})
=================== ... ====================
...
...
...
=================== ... ====================
(A_{H,1}, B_{H,1}) | (A_{H,2}, B_{H,2}) ... (A_{H,W}, B_{H,W})

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
すべてのテストケースにおいて、以下の条件をみたします。

* H, W は 1 以上 100 以下
* A, B は 0 以上 9 以下
入力例1
2 3 7 8
出力例1
(7, 8) | (7, 8) | (7, 8)
========================
(7, 8) | (7, 8) | (7, 8)
入力例2
3 2 0 0
出力例2
(0, 0) | (0, 0)
===============
(0, 0) | (0, 0)
===============
(0, 0) | (0, 0)

解答  (入力例1で解説)

#1行目の入力値を数値として各変数に代入する
h, w, a, b = gets.split.map(&:to_i)

#空の配列で初期化する
answer = []
#(7, 8) ←ようにするために式展開を利用する
strings = ["(#{a}, #{b})"]

#縦の回数分繰り返す
h.to_i.times do |i|

#(7, 8) | (7, 8) | (7, 8)
#↑のようにするためstringsを横の回数で掛けて(" | ")でつなぎanswerに挿入する
  answer << (strings * w).join(" | ")

#ループの最後以外に"="を間に挟む
  answer << "=" * (9 * w - 3) if i + 1 != h
end

# 出力する
puts answer