🔖

ペアの数値の入った表を罫線入りで出力 2 考え方

2023/10/02に公開

問題

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

入力される値

h w a b

コードと考え方

# h w a b は半角スペース区切りで入力されるのでget.split.map(&:to_i)で入力値をそれぞれの変数に代入
h,w,a,b = gets.split.map(&:to_i)

# 指定された書式の`(         a,          b)`の文字列sを作成
s = "(#{"%9d" % a}, #{"%9d" % b})"

# sと | で構成された行を作成 sを[]で囲んで配列にする
row = ([s] * w).join(" | ") + "\n"

# 指定された区切り=をつけて表を完成させる
# =の数→sの文字数(18+4) * w個 = 22w + " | "の文字数3 * (w - 1)個
table = ([line] * h).join("=" * (25 * w -3) + "\n")

#出力
puts table

Discussion