※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました
FINAL問題【出力形式を指定して出力】ペアの数値の入った表を罫線入りで出力 2 (paizaランク C 相当)
自然数 H, W, A, B が与えられます。縦に H 行、横に W 行で計 H * W 個の (A, B) という形式で文字列を出力してください。ただし、横は | (半角スペース 2 つとバーティカルライン) 区切りで、縦は = で区切って出力してください。また、縦の文字列間で = を出力する際は、その上の行と文字数がそろうように出力します。また、A と B は 9 けたになるように半角スペースを数値の前(右詰め)に埋めて出力してください。
- 入力される値
- 
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 以上 999,999,999 以下
- 入力例1
- 
2 3 7 8 
- 出力例1
- 
( 7, 8) | ( 7, 8) | ( 7, 8) ======================================================================== ( 7, 8) | ( 7, 8) | ( 7, 8) 
- 入力例2
- 
3 2 999999999 0 
- 出力例2
- 
(999999999, 0) | (999999999, 0) =============================================== (999999999, 0) | (999999999, 0) =============================================== (999999999, 0) | (999999999, 0) 
解答 (出力例2で解説します)
#1行目の入力値を数値として各変数に代入する 
h, w, a, b = gets.split.map(&:to_i)
#空の配列で初期化する 
answer = []
#(999999999,           0) ←のようにするために式展開を利用する 
#{"%9d" % a}, #{"%9d" % b}と書くことで9桁の半角スペース埋めを表現できる
strings = ["(#{"%9d" % a}, #{"%9d" % b})"]
#縦の回数分繰り返す
h.times do |i|
#(999999999,           0) | (999999999,          0)
#↑のようにするためstringsを横(w)の回数で掛けて.join(" | ")でつなぎanswerに挿入する 
  answer << ( strings * w).join(" | ")
#"="を間に挟む(ループの最後は"="を挟まないようにする) 
  answer << "=" * (25 * w - 3) if i + 1 != h
end
# 出力する
puts answer
					