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