Решение на Четвърта задача от Георги Стефанов

Обратно към всички решения

Към профила на Георги Стефанов

Резултати

  • 3 точки от тестове
  • 0 бонус точки
  • 3 точки общо
  • 29 успешни тест(а)
  • 28 неуспешни тест(а)

Код

class Card
def initialize(rank = 0, suit = 0)
@suits = suit
@ranks = rank
set_number
set_color
end
def set_number
case @ranks
when 2..10 then @card_numbers = @ranks
when :jack then @card_numbers = 11
when :queen then @card_numbers = 12
when :king then @card_numbers = 13
when :ace then @card_numbers = 14
else @card_numbers = 1
end
end
def set_number_ten(game)
case game
when :belote, :sixty then @card_numbers = 13.5
else @card_numbers = 10
end
end
def set_color
case @suits
when :spades then @card_colors = 1
when :hearts then @card_colors = 2
when :diamonds then @card_colors = 3
when :clubs then @card_colors = 4
else @card_colors = 0
end
end
def rank
@ranks
end
def suit
@suits
end
def number
@card_numbers
end
def color
@card_colors
end
def to_s
if convert_rank(@ranks) and convert_suit(@suits)
"#{convert_rank(@ranks)}#{convert_suit(@suits)}"
else
'Joker!'
end
end
def convert_rank(rank)
case rank
when :jack then 'Jack of '
when :queen then 'Queen of '
when :king then 'King of '
when :ace then 'Ace of '
when 2..10 then "#{rank} of "
else nil
end
end
def convert_suit(suit)
case suit
when :spades then 'Spades'
when :hearts then 'Hearts'
when :diamonds then 'Diamonds'
when :clubs then 'Clubs'
else nil
end
end
end
class Deck < Card
include Enumerable
def initialize(cards = all_cards)
@cards = cards
end
def each
number = 0
while number < size
yield @cards[number]
number += 1
end
end
def all_cards
ranks = [:ace, :king, :queen, :jack, 10, 9, 8, 7, 6, 5, 4, 3, 2]
suits, new_cards = [:spades, :hearts, :diamonds, :clubs], []
suits.each do |suit|
ranks.each do |rank|
new_cards.push(Card.new(rank, suit))
end
end
new_cards
end
def size
@cards.size
end
def top_card
@cards.first
end
def bottom_card
@cards.last
end
def draw_top_card
@cards.shift
end
def draw_bottom_card
@cards.pop
end
def shuffle
@cards.shuffle!
end
def sort
@cards = @cards.sort_by { |card| [card.color, - card.number] }
end
def deal
hand = []
hand_size = 26
number = 0
while number < hand_size
hand.push(draw_top_card)
number += 1
end
hand
end
def to_s
puts @cards
end
def find(suit)
first_card = Card.new(:king, suit)
second_card = Card.new(:queen, suit)
if @cards.include?(first_card) and @cards.include?(second_card)
true
else
false
end
end
end
class WarDeck < Deck
def play_card
shuffle
draw_top_card.to_s
end
def allow_face_up?
if size <= 3
true
else
false
end
end
end
class BeloteDeck < Deck
def initialize(cards = all_cards_belote)
@cards = cards
end
def belote_card?(card_given)
case card_given.rank
when :jack, :queen, :king, :ace then true
when 7, 8, 9, 10 then true
else false
end
end
def all_cards_belote
unopened_deck = all_cards
opened_deck = []
unopened_deck.each { |card| opened_deck.push(card) if belote_card?(card) }
opened_deck.each { |card| card.set_number_ten(:belote) if card.rank == 10 }
opened_deck
end
def deal
hand = []
hand_size = 8
number = 0
while number < hand_size
hand.push(@cards.shift)
number += 1
end
@cards = hand
end
def highest_of_suit(suit)
sort
high_card = Card.new(0, 0)
@cards.each do |card|
high_card = card if card.suit == suit
break
end
high_card
end
def belote?
find(:spades) or find(:hearts) or find(:diamonds) or find(:clubs)
end
def check_cards(number)
count, counter = number, 0
while count
count -= 1 if @cards[counter] == @cards[counter + 1]
count = number if @cards[counter] != @cards[counter + 1]
end
true if count == 0
false if count != 0
end
def tierce?
check_cards(3)
end
def quarte?
check_cards(4)
end
def quint?
check_cards(5)
end
def carre_of(suit)
count = 0
@cards.each { |card| count += 1 if card.rank == suit }
if count == 4
true
else
false
end
end
def carre_of_jacks?
carre_of(:jack)
end
def carre_of_nines?
carre_of(9)
end
def carre_of_aces?
carre_of(:ace)
end
end
class SixtySixDeck < Deck
def initialize(cards = all_cards_sixty)
@cards = cards
end
def sixty_card?(card_given)
case card_given.rank
when :jack, :queen, :king, :ace then true
when 9, 10 then true
else false
end
end
def all_cards_sixty
unopened_deck = all_cards
opened_deck = []
unopened_deck.each { |card| opened_deck.push(card) if sixty_card?(card) }
opened_deck.each { |card| card.set_number_ten(:sixty) if card.rank == 10 }
opened_deck
end
def deal
hand = []
hand_size = 6
number = 0
while number < hand_size
hand.push(@cards.shift)
number += 1
end
@cards = hand
end
def forty?(trump_suit)
find(trump_suit)
end
def twenty?(trump_suit)
case trump_suit
when :spades then find(:hearts) or find(:diamonds) or find(:clubs)
when :hearts then find(:spades) or find(:diamonds) or find(:clubs)
when :diamonds then find(:hearts) or find(:spades) or find(:clubs)
when :clubs then find(:hearts) or find(:diamonds) or find(:spades)
else nil
end
end
end

Лог от изпълнението

..F.F......Ace of Spades
9 of Clubs
F..FF.F......Ace of Spades
9 of Clubs
F..FFFFFFFFFFFFFFFF.F......Ace of Spades
9 of Clubs
F..FFF

