🐡
ビンゴカード作成問題をやってみた
始めに
引き続き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