#!/usr/bin/env ruby class Card attr_reader :rank, :suit def initialize(str) r = str[0,1].downcase s = str[1,1].downcase @suit = case s when 's' then :spades when 'h' then :hearts when 'd' then :diamonds when 'c' then :clubs end @rank = case r when '2'..'9' then r.to_i when 't' then 10 when 'j' then 11 when 'q' then 12 when 'k' then 13 when 'a' then 14 end end def to_s rank_s + " of " + suit_s end def rank_s case @rank when 2 then "two" when 3 then "three" when 4 then "four" when 5 then "five" when 6 then "six" when 7 then "seven" when 8 then "eight" when 9 then "nine" when 10 then "ten" when 11 then "jack" when 12 then "queen" when 13 then "king" when 14 then "ace" end end def suit_s @suit.to_s end def ==(other) @rank == other.rank && @suit == other.suit end def <=>(other) if @rank != other.rank @rank <=> other.rank else # order is Spades, Hearts, Diamonds, Clubs (conveniently reverse alphabetical) other.suit_s <=> suit_s end end def eql?(other) self == other end def hash to_s.hash end end