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

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

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

詳しくはコチラ

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

問題3 九九表を罫線入りで出力 (paizaランク C 相当)

九九表を、横の数値間では | (半角スペース 2 つとバーティカルライン)、縦の数値間では = で区切って出力してください。
ただし、数値を出力する際は 2 けたになるよう半角スペース埋めで出力します。また、縦の数値間で = を出力する際は、その上の行と文字数が等しくなるように出力します。

入力される値
なし

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

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

S1
S2
S3
...
S9

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

条件
なし

解答

#九九の計算結果に" | "でつないで末尾に"\n"(改行コード)を追加する
line = 1.upto(9).map do |i|

# i 段の答えを" | "で連結し末尾に"\n"(改行コード)を追加
  1.upto(9).map { |j| "%2d" % (i * j) }.join(" | ") + "\n"
  end

# 配列 line を "=" * 42 + "\n"(改行コード)でつなぐ
answer = line.join("=" * 42 + "\n")

# 出力する
puts answer

または

#空の配列を作成
answer = []

#9回繰り返す
9.times do |i|

#9回繰り返す
  9.times do |j|

# 前後に半角スペース" "を配置して
# 1 * 1, 1 * 2, 1 * 3, 1 * 4, 1 * 5, 1 * 6, 1 * 7, 1 * 8, 1 * 9,
# 2 * 1, 2 * 2, 2 * 3・・・,と計算結果を配列に挿入していく。
    answer << " " + ((i + 1) * (j + 1)).to_s + " "

# ループの8回まで|(パイプ)を付加する 
    answer << ('|') if j <= 7

# ループの最後(9の倍数回)に"\n"(改行コード)を付加する
    answer << "\n" if j == 8

  end

# 1の段と2の段の間、2の段と3の段の間のように、段の間に=42個と改行コード"\n"を付加する
    answer << ("=" * 42) + "\n"
  end

# 繋げて出力する
puts answer.join