From: Nathan Morse <nathan@nathanmorse.com>
Date: November 20, 2005 5:03:27 PM CST
To: submission@rubyquiz.com
Subject: Please Forward: Ruby Quiz SubmissionRuby Quiz: Euchre Hands (#55) [SOLUTION]
Hi James,
This is my first shot at solving the Ruby Quiz and I found it quite entertaining. Please forward my solution to the Ruby Talk mailing list as I am having trouble subscribing myself.
Thanks!
-Nathan
-------------------------------------------------------------------------------
#!/usr/local/bin/rubyclass EuchreHand
attr_reader :trump, :cards
def initialize(trump, *cards)
@trump = trump
@cards = cards.inject() do |result, card|
card = Card.new(trump, card)
result.push(card)
end
endend
class Card
include Comparable
attr_reader :trump, :card
@@sort_order_lookup = nil
def initialize(trump, card)
initialize_sort_order_lookup
@trump, @card = trump, card
end
def initialize_sort_order_lookup
if (@@sort_order_lookup.nil?)
@@sort_order_lookup = {}
suits = %w[h c d s]
# build the lookup hash that will store the sort order for all possible trumps
%w[Hearts Clubs Diamonds Spades].each do |suit_name|#counter maintains the sort order of each card for the current trump
counter = 0
@@sort_order_lookup[suit_name] = {}
faces = %w[9 T J Q K A]
# index each 'regular' card
3.downto(0) do |suit_index|
faces.each do |face|
@@sort_order_lookup[suit_name]["#{face}#{suits[suit_index]}"] = counter
counter += 1
end
end
# reindex the left bower
@@sort_order_lookup[suit_name]["J#{suits[2]}"] = counter
counter += 1
# reindex the right bower
@@sort_order_lookup[suit_name]["J#{suits[0]}"] = counter
#shift the array of suits by 1
suits = suits[1..3].push(suits[0])
end
end
enddef <=>(other)
@@sort_order_lookup[self.trump][self.card] <=>
@@sort_order_lookup[other.trump][other.card]
enddef to_s
@card
endend
# parse the input
$input = (1..6).inject() { |result, line| result.push(STDIN.readline.chomp) }
$euchre_hand = EuchreHand.new(*$input)# display our result
puts $euchre_hand.trump
$euchre_hand.cards.sort.reverse.each { |card| puts card }
ยทยทยท
Begin forwarded message: