And one last time, to account for hands that don't have one of the opposite coloured suites - that's what I get for steadfastly avoiding looking at the quiz discussion until after I think I'm done. class Card attr_reader :suite, :value def initialize(string) @value = string[0..-2].upcase @suite = string[-1..-1].downcase end def to_i %w{9 T J Q K A}.index(@value) end def to_s @value + @suite end end class EuchreHand def initialize(trump, cards) @trump_string = trump @trump = trump[0..0].downcase @cards = cards same, opposite = [['h','d'],['c','s']].partition {|x| x.include?(@trump)} @same = same.flatten.reject{|s| s == @trump}[0] opposite = opposite.flatten.select {|s| cards.any?{|c| c.suite == s}} @suite_order = [@trump, @same].zip(opposite).flatten end def to_s ([@trump_string] +sorted_cards).join("\n") end def sorted_cards @cards.sort_by {|c| sort_value(c)} end private #there are 6 sections of the sort: jack1, jack2, trump, opp1, same, opp2 def sort_value(card) return [0] if card.value == 'J' && card.suite == @trump return [1] if card.value == 'J' && card.suite == @same return [2+@suite_order.index(card.suite),-card.to_i] end end cards = ARGF.readlines #~ cards = %w{Diamonds Ah Jd Jh Kc 9c} puts EuchreHand.new(cards.shift, cards.map {|s| Card.new(s)}) ##################################################################################### This email has been scanned by MailMarshal, an email content filter. #####################################################################################