Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > [SOLUTION] Euchre Hands (#55)

Reply
Thread Tools

[SOLUTION] Euchre Hands (#55)

 
 
Warren Brown
Guest
Posts: n/a
 
      11-21-2005
All,

This quiz looked so simple I just couldn't resist putting in the
short amount of time needed to solve it. Also, I love to play Euchre.

I see other solutions trying very hard to make sure that two suits
of the same color do not appear next to each other. As a Euchre player,
I would be quite upset if the order of the suits changed during play.
For example, if hearts were trump, and the hand is (9h 9s 9d 9c Tc), and
the 9s is played, the hand should stay (9h 9d 9c Tc), not be reordered
to (9h 9c Tc 9d). I tend to always keep my suits in the same order (s h
c d) and simply rotate the order so that the trump suit is first (e.g.
(c d s h) if clubs are trump).

I also made sure the routine works with fewer (or more) than five
cards since cards are actually played from the hand during a game.


----------------------------------------------------------------
# Constants
RANKS =3D 'AKQJT9'
SUITS =3D 'SHCD'
=20
def euchre_sort(cards)
# Split out trump
trump =3D cards.shift

# Quick and dirty validation
trump_index =3D SUITS.index(trump[0,1].upcase)
unless trump_index
puts "Invalid trump (#{trump})."
exit
end
cards.each do |card|
if card !~ /^[#{RANKS}][#{SUITS}]$/i
puts "Invalid card (#{card})."
exit
end
end

# Return sorted hand
right_bower =3D "J#{SUITS[trump_index,1]}"
left_bower =3D "J#{SUITS[trump_index - 2,1]}"
[trump] +
cards.sort_by do |card|
upcase_card =3D card.upcase
case upcase_card
when right_bower then -2
when left_bower then -1
else RANKS.index(upcase_card[0,1]) +
10 * ((SUITS.index(upcase_card[1,1]) - trump_index) % 4)
end
end
end

puts euchre_sort(STDIN.read.split)
----------------------------------------------------------------


This solution (minus error handling) is also very amenable to
golfing at 187 characters:

R=3D'AKQJT9';S=3D'shcd';i=3D$<.read.split;t=3Di.sh ift;x=3DS.index(t[0,1]
downcase);r=3D"J#{S[x,1]}";l=3D"J#{S[x-2,1]}";puts(t,i.sort_by{|c|
c=3D=3Dr ?-2:c=3D=3Dl ?-1:R.index(c[0,1])+10*((S.index(c[1,1])-x)%4)})


- Warren Brown



 
Reply With Quote
 
 
 
 
Rube
Guest
Posts: n/a
 
      11-21-2005
That is a clever way to sort by suit (trump first), but what happens
when trump is spades and your hand consists of spades, clubs, and
diamonds. Won't your program return spades next to clubs, instead of
alternating spades, diamonds, clubs?

 
Reply With Quote
 
 
 
 
James Edward Gray II
Guest
Posts: n/a
 
      11-23-2005
On Nov 21, 2005, at 2:00 AM, Warren Brown wrote:

> I see other solutions trying very hard to make sure that two suits
> of the same color do not appear next to each other. As a Euchre
> player,
> I would be quite upset if the order of the suits changed during play.


Hold on there Tiger... I didn't say anything about changing the suit
order. We're only working with the initial sort here.

I believe a "correct" implementation caches the initial suit order
for each player and holds that until the hand is played out (even if
black/red suits eventually touch). Note that you will have to order
the hand twice though, once after the deal and once after Trump is
chosen.

Of course, this is all just *MY* opinion of right. We've already
heard of several others. This quiz just isn't about those...

James Edward Gray II



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[SUMMARY] Euchre Hands (#55) Ruby Quiz Ruby 2 11-24-2005 04:01 PM
[QUIZ SOLUTION] Euchre Hands (#55) Robin Stocker Ruby 26 11-23-2005 06:29 AM
[QUIZ SOLUTION] Euchre Hands (#55) Daniel Sheppard Ruby 0 11-21-2005 06:55 AM
[QUIZ] Euchre Hands (#55) Ruby Quiz Ruby 5 11-21-2005 02:23 AM
MSN Euchre through router? Suenet Computer Support 0 11-04-2005 02:46 PM



Advertisments