Failures:

  1) Card #== compares two cards by their rank and suit
     Failure/Error: expect(Card.new(4, :spades)).to eq Card.new(4, :spades)
       
       expected: #<Card:0x007fc2a1585578 @suits=:spades, @ranks=4, @card_numbers=4, @card_colors=1>
            got: #<Card:0x007fc2a15855f0 @suits=:spades, @ranks=4, @card_numbers=4, @card_colors=1>
       
       (compared using ==)
       
       Diff:
       @@ -1,4 +1,4 @@
       -#<Card:0x007fc2a1585578
       +#<Card:0x007fc2a15855f0
         @card_colors=1,
         @card_numbers=4,
         @ranks=4,
     # /tmp/d20151112-27349-1nj4yru/spec.rb:131:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  2) WarDeck behaves like a deck fills the deck if no initialize parameters are given
     Failure/Error: expect(deck.to_a).to match_array all_available_cards
       expected collection contained:  [#<Card:0x007fc2a244c840 @suits=:clubs, @ranks=2, @card_numbers=2, @card_colors=4>, #<Card:0x007fc2a244c818 @suits=:clubs, @ranks=3, @card_numbers=3, @card_colors=4>, #<Card:0x007fc2a244c7f0 @suits=:clubs, @ranks=4, @card_numbers=4, @card_colors=4>, #<Card:0x007fc2a244c7c8 @suits=:clubs, @ranks=5, @card_numbers=5, @card_colors=4>, #<Card:0x007fc2a244c7a0 @suits=:clubs, @ranks=6, @card_numbers=6, @card_colors=4>, #<Card:0x007fc2a244c750 @suits=:clubs, @ranks=7, @card_numbers=7, @card_colors=4>, #<Card:0x007fc2a244c6d8 @suits=:clubs, @ranks=8, @card_numbers=8, @card_colors=4>, #<Card:0x007fc2a244c6b0 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a244c638 @suits=:clubs, @ranks=10, @card_numbers=10, @card_colors=4>, #<Card:0x007fc2a244c610 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a244c5e8 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a244c5c0 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a244c598 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a244c570 @suits=:diamonds, @ranks=2, @card_numbers=2, @card_colors=3>, #<Card:0x007fc2a244c548 @suits=:diamonds, @ranks=3, @card_numbers=3, @card_colors=3>, #<Card:0x007fc2a244c4f8 @suits=:diamonds, @ranks=4, @card_numbers=4, @card_colors=3>, #<Card:0x007fc2a244c480 @suits=:diamonds, @ranks=5, @card_numbers=5, @card_colors=3>, #<Card:0x007fc2a244c458 @suits=:diamonds, @ranks=6, @card_numbers=6, @card_colors=3>, #<Card:0x007fc2a244c430 @suits=:diamonds, @ranks=7, @card_numbers=7, @card_colors=3>, #<Card:0x007fc2a244c408 @suits=:diamonds, @ranks=8, @card_numbers=8, @card_colors=3>, #<Card:0x007fc2a244c3b8 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a244c390 @suits=:diamonds, @ranks=10, @card_numbers=10, @card_colors=3>, #<Card:0x007fc2a244c368 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a244c2f0 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a244c2a0 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a244c278 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a244c250 @suits=:hearts, @ranks=2, @card_numbers=2, @card_colors=2>, #<Card:0x007fc2a244c1d8 @suits=:hearts, @ranks=3, @card_numbers=3, @card_colors=2>, #<Card:0x007fc2a244c1b0 @suits=:hearts, @ranks=4, @card_numbers=4, @card_colors=2>, #<Card:0x007fc2a244c188 @suits=:hearts, @ranks=5, @card_numbers=5, @card_colors=2>, #<Card:0x007fc2a244c160 @suits=:hearts, @ranks=6, @card_numbers=6, @card_colors=2>, #<Card:0x007fc2a244c110 @suits=:hearts, @ranks=7, @card_numbers=7, @card_colors=2>, #<Card:0x007fc2a244c0c0 @suits=:hearts, @ranks=8, @card_numbers=8, @card_colors=2>, #<Card:0x007fc2a244c048 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a244c020 @suits=:hearts, @ranks=10, @card_numbers=10, @card_colors=2>, #<Card:0x007fc2a240ffa8 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a240ff80 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a240ff58 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a240ff30 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a240ff08 @suits=:spades, @ranks=2, @card_numbers=2, @card_colors=1>, #<Card:0x007fc2a240fee0 @suits=:spades, @ranks=3, @card_numbers=3, @card_colors=1>, #<Card:0x007fc2a240feb8 @suits=:spades, @ranks=4, @card_numbers=4, @card_colors=1>, #<Card:0x007fc2a240fe90 @suits=:spades, @ranks=5, @card_numbers=5, @card_colors=1>, #<Card:0x007fc2a240fe68 @suits=:spades, @ranks=6, @card_numbers=6, @card_colors=1>, #<Card:0x007fc2a240fe40 @suits=:spades, @ranks=7, @card_numbers=7, @card_colors=1>, #<Card:0x007fc2a240fe18 @suits=:spades, @ranks=8, @card_numbers=8, @card_colors=1>, #<Card:0x007fc2a240fdf0 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a240fdc8 @suits=:spades, @ranks=10, @card_numbers=10, @card_colors=1>, #<Card:0x007fc2a240fda0 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a240fd50 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a240fd28 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a240fd00 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>]
       actual collection contained:    [#<Card:0x007fc2a244dec0 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>, #<Card:0x007fc2a244de98 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a244de70 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a244de48 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a244de20 @suits=:spades, @ranks=10, @card_numbers=10, @card_colors=1>, #<Card:0x007fc2a244ddf8 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a244ddd0 @suits=:spades, @ranks=8, @card_numbers=8, @card_colors=1>, #<Card:0x007fc2a244dda8 @suits=:spades, @ranks=7, @card_numbers=7, @card_colors=1>, #<Card:0x007fc2a244dd58 @suits=:spades, @ranks=6, @card_numbers=6, @card_colors=1>, #<Card:0x007fc2a244dd30 @suits=:spades, @ranks=5, @card_numbers=5, @card_colors=1>, #<Card:0x007fc2a244dcb8 @suits=:spades, @ranks=4, @card_numbers=4, @card_colors=1>, #<Card:0x007fc2a244dc90 @suits=:spades, @ranks=3, @card_numbers=3, @card_colors=1>, #<Card:0x007fc2a244dc18 @suits=:spades, @ranks=2, @card_numbers=2, @card_colors=1>, #<Card:0x007fc2a244dbf0 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a244dbc8 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a244dba0 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a244db78 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a244db50 @suits=:hearts, @ranks=10, @card_numbers=10, @card_colors=2>, #<Card:0x007fc2a244db00 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a244da88 @suits=:hearts, @ranks=8, @card_numbers=8, @card_colors=2>, #<Card:0x007fc2a244da60 @suits=:hearts, @ranks=7, @card_numbers=7, @card_colors=2>, #<Card:0x007fc2a244da38 @suits=:hearts, @ranks=6, @card_numbers=6, @card_colors=2>, #<Card:0x007fc2a244da10 @suits=:hearts, @ranks=5, @card_numbers=5, @card_colors=2>, #<Card:0x007fc2a244d9e8 @suits=:hearts, @ranks=4, @card_numbers=4, @card_colors=2>, #<Card:0x007fc2a244d9c0 @suits=:hearts, @ranks=3, @card_numbers=3, @card_colors=2>, #<Card:0x007fc2a244d998 @suits=:hearts, @ranks=2, @card_numbers=2, @card_colors=2>, #<Card:0x007fc2a244d970 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a244d920 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a244d8f8 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a244d8a8 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a244d880 @suits=:diamonds, @ranks=10, @card_numbers=10, @card_colors=3>, #<Card:0x007fc2a244d858 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a244d808 @suits=:diamonds, @ranks=8, @card_numbers=8, @card_colors=3>, #<Card:0x007fc2a244d7e0 @suits=:diamonds, @ranks=7, @card_numbers=7, @card_colors=3>, #<Card:0x007fc2a244d7b8 @suits=:diamonds, @ranks=6, @card_numbers=6, @card_colors=3>, #<Card:0x007fc2a244d790 @suits=:diamonds, @ranks=5, @card_numbers=5, @card_colors=3>, #<Card:0x007fc2a244d768 @suits=:diamonds, @ranks=4, @card_numbers=4, @card_colors=3>, #<Card:0x007fc2a244d740 @suits=:diamonds, @ranks=3, @card_numbers=3, @card_colors=3>, #<Card:0x007fc2a244d718 @suits=:diamonds, @ranks=2, @card_numbers=2, @card_colors=3>, #<Card:0x007fc2a244d6c8 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a244d650 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a244d628 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a244d600 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a244d5d8 @suits=:clubs, @ranks=10, @card_numbers=10, @card_colors=4>, #<Card:0x007fc2a244d5b0 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a244d588 @suits=:clubs, @ranks=8, @card_numbers=8, @card_colors=4>, #<Card:0x007fc2a244d560 @suits=:clubs, @ranks=7, @card_numbers=7, @card_colors=4>, #<Card:0x007fc2a244d538 @suits=:clubs, @ranks=6, @card_numbers=6, @card_colors=4>, #<Card:0x007fc2a244d4e8 @suits=:clubs, @ranks=5, @card_numbers=5, @card_colors=4>, #<Card:0x007fc2a244d4c0 @suits=:clubs, @ranks=4, @card_numbers=4, @card_colors=4>, #<Card:0x007fc2a244d448 @suits=:clubs, @ranks=3, @card_numbers=3, @card_colors=4>, #<Card:0x007fc2a244d420 @suits=:clubs, @ranks=2, @card_numbers=2, @card_colors=4>]
       the missing elements were:      [#<Card:0x007fc2a244c840 @suits=:clubs, @ranks=2, @card_numbers=2, @card_colors=4>, #<Card:0x007fc2a244c818 @suits=:clubs, @ranks=3, @card_numbers=3, @card_colors=4>, #<Card:0x007fc2a244c7f0 @suits=:clubs, @ranks=4, @card_numbers=4, @card_colors=4>, #<Card:0x007fc2a244c7c8 @suits=:clubs, @ranks=5, @card_numbers=5, @card_colors=4>, #<Card:0x007fc2a244c7a0 @suits=:clubs, @ranks=6, @card_numbers=6, @card_colors=4>, #<Card:0x007fc2a244c750 @suits=:clubs, @ranks=7, @card_numbers=7, @card_colors=4>, #<Card:0x007fc2a244c6d8 @suits=:clubs, @ranks=8, @card_numbers=8, @card_colors=4>, #<Card:0x007fc2a244c6b0 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a244c638 @suits=:clubs, @ranks=10, @card_numbers=10, @card_colors=4>, #<Card:0x007fc2a244c610 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a244c5e8 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a244c5c0 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a244c598 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a244c570 @suits=:diamonds, @ranks=2, @card_numbers=2, @card_colors=3>, #<Card:0x007fc2a244c548 @suits=:diamonds, @ranks=3, @card_numbers=3, @card_colors=3>, #<Card:0x007fc2a244c4f8 @suits=:diamonds, @ranks=4, @card_numbers=4, @card_colors=3>, #<Card:0x007fc2a244c480 @suits=:diamonds, @ranks=5, @card_numbers=5, @card_colors=3>, #<Card:0x007fc2a244c458 @suits=:diamonds, @ranks=6, @card_numbers=6, @card_colors=3>, #<Card:0x007fc2a244c430 @suits=:diamonds, @ranks=7, @card_numbers=7, @card_colors=3>, #<Card:0x007fc2a244c408 @suits=:diamonds, @ranks=8, @card_numbers=8, @card_colors=3>, #<Card:0x007fc2a244c3b8 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a244c390 @suits=:diamonds, @ranks=10, @card_numbers=10, @card_colors=3>, #<Card:0x007fc2a244c368 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a244c2f0 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a244c2a0 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a244c278 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a244c250 @suits=:hearts, @ranks=2, @card_numbers=2, @card_colors=2>, #<Card:0x007fc2a244c1d8 @suits=:hearts, @ranks=3, @card_numbers=3, @card_colors=2>, #<Card:0x007fc2a244c1b0 @suits=:hearts, @ranks=4, @card_numbers=4, @card_colors=2>, #<Card:0x007fc2a244c188 @suits=:hearts, @ranks=5, @card_numbers=5, @card_colors=2>, #<Card:0x007fc2a244c160 @suits=:hearts, @ranks=6, @card_numbers=6, @card_colors=2>, #<Card:0x007fc2a244c110 @suits=:hearts, @ranks=7, @card_numbers=7, @card_colors=2>, #<Card:0x007fc2a244c0c0 @suits=:hearts, @ranks=8, @card_numbers=8, @card_colors=2>, #<Card:0x007fc2a244c048 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a244c020 @suits=:hearts, @ranks=10, @card_numbers=10, @card_colors=2>, #<Card:0x007fc2a240ffa8 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a240ff80 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a240ff58 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a240ff30 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a240ff08 @suits=:spades, @ranks=2, @card_numbers=2, @card_colors=1>, #<Card:0x007fc2a240fee0 @suits=:spades, @ranks=3, @card_numbers=3, @card_colors=1>, #<Card:0x007fc2a240feb8 @suits=:spades, @ranks=4, @card_numbers=4, @card_colors=1>, #<Card:0x007fc2a240fe90 @suits=:spades, @ranks=5, @card_numbers=5, @card_colors=1>, #<Card:0x007fc2a240fe68 @suits=:spades, @ranks=6, @card_numbers=6, @card_colors=1>, #<Card:0x007fc2a240fe40 @suits=:spades, @ranks=7, @card_numbers=7, @card_colors=1>, #<Card:0x007fc2a240fe18 @suits=:spades, @ranks=8, @card_numbers=8, @card_colors=1>, #<Card:0x007fc2a240fdf0 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a240fdc8 @suits=:spades, @ranks=10, @card_numbers=10, @card_colors=1>, #<Card:0x007fc2a240fda0 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a240fd50 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a240fd28 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a240fd00 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>]
       the extra elements were:        [#<Card:0x007fc2a244dec0 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>, #<Card:0x007fc2a244de98 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a244de70 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a244de48 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a244de20 @suits=:spades, @ranks=10, @card_numbers=10, @card_colors=1>, #<Card:0x007fc2a244ddf8 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a244ddd0 @suits=:spades, @ranks=8, @card_numbers=8, @card_colors=1>, #<Card:0x007fc2a244dda8 @suits=:spades, @ranks=7, @card_numbers=7, @card_colors=1>, #<Card:0x007fc2a244dd58 @suits=:spades, @ranks=6, @card_numbers=6, @card_colors=1>, #<Card:0x007fc2a244dd30 @suits=:spades, @ranks=5, @card_numbers=5, @card_colors=1>, #<Card:0x007fc2a244dcb8 @suits=:spades, @ranks=4, @card_numbers=4, @card_colors=1>, #<Card:0x007fc2a244dc90 @suits=:spades, @ranks=3, @card_numbers=3, @card_colors=1>, #<Card:0x007fc2a244dc18 @suits=:spades, @ranks=2, @card_numbers=2, @card_colors=1>, #<Card:0x007fc2a244dbf0 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a244dbc8 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a244dba0 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a244db78 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a244db50 @suits=:hearts, @ranks=10, @card_numbers=10, @card_colors=2>, #<Card:0x007fc2a244db00 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a244da88 @suits=:hearts, @ranks=8, @card_numbers=8, @card_colors=2>, #<Card:0x007fc2a244da60 @suits=:hearts, @ranks=7, @card_numbers=7, @card_colors=2>, #<Card:0x007fc2a244da38 @suits=:hearts, @ranks=6, @card_numbers=6, @card_colors=2>, #<Card:0x007fc2a244da10 @suits=:hearts, @ranks=5, @card_numbers=5, @card_colors=2>, #<Card:0x007fc2a244d9e8 @suits=:hearts, @ranks=4, @card_numbers=4, @card_colors=2>, #<Card:0x007fc2a244d9c0 @suits=:hearts, @ranks=3, @card_numbers=3, @card_colors=2>, #<Card:0x007fc2a244d998 @suits=:hearts, @ranks=2, @card_numbers=2, @card_colors=2>, #<Card:0x007fc2a244d970 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a244d920 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a244d8f8 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a244d8a8 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a244d880 @suits=:diamonds, @ranks=10, @card_numbers=10, @card_colors=3>, #<Card:0x007fc2a244d858 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a244d808 @suits=:diamonds, @ranks=8, @card_numbers=8, @card_colors=3>, #<Card:0x007fc2a244d7e0 @suits=:diamonds, @ranks=7, @card_numbers=7, @card_colors=3>, #<Card:0x007fc2a244d7b8 @suits=:diamonds, @ranks=6, @card_numbers=6, @card_colors=3>, #<Card:0x007fc2a244d790 @suits=:diamonds, @ranks=5, @card_numbers=5, @card_colors=3>, #<Card:0x007fc2a244d768 @suits=:diamonds, @ranks=4, @card_numbers=4, @card_colors=3>, #<Card:0x007fc2a244d740 @suits=:diamonds, @ranks=3, @card_numbers=3, @card_colors=3>, #<Card:0x007fc2a244d718 @suits=:diamonds, @ranks=2, @card_numbers=2, @card_colors=3>, #<Card:0x007fc2a244d6c8 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a244d650 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a244d628 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a244d600 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a244d5d8 @suits=:clubs, @ranks=10, @card_numbers=10, @card_colors=4>, #<Card:0x007fc2a244d5b0 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a244d588 @suits=:clubs, @ranks=8, @card_numbers=8, @card_colors=4>, #<Card:0x007fc2a244d560 @suits=:clubs, @ranks=7, @card_numbers=7, @card_colors=4>, #<Card:0x007fc2a244d538 @suits=:clubs, @ranks=6, @card_numbers=6, @card_colors=4>, #<Card:0x007fc2a244d4e8 @suits=:clubs, @ranks=5, @card_numbers=5, @card_colors=4>, #<Card:0x007fc2a244d4c0 @suits=:clubs, @ranks=4, @card_numbers=4, @card_colors=4>, #<Card:0x007fc2a244d448 @suits=:clubs, @ranks=3, @card_numbers=3, @card_colors=4>, #<Card:0x007fc2a244d420 @suits=:clubs, @ranks=2, @card_numbers=2, @card_colors=4>]
     Shared Example Group: "a deck" called from /tmp/d20151112-27349-1nj4yru/spec.rb:140
     # /tmp/d20151112-27349-1nj4yru/spec.rb:18:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  3) WarDeck behaves like a deck #to_s returns the names of the cards, each on its own line
     Failure/Error: expect(small_deck.to_s.strip).to eq "Ace of Spades\n9 of Clubs"
     NoMethodError:
       undefined method `strip' for nil:NilClass
     Shared Example Group: "a deck" called from /tmp/d20151112-27349-1nj4yru/spec.rb:140
     # /tmp/d20151112-27349-1nj4yru/spec.rb:68:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  4) WarDeck hand #allow_face_up? returns false if the cards are more than 3
     Failure/Error: expect(hand.allow_face_up?).to eq false
     NoMethodError:
       undefined method `allow_face_up?' for #<Array:0x007fc2a23bb1d8>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:172:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  5) WarDeck hand #allow_face_up? returns true if the cards are less than or equal to 3
     Failure/Error: 23.times { hand.play_card }
     NoMethodError:
       undefined method `play_card' for #<Array:0x007fc2a23b8730>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:176:in `block (5 levels) in <top (required)>'
     # /tmp/d20151112-27349-1nj4yru/spec.rb:176:in `times'
     # /tmp/d20151112-27349-1nj4yru/spec.rb:176:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  6) BeloteDeck behaves like a deck fills the deck if no initialize parameters are given
     Failure/Error: expect(deck.to_a).to match_array all_available_cards
       expected collection contained:  [#<Card:0x007fc2a2398f98 @suits=:clubs, @ranks=7, @card_numbers=7, @card_colors=4>, #<Card:0x007fc2a2398f70 @suits=:clubs, @ranks=8, @card_numbers=8, @card_colors=4>, #<Card:0x007fc2a2398f48 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a2398f20 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a2398ef8 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a2398e30 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a2398d90 @suits=:clubs, @ranks=10, @card_numbers=10, @card_colors=4>, #<Card:0x007fc2a2398d40 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a2398d18 @suits=:diamonds, @ranks=7, @card_numbers=7, @card_colors=3>, #<Card:0x007fc2a2398cf0 @suits=:diamonds, @ranks=8, @card_numbers=8, @card_colors=3>, #<Card:0x007fc2a2398bd8 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a2398bb0 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a2398b88 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a2398b60 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a2398b38 @suits=:diamonds, @ranks=10, @card_numbers=10, @card_colors=3>, #<Card:0x007fc2a2398b10 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a2398ae8 @suits=:hearts, @ranks=7, @card_numbers=7, @card_colors=2>, #<Card:0x007fc2a2398ac0 @suits=:hearts, @ranks=8, @card_numbers=8, @card_colors=2>, #<Card:0x007fc2a2398a98 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a2398a48 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a2398a20 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a23989f8 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a2398958 @suits=:hearts, @ranks=10, @card_numbers=10, @card_colors=2>, #<Card:0x007fc2a2398930 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a2398908 @suits=:spades, @ranks=7, @card_numbers=7, @card_colors=1>, #<Card:0x007fc2a23988e0 @suits=:spades, @ranks=8, @card_numbers=8, @card_colors=1>, #<Card:0x007fc2a23988b8 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a2398840 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a2398818 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a2398700 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a23986d8 @suits=:spades, @ranks=10, @card_numbers=10, @card_colors=1>, #<Card:0x007fc2a23986b0 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>]
       actual collection contained:    [#<Card:0x007fc2a239a780 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>, #<Card:0x007fc2a239a758 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a239a730 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a239a690 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a239a640 @suits=:spades, @ranks=10, @card_numbers=13.5, @card_colors=1>, #<Card:0x007fc2a239a618 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a239a5f0 @suits=:spades, @ranks=8, @card_numbers=8, @card_colors=1>, #<Card:0x007fc2a239a5a0 @suits=:spades, @ranks=7, @card_numbers=7, @card_colors=1>, #<Card:0x007fc2a239a398 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a239a370 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a239a348 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a239a320 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a239a2a8 @suits=:hearts, @ranks=10, @card_numbers=13.5, @card_colors=2>, #<Card:0x007fc2a239a280 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a239a118 @suits=:hearts, @ranks=8, @card_numbers=8, @card_colors=2>, #<Card:0x007fc2a239a0c8 @suits=:hearts, @ranks=7, @card_numbers=7, @card_colors=2>, #<Card:0x007fc2a2399f10 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a2399ee8 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a2399ec0 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a2399e98 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a2399e70 @suits=:diamonds, @ranks=10, @card_numbers=13.5, @card_colors=3>, #<Card:0x007fc2a2399e48 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a2399e20 @suits=:diamonds, @ranks=8, @card_numbers=8, @card_colors=3>, #<Card:0x007fc2a2399df8 @suits=:diamonds, @ranks=7, @card_numbers=7, @card_colors=3>, #<Card:0x007fc2a2399c18 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a2399bf0 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a2399ba0 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a2399ab0 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a2399a88 @suits=:clubs, @ranks=10, @card_numbers=13.5, @card_colors=4>, #<Card:0x007fc2a2399a60 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a2399a38 @suits=:clubs, @ranks=8, @card_numbers=8, @card_colors=4>, #<Card:0x007fc2a2399a10 @suits=:clubs, @ranks=7, @card_numbers=7, @card_colors=4>]
       the missing elements were:      [#<Card:0x007fc2a2398f98 @suits=:clubs, @ranks=7, @card_numbers=7, @card_colors=4>, #<Card:0x007fc2a2398f70 @suits=:clubs, @ranks=8, @card_numbers=8, @card_colors=4>, #<Card:0x007fc2a2398f48 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a2398f20 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a2398ef8 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a2398e30 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a2398d90 @suits=:clubs, @ranks=10, @card_numbers=10, @card_colors=4>, #<Card:0x007fc2a2398d40 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a2398d18 @suits=:diamonds, @ranks=7, @card_numbers=7, @card_colors=3>, #<Card:0x007fc2a2398cf0 @suits=:diamonds, @ranks=8, @card_numbers=8, @card_colors=3>, #<Card:0x007fc2a2398bd8 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a2398bb0 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a2398b88 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a2398b60 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a2398b38 @suits=:diamonds, @ranks=10, @card_numbers=10, @card_colors=3>, #<Card:0x007fc2a2398b10 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a2398ae8 @suits=:hearts, @ranks=7, @card_numbers=7, @card_colors=2>, #<Card:0x007fc2a2398ac0 @suits=:hearts, @ranks=8, @card_numbers=8, @card_colors=2>, #<Card:0x007fc2a2398a98 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a2398a48 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a2398a20 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a23989f8 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a2398958 @suits=:hearts, @ranks=10, @card_numbers=10, @card_colors=2>, #<Card:0x007fc2a2398930 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a2398908 @suits=:spades, @ranks=7, @card_numbers=7, @card_colors=1>, #<Card:0x007fc2a23988e0 @suits=:spades, @ranks=8, @card_numbers=8, @card_colors=1>, #<Card:0x007fc2a23988b8 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a2398840 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a2398818 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a2398700 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a23986d8 @suits=:spades, @ranks=10, @card_numbers=10, @card_colors=1>, #<Card:0x007fc2a23986b0 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>]
       the extra elements were:        [#<Card:0x007fc2a239a780 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>, #<Card:0x007fc2a239a758 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a239a730 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a239a690 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a239a640 @suits=:spades, @ranks=10, @card_numbers=13.5, @card_colors=1>, #<Card:0x007fc2a239a618 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a239a5f0 @suits=:spades, @ranks=8, @card_numbers=8, @card_colors=1>, #<Card:0x007fc2a239a5a0 @suits=:spades, @ranks=7, @card_numbers=7, @card_colors=1>, #<Card:0x007fc2a239a398 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a239a370 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a239a348 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a239a320 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a239a2a8 @suits=:hearts, @ranks=10, @card_numbers=13.5, @card_colors=2>, #<Card:0x007fc2a239a280 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a239a118 @suits=:hearts, @ranks=8, @card_numbers=8, @card_colors=2>, #<Card:0x007fc2a239a0c8 @suits=:hearts, @ranks=7, @card_numbers=7, @card_colors=2>, #<Card:0x007fc2a2399f10 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a2399ee8 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a2399ec0 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a2399e98 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a2399e70 @suits=:diamonds, @ranks=10, @card_numbers=13.5, @card_colors=3>, #<Card:0x007fc2a2399e48 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a2399e20 @suits=:diamonds, @ranks=8, @card_numbers=8, @card_colors=3>, #<Card:0x007fc2a2399df8 @suits=:diamonds, @ranks=7, @card_numbers=7, @card_colors=3>, #<Card:0x007fc2a2399c18 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a2399bf0 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a2399ba0 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a2399ab0 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a2399a88 @suits=:clubs, @ranks=10, @card_numbers=13.5, @card_colors=4>, #<Card:0x007fc2a2399a60 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a2399a38 @suits=:clubs, @ranks=8, @card_numbers=8, @card_colors=4>, #<Card:0x007fc2a2399a10 @suits=:clubs, @ranks=7, @card_numbers=7, @card_colors=4>]
     Shared Example Group: "a deck" called from /tmp/d20151112-27349-1nj4yru/spec.rb:191
     # /tmp/d20151112-27349-1nj4yru/spec.rb:18:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  7) BeloteDeck behaves like a deck #to_s returns the names of the cards, each on its own line
     Failure/Error: expect(small_deck.to_s.strip).to eq "Ace of Spades\n9 of Clubs"
     NoMethodError:
       undefined method `strip' for nil:NilClass
     Shared Example Group: "a deck" called from /tmp/d20151112-27349-1nj4yru/spec.rb:191
     # /tmp/d20151112-27349-1nj4yru/spec.rb:68:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  8) BeloteDeck hand #highest_of_suit returns the strongest card of the specified suit
     Failure/Error: expect(hand.highest_of_suit(:clubs)).to eq Card.new(:ace, :clubs)
     NoMethodError:
       undefined method `highest_of_suit' for #<Array:0x007fc2a22881d0>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:232:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  9) BeloteDeck hand #belote? returns true if there is a king and a queen of the same suit
     Failure/Error: expect(hand.belote?).to be true
     NoMethodError:
       undefined method `belote?' for #<Array:0x007fc2a2278230>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:251:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  10) BeloteDeck hand #belote? returns false when there is no king and queen of the same suit
     Failure/Error: expect(hand.belote?).to be false
     NoMethodError:
       undefined method `belote?' for #<Array:0x007fc2a225f820>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:266:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  11) BeloteDeck hand #tierce? with tierce returns true for cards with names
     Failure/Error: expect(hand.tierce?).to be true
     NoMethodError:
       undefined method `tierce?' for #<Array:0x007fc2a225c918>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:284:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  12) BeloteDeck hand #tierce? with tierce returns true for cards with numbers
     Failure/Error: expect(hand.tierce?).to be true
     NoMethodError:
       undefined method `tierce?' for #<Array:0x007fc2a224dbe8>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:299:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  13) BeloteDeck hand #tierce? without tierce does not confuse cards with different suits
     Failure/Error: expect(hand.tierce?).to be false
     NoMethodError:
       undefined method `tierce?' for #<Array:0x007fc2a223e120>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:316:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  14) BeloteDeck hand #quarte? detects four cards with increasing ranks
     Failure/Error: expect(hand.quarte?).to be true
     NoMethodError:
       undefined method `quarte?' for #<Array:0x007fc2a222cec0>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:334:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  15) BeloteDeck hand #quarte? does not return true if there is no quarte
     Failure/Error: expect(hand.quarte?).to be false
     NoMethodError:
       undefined method `quarte?' for #<Array:0x007fc2a221e6e0>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:349:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  16) BeloteDeck hand #quint? detects five cards with increasing ranks
     Failure/Error: expect(hand.quint?).to be true
     NoMethodError:
       undefined method `quint?' for #<Array:0x007fc2a2211e90>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:366:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  17) BeloteDeck hand #quint? does not return true if there is no quint
     Failure/Error: expect(hand.quint?).to be false
     NoMethodError:
       undefined method `quint?' for #<Array:0x007fc2a2202df0>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:381:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  18) BeloteDeck hand #carre_of_jacks? behaves like carre-checking method returns true when there is a carre
     Failure/Error: expect(hand.public_send(method)).to be true
     NoMethodError:
       undefined method `carre_of_jacks?' for #<Array:0x007fc2a2200078>
     Shared Example Group: "carre-checking method" called from /tmp/d20151112-27349-1nj4yru/spec.rb:386
     # /tmp/d20151112-27349-1nj4yru/spec.rb:86:in `public_send'
     # /tmp/d20151112-27349-1nj4yru/spec.rb:86:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  19) BeloteDeck hand #carre_of_jacks? behaves like carre-checking method returns false when there is no carre
     Failure/Error: expect(hand.public_send(method)).to be false
     NoMethodError:
       undefined method `carre_of_jacks?' for #<Array:0x007fc2a21f1230>
     Shared Example Group: "carre-checking method" called from /tmp/d20151112-27349-1nj4yru/spec.rb:386
     # /tmp/d20151112-27349-1nj4yru/spec.rb:101:in `public_send'
     # /tmp/d20151112-27349-1nj4yru/spec.rb:101:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  20) BeloteDeck hand #carre_of_nines? behaves like carre-checking method returns true when there is a carre
     Failure/Error: expect(hand.public_send(method)).to be true
     NoMethodError:
       undefined method `carre_of_nines?' for #<Array:0x007fc2a21e5d40>
     Shared Example Group: "carre-checking method" called from /tmp/d20151112-27349-1nj4yru/spec.rb:390
     # /tmp/d20151112-27349-1nj4yru/spec.rb:86:in `public_send'
     # /tmp/d20151112-27349-1nj4yru/spec.rb:86:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  21) BeloteDeck hand #carre_of_nines? behaves like carre-checking method returns false when there is no carre
     Failure/Error: expect(hand.public_send(method)).to be false
     NoMethodError:
       undefined method `carre_of_nines?' for #<Array:0x007fc2a21dfb20>
     Shared Example Group: "carre-checking method" called from /tmp/d20151112-27349-1nj4yru/spec.rb:390
     # /tmp/d20151112-27349-1nj4yru/spec.rb:101:in `public_send'
     # /tmp/d20151112-27349-1nj4yru/spec.rb:101:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  22) BeloteDeck hand #carre_of_aces? behaves like carre-checking method returns true when there is a carre
     Failure/Error: expect(hand.public_send(method)).to be true
     NoMethodError:
       undefined method `carre_of_aces?' for #<Array:0x007fc2a21dd4b0>
     Shared Example Group: "carre-checking method" called from /tmp/d20151112-27349-1nj4yru/spec.rb:394
     # /tmp/d20151112-27349-1nj4yru/spec.rb:86:in `public_send'
     # /tmp/d20151112-27349-1nj4yru/spec.rb:86:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  23) BeloteDeck hand #carre_of_aces? behaves like carre-checking method returns false when there is no carre
     Failure/Error: expect(hand.public_send(method)).to be false
     NoMethodError:
       undefined method `carre_of_aces?' for #<Array:0x007fc2a21c6058>
     Shared Example Group: "carre-checking method" called from /tmp/d20151112-27349-1nj4yru/spec.rb:394
     # /tmp/d20151112-27349-1nj4yru/spec.rb:101:in `public_send'
     # /tmp/d20151112-27349-1nj4yru/spec.rb:101:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  24) SixtySixDeck behaves like a deck fills the deck if no initialize parameters are given
     Failure/Error: expect(deck.to_a).to match_array all_available_cards
       expected collection contained:  [#<Card:0x007fc2a217e7f8 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a217e7a8 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a217e780 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a217e758 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a217e730 @suits=:clubs, @ranks=10, @card_numbers=10, @card_colors=4>, #<Card:0x007fc2a217e708 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a217e6e0 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a217e6b8 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a217e690 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a217e668 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a217e640 @suits=:diamonds, @ranks=10, @card_numbers=10, @card_colors=3>, #<Card:0x007fc2a217e618 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a217e5f0 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a217e5c8 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a217e5a0 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a217e578 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a217e550 @suits=:hearts, @ranks=10, @card_numbers=10, @card_colors=2>, #<Card:0x007fc2a217e528 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a217e500 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a217e4d8 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a217e4b0 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a217e488 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a217e460 @suits=:spades, @ranks=10, @card_numbers=10, @card_colors=1>, #<Card:0x007fc2a217e438 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>]
       actual collection contained:    [#<Card:0x007fc2a217fa40 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>, #<Card:0x007fc2a217fa18 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a217f9f0 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a217f9c8 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a217f9a0 @suits=:spades, @ranks=10, @card_numbers=13.5, @card_colors=1>, #<Card:0x007fc2a217f978 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a217f7e8 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a217f7c0 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a217f798 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a217f770 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a217f748 @suits=:hearts, @ranks=10, @card_numbers=13.5, @card_colors=2>, #<Card:0x007fc2a217f6d0 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a217f4c8 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a217f4a0 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a217f400 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a217f3b0 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a217f388 @suits=:diamonds, @ranks=10, @card_numbers=13.5, @card_colors=3>, #<Card:0x007fc2a217f310 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a217f018 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a217ef78 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a217ef50 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a217ef28 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a217ef00 @suits=:clubs, @ranks=10, @card_numbers=13.5, @card_colors=4>, #<Card:0x007fc2a217eeb0 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>]
       the missing elements were:      [#<Card:0x007fc2a217e7f8 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>, #<Card:0x007fc2a217e7a8 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a217e780 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a217e758 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a217e730 @suits=:clubs, @ranks=10, @card_numbers=10, @card_colors=4>, #<Card:0x007fc2a217e708 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a217e6e0 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a217e6b8 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a217e690 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a217e668 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a217e640 @suits=:diamonds, @ranks=10, @card_numbers=10, @card_colors=3>, #<Card:0x007fc2a217e618 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a217e5f0 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a217e5c8 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a217e5a0 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a217e578 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a217e550 @suits=:hearts, @ranks=10, @card_numbers=10, @card_colors=2>, #<Card:0x007fc2a217e528 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a217e500 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a217e4d8 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a217e4b0 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a217e488 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a217e460 @suits=:spades, @ranks=10, @card_numbers=10, @card_colors=1>, #<Card:0x007fc2a217e438 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>]
       the extra elements were:        [#<Card:0x007fc2a217fa40 @suits=:spades, @ranks=:ace, @card_numbers=14, @card_colors=1>, #<Card:0x007fc2a217fa18 @suits=:spades, @ranks=:king, @card_numbers=13, @card_colors=1>, #<Card:0x007fc2a217f9f0 @suits=:spades, @ranks=:queen, @card_numbers=12, @card_colors=1>, #<Card:0x007fc2a217f9c8 @suits=:spades, @ranks=:jack, @card_numbers=11, @card_colors=1>, #<Card:0x007fc2a217f9a0 @suits=:spades, @ranks=10, @card_numbers=13.5, @card_colors=1>, #<Card:0x007fc2a217f978 @suits=:spades, @ranks=9, @card_numbers=9, @card_colors=1>, #<Card:0x007fc2a217f7e8 @suits=:hearts, @ranks=:ace, @card_numbers=14, @card_colors=2>, #<Card:0x007fc2a217f7c0 @suits=:hearts, @ranks=:king, @card_numbers=13, @card_colors=2>, #<Card:0x007fc2a217f798 @suits=:hearts, @ranks=:queen, @card_numbers=12, @card_colors=2>, #<Card:0x007fc2a217f770 @suits=:hearts, @ranks=:jack, @card_numbers=11, @card_colors=2>, #<Card:0x007fc2a217f748 @suits=:hearts, @ranks=10, @card_numbers=13.5, @card_colors=2>, #<Card:0x007fc2a217f6d0 @suits=:hearts, @ranks=9, @card_numbers=9, @card_colors=2>, #<Card:0x007fc2a217f4c8 @suits=:diamonds, @ranks=:ace, @card_numbers=14, @card_colors=3>, #<Card:0x007fc2a217f4a0 @suits=:diamonds, @ranks=:king, @card_numbers=13, @card_colors=3>, #<Card:0x007fc2a217f400 @suits=:diamonds, @ranks=:queen, @card_numbers=12, @card_colors=3>, #<Card:0x007fc2a217f3b0 @suits=:diamonds, @ranks=:jack, @card_numbers=11, @card_colors=3>, #<Card:0x007fc2a217f388 @suits=:diamonds, @ranks=10, @card_numbers=13.5, @card_colors=3>, #<Card:0x007fc2a217f310 @suits=:diamonds, @ranks=9, @card_numbers=9, @card_colors=3>, #<Card:0x007fc2a217f018 @suits=:clubs, @ranks=:ace, @card_numbers=14, @card_colors=4>, #<Card:0x007fc2a217ef78 @suits=:clubs, @ranks=:king, @card_numbers=13, @card_colors=4>, #<Card:0x007fc2a217ef50 @suits=:clubs, @ranks=:queen, @card_numbers=12, @card_colors=4>, #<Card:0x007fc2a217ef28 @suits=:clubs, @ranks=:jack, @card_numbers=11, @card_colors=4>, #<Card:0x007fc2a217ef00 @suits=:clubs, @ranks=10, @card_numbers=13.5, @card_colors=4>, #<Card:0x007fc2a217eeb0 @suits=:clubs, @ranks=9, @card_numbers=9, @card_colors=4>]
     Shared Example Group: "a deck" called from /tmp/d20151112-27349-1nj4yru/spec.rb:400
     # /tmp/d20151112-27349-1nj4yru/spec.rb:18:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  25) SixtySixDeck behaves like a deck #to_s returns the names of the cards, each on its own line
     Failure/Error: expect(small_deck.to_s.strip).to eq "Ace of Spades\n9 of Clubs"
     NoMethodError:
       undefined method `strip' for nil:NilClass
     Shared Example Group: "a deck" called from /tmp/d20151112-27349-1nj4yru/spec.rb:400
     # /tmp/d20151112-27349-1nj4yru/spec.rb:68:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  26) SixtySixDeck hand #twenty? returns true for king and queen not of the trump suit
     Failure/Error: expect(hand.twenty?(:hearts)).to be true
     NoMethodError:
       undefined method `twenty?' for #<Array:0x007fc2a1eac548>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:439:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  27) SixtySixDeck hand #twenty? returns false for king and queen of the trump suit
     Failure/Error: expect(hand.twenty?(:clubs)).to be false
     NoMethodError:
       undefined method `twenty?' for #<Array:0x007fc2a1e827e8>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:452:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  28) SixtySixDeck hand #twenty? returns false for hands without a king and queen of the same suit
     Failure/Error: expect(hand.twenty?(:hearts)).to be false
     NoMethodError:
       undefined method `twenty?' for #<Array:0x007fc2a1e724b0>
     # /tmp/d20151112-27349-1nj4yru/spec.rb:465:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.05052 seconds
57 examples, 28 failures

Failed examples:

rspec /tmp/d20151112-27349-1nj4yru/spec.rb:130 # Card #== compares two cards by their rank and suit
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:14 # WarDeck behaves like a deck fills the deck if no initialize parameters are given
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:67 # WarDeck behaves like a deck #to_s returns the names of the cards, each on its own line
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:171 # WarDeck hand #allow_face_up? returns false if the cards are more than 3
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:175 # WarDeck hand #allow_face_up? returns true if the cards are less than or equal to 3
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:14 # BeloteDeck behaves like a deck fills the deck if no initialize parameters are given
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:67 # BeloteDeck behaves like a deck #to_s returns the names of the cards, each on its own line
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:220 # BeloteDeck hand #highest_of_suit returns the strongest card of the specified suit
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:239 # BeloteDeck hand #belote? returns true if there is a king and a queen of the same suit
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:254 # BeloteDeck hand #belote? returns false when there is no king and queen of the same suit
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:272 # BeloteDeck hand #tierce? with tierce returns true for cards with names
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:287 # BeloteDeck hand #tierce? with tierce returns true for cards with numbers
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:304 # BeloteDeck hand #tierce? without tierce does not confuse cards with different suits
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:322 # BeloteDeck hand #quarte? detects four cards with increasing ranks
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:337 # BeloteDeck hand #quarte? does not return true if there is no quarte
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:354 # BeloteDeck hand #quint? detects five cards with increasing ranks
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:369 # BeloteDeck hand #quint? does not return true if there is no quint
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:74 # BeloteDeck hand #carre_of_jacks? behaves like carre-checking method returns true when there is a carre
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:89 # BeloteDeck hand #carre_of_jacks? behaves like carre-checking method returns false when there is no carre
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:74 # BeloteDeck hand #carre_of_nines? behaves like carre-checking method returns true when there is a carre
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:89 # BeloteDeck hand #carre_of_nines? behaves like carre-checking method returns false when there is no carre
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:74 # BeloteDeck hand #carre_of_aces? behaves like carre-checking method returns true when there is a carre
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:89 # BeloteDeck hand #carre_of_aces? behaves like carre-checking method returns false when there is no carre
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:14 # SixtySixDeck behaves like a deck fills the deck if no initialize parameters are given
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:67 # SixtySixDeck behaves like a deck #to_s returns the names of the cards, each on its own line
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:429 # SixtySixDeck hand #twenty? returns true for king and queen not of the trump suit
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:442 # SixtySixDeck hand #twenty? returns false for king and queen of the trump suit
rspec /tmp/d20151112-27349-1nj4yru/spec.rb:455 # SixtySixDeck hand #twenty? returns false for hands without a king and queen of the same suit

История (1 версия и 1 коментар)

Георги обнови решението на 10.11.2015 13:42 (преди над 8 години)

+class Card
+
+ def initialize(rank = 0, suit = 0)
+ @suits = suit
+ @ranks = rank
+ set_number
+ set_color
+ end
+
+ def set_number
+ case @ranks
+ when 2..10 then @card_numbers = @ranks
+ when :jack then @card_numbers = 11
+ when :queen then @card_numbers = 12
+ when :king then @card_numbers = 13
+ when :ace then @card_numbers = 14
+ else @card_numbers = 1
+ end
+ end
+
+ def set_number_ten(game)
+ case game
+ when :belote, :sixty then @card_numbers = 13.5
+ else @card_numbers = 10
+ end
+ end
+
+ def set_color
+ case @suits
+ when :spades then @card_colors = 1
+ when :hearts then @card_colors = 2
+ when :diamonds then @card_colors = 3
+ when :clubs then @card_colors = 4
+ else @card_colors = 0
+ end
+ end
+
+ def rank
+ @ranks
+ end
+
+ def suit
+ @suits
+ end
+
+ def number
+ @card_numbers
+ end
+
+ def color
+ @card_colors
+ end
+
+ def to_s
+ if convert_rank(@ranks) and convert_suit(@suits)
+ "#{convert_rank(@ranks)}#{convert_suit(@suits)}"
+ else
+ 'Joker!'
+ end
+ end
+
+ def convert_rank(rank)
+ case rank
+ when :jack then 'Jack of '
+ when :queen then 'Queen of '
+ when :king then 'King of '
+ when :ace then 'Ace of '
+ when 2..10 then "#{rank} of "
+ else nil
+ end
+ end
+
+ def convert_suit(suit)
+ case suit
+ when :spades then 'Spades'
+ when :hearts then 'Hearts'
+ when :diamonds then 'Diamonds'
+ when :clubs then 'Clubs'
+ else nil
+ end
+ end
+
+end
+
+class Deck < Card
+ include Enumerable
+
+ def initialize(cards = all_cards)
+ @cards = cards
+ end
+
+ def each
+ number = 0
+ while number < size
+ yield @cards[number]
+ number += 1
+ end
+ end
+
+ def all_cards
+ ranks = [:ace, :king, :queen, :jack, 10, 9, 8, 7, 6, 5, 4, 3, 2]
+ suits, new_cards = [:spades, :hearts, :diamonds, :clubs], []
+ suits.each do |suit|
+ ranks.each do |rank|
+ new_cards.push(Card.new(rank, suit))
+ end
+ end
+ new_cards
+ end
+
+ def size
+ @cards.size
+ end
+
+ def top_card
+ @cards.first
+ end
+
+ def bottom_card
+ @cards.last
+ end
+
+ def draw_top_card
+ @cards.shift
+ end
+
+ def draw_bottom_card
+ @cards.pop
+ end
+
+ def shuffle
+ @cards.shuffle!
+ end
+
+ def sort
+ @cards = @cards.sort_by { |card| [card.color, - card.number] }
+ end
+
+ def deal
+ hand = []
+ hand_size = 26
+ number = 0
+ while number < hand_size
+ hand.push(draw_top_card)
+ number += 1
+ end
+ hand
+ end
+
+ def to_s
+ puts @cards
+ end
+
+ def find(suit)
+ first_card = Card.new(:king, suit)
+ second_card = Card.new(:queen, suit)
+ if @cards.include?(first_card) and @cards.include?(second_card)
+ true
+ else
+ false
+ end
+ end
+end
+
+class WarDeck < Deck
+
+ def play_card
+ shuffle
+ draw_top_card.to_s
+ end
+
+ def allow_face_up?
+ if size <= 3
+ true
+ else
+ false
+ end
+ end
+end
+
+class BeloteDeck < Deck
+
+ def initialize(cards = all_cards_belote)
+ @cards = cards
+ end
+
+ def belote_card?(card_given)
+ case card_given.rank
+ when :jack, :queen, :king, :ace then true
+ when 7, 8, 9, 10 then true
+ else false
+ end
+ end
+
+ def all_cards_belote
+ unopened_deck = all_cards
+ opened_deck = []
+ unopened_deck.each { |card| opened_deck.push(card) if belote_card?(card) }
+ opened_deck.each { |card| card.set_number_ten(:belote) if card.rank == 10 }
+ opened_deck
+ end
+
+ def deal
+ hand = []
+ hand_size = 8
+ number = 0
+ while number < hand_size
+ hand.push(@cards.shift)
+ number += 1
+ end
+ @cards = hand
+ end
+
+ def highest_of_suit(suit)
+ sort
+ high_card = Card.new(0, 0)
+ @cards.each do |card|
+ high_card = card if card.suit == suit
+ break
+ end
+ high_card
+ end
+
+ def belote?
+ find(:spades) or find(:hearts) or find(:diamonds) or find(:clubs)
+ end
+
+ def check_cards(number)
+ count, counter = number, 0
+ while count
+ count -= 1 if @cards[counter] == @cards[counter + 1]
+ count = number if @cards[counter] != @cards[counter + 1]
+ end
+ true if count == 0
+ false if count != 0
+ end
+
+ def tierce?
+ check_cards(3)
+ end
+
+ def quarte?
+ check_cards(4)
+ end
+
+ def quint?
+ check_cards(5)
+ end
+
+ def carre_of(suit)
+ count = 0
+ @cards.each { |card| count += 1 if card.rank == suit }
+ if count == 4
+ true
+ else
+ false
+ end
+ end
+
+ def carre_of_jacks?
+ carre_of(:jack)
+ end
+
+ def carre_of_nines?
+ carre_of(9)
+ end
+
+ def carre_of_aces?
+ carre_of(:ace)
+ end
+end
+
+class SixtySixDeck < Deck
+ def initialize(cards = all_cards_sixty)
+ @cards = cards
+ end
+
+ def sixty_card?(card_given)
+ case card_given.rank
+ when :jack, :queen, :king, :ace then true
+ when 9, 10 then true
+ else false
+ end
+ end
+
+ def all_cards_sixty
+ unopened_deck = all_cards
+ opened_deck = []
+ unopened_deck.each { |card| opened_deck.push(card) if sixty_card?(card) }
+ opened_deck.each { |card| card.set_number_ten(:sixty) if card.rank == 10 }
+ opened_deck
+ end
+
+ def deal
+ hand = []
+ hand_size = 6
+ number = 0
+ while number < hand_size
+ hand.push(@cards.shift)
+ number += 1
+ end
+ @cards = hand
+ end
+
+ def forty?(trump_suit)
+ find(trump_suit)
+ end
+
+ def twenty?(trump_suit)
+ case trump_suit
+ when :spades then find(:hearts) or find(:diamonds) or find(:clubs)
+ when :hearts then find(:spades) or find(:diamonds) or find(:clubs)
+ when :diamonds then find(:hearts) or find(:spades) or find(:clubs)
+ when :clubs then find(:hearts) or find(:diamonds) or find(:spades)
+ else nil
+ end
+ end
+end