※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました
問題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