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