🐡

ビンゴカード作成問題をやってみた

に公開

始めに

引き続きRubyのリハビリをしています。今回はビンゴカード作成問題
をやってみました。

実装

lib/bingo.rb
# frozen_string_literal: true

class Bingo
  class << self
    def generate_card
      puts ' B |  I |  N |  G |  O'
      2.times { puts one_line }
      puts center_line
      2.times { puts one_line }
    end

    def one_line
      [1..15, 16..30, 31..45, 46..60, 61..75].map { |range| format('%2d', rand(range)) }.join(' | ')
    end

    def center_line
      line = [1..15, 16..30].map { |range| format('%2d', rand(range)) }.join(' | ')
      line += ' |    | '
      line + [46..60, 61..75].map { |range| format('%2d', rand(range)) }.join(' | ')
    end
  end
end
spec/bingo_spec.rb
# frozen_string_literal: true

RSpec.describe Bingo do
  describe '.generate_card' do
    before do
      srand(731)
    end

    it do
      expected = <<~'EXPECTED'
         B |  I |  N |  G |  O
        10 | 26 | 36 | 48 | 71
         8 | 19 | 34 | 54 | 75
         7 | 21 |    | 58 | 68
         1 | 18 | 31 | 55 | 62
        14 | 16 | 42 | 60 | 67
      EXPECTED

      expect { described_class.generate_card }.to output(expected).to_stdout
    end
  end
end

感想

ヒアドキュメントの使い方が未だにイマイチ分かりませんねぇ。でも、ヒアドキュメントと標準出力に対するテスト方法を練習できたので良かったです。

Discussion