diff options
author | elioat <elioat@tilde.institute> | 2023-08-23 07:52:19 -0400 |
---|---|---|
committer | elioat <elioat@tilde.institute> | 2023-08-23 07:52:19 -0400 |
commit | 562a9a52d599d9a05f871404050968a5fd282640 (patch) | |
tree | 7d3305c1252c043bfe246ccc7deff0056aa6b5ab /js/games/nluqo.github.io/~bh/ssch15/poker.html | |
parent | 5d012c6c011a9dedf7d0a098e456206244eb5a0f (diff) | |
download | tour-562a9a52d599d9a05f871404050968a5fd282640.tar.gz |
*
Diffstat (limited to 'js/games/nluqo.github.io/~bh/ssch15/poker.html')
-rw-r--r-- | js/games/nluqo.github.io/~bh/ssch15/poker.html | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/js/games/nluqo.github.io/~bh/ssch15/poker.html b/js/games/nluqo.github.io/~bh/ssch15/poker.html new file mode 100644 index 0000000..828626a --- /dev/null +++ b/js/games/nluqo.github.io/~bh/ssch15/poker.html @@ -0,0 +1,142 @@ +<P> + +<P><HTML> +<HEAD> +<TITLE>Simply Scheme:Project: Scoring Poker Hands</TITLE> +</HEAD> +<BODY> +<CITE>Simply Scheme</CITE>: +<CITE>Introducing Computer Science</CITE> 2/e Copyright (C) 1999 MIT +<H1>Project: Scoring Poker Hands</H1> + +<TABLE width="100%"><TR><TD> +<IMG SRC="../simply.jpg" ALT="cover photo"> +<TD><TABLE> +<TR><TD align="right"><CITE><A HREF="http://www.cs.berkeley.edu/~bh/">Brian +Harvey</A><BR>University of California, Berkeley</CITE> +<TR><TD align="right"><CITE><A HREF="http://ccrma.stanford.edu/~matt">Matthew +Wright</A><BR>University of California, Santa Barbara</CITE> +<TR><TD align="right"><BR> +<TR><TD align="right"><A HREF="../pdf/ssch15.pdf">Download PDF version</A> +<TR><TD align="right"><A HREF="../ss-toc2.html">Back to Table of Contents</A> +<TR><TD align="right"><A HREF="adv-recur.html"><STRONG>BACK</STRONG></A> +chapter thread <A HREF="../ssch16/match.html"><STRONG>NEXT</STRONG></A> +<TR><TD align="right"><A HREF="http://mitpress.mit.edu/0262082810">MIT +Press web page for <CITE>Simply Scheme</CITE></A> +</TABLE></TABLE> + +<HR> + +<P>The idea of this project is to invent a procedure <CODE>poker-value</CODE> +that works like this: + +<P><PRE>> (<A NAME="g19"></A>poker-value '(h4 s4 c6 s6 c4)) +(FULL HOUSE - FOURS OVER SIXES) + +> (poker-value '(h7 s3 c5 c4 d6)) +(SEVEN-HIGH STRAIGHT) + +> (poker-value '(dq d10 dj da dk)) +(ROYAL FLUSH - DIAMONDS) + +> (poker-value '(da d6 d3 c9 h6)) +(PAIR OF SIXES) +</PRE> + +<P>As you can see, we are representing cards and hands just as in the +Bridge project, except that poker hands have only five +cards.<A NAME="text1" HREF="poker.html#ft1">[1]</A> + +<P>Here are the various kinds of poker hands, in decreasing order of value: + +<P><P><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Royal flush: ten, jack, queen, king, and ace, all of the same suit +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Straight flush: five cards of sequential rank, all of the same suit +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Four of a kind: four cards of the same rank +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Full house: three cards of the same rank, and two of a second rank +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Flush: five cards of the same suit, not sequential rank +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Straight: five cards of sequential rank, not all of the same suit +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Three of a kind: three cards of the same rank, no other matches +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Two pair: two pairs of cards, of two different ranks +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Pair: two cards of the same rank, no other matches +</TABLE><TABLE><TR><TH align="right" valign="top">•<TD> <TD valign="top">Nothing: none of the above + +</TABLE> +<P> +An ace can be the lowest card of a straight (ace, 2, 3, 4, 5) or +the highest card of a straight (ten, jack, queen, king, ace), but a straight +can't "wrap around"; a hand with queen, king, ace, 2, 3 would be worthless +(unless it's a flush). + +<P>Notice that most of the hand categories are either entirely about the ranks +of the cards (pairs, straight, full house, etc.) or entirely about the +suits (flush). It's a good idea to begin your program by separating the +rank information and the suit information. To check for a straight flush or +royal flush, you'll have to consider both kinds of information. + +<P>In what form do you want the suit information? Really, all you need is a +true or false value indicating whether or not the hand is a flush, because +there aren't any poker categories like "three of one suit and two of +another." + +<P>What about ranks? There are two kinds of hand categories involving ranks: +the ones about equal ranks (pairs, full house) and the ones about sequential +ranks (straight). You might therefore want the rank information in two +forms. A sentence containing all of the ranks in the hand, in sorted order, +will make it easier to find a straight. (You still have to be careful about +aces.) + +<P>For the equal-rank categories, what you want is some data structure that +will let you ask questions like "are there three cards of the same rank +in this hand?" We ended up using a representation like this: + +<P><PRE>> (compute-ranks '(q 3 4 3 4)) +(ONE Q TWO 3 TWO 4) +</PRE> + +<P>One slightly tricky aspect of this solution is that we spelled +out the numbers of cards, <CODE>one</CODE> to <CODE>four</CODE>, instead of using the more +obvious <CODE>(1 Q 2 3 2 4)</CODE>. The reason, as you can probably tell just by +looking at the latter version, is that it would lead to confusion between +the names of the ranks, most of which are digits, and the numbers of +occurrences, which are also digits. More specifically, by spelling out the +numbers of occurrences, we can use <CODE>member?</CODE> to ask easily if there is +a three-of-a-kind rank in the hand. + +<P>You may find it easier to begin by writing a version that returns only the +name of a category, such as <CODE>three of a kind</CODE>, and only after you get +that to work, revise it to give more specific results such as <CODE>three +sixes</CODE>. + +<P><H2>Extra Work for Hotshots</H2> + +<P>In some versions of poker, each player gets seven cards and can choose any +five of the seven to make a hand. How would it change your program if the +argument were a sentence of seven cards? (For example, in five-card poker +there is only one possible category for a hand, but in seven-card you have +to pick the best category that can be made from your cards.) Fix your +program so that it works for both five-card and seven-card hands. + +<P>Another possible modification to the program is to allow for playing with +"wild" cards. If you play with "threes wild," it means that if there is +a three in your hand you're allowed to pretend it's whatever card you like. +For this modification, your program will require a second argument indicating +which cards are wild. (When you play with wild cards, there's the +possibility of having five of a kind. This beats a straight flush.) + +<P> + + + +<HR> +<A NAME="ft1" HREF="poker.html#text1">[1]</A> Later on we'll think about seven-card variants of poker.<P> +<P><A HREF="../ss-toc2.html">(back to Table of Contents)</A><P> +<A HREF="adv-recur.html"><STRONG>BACK</STRONG></A> +chapter thread <A HREF="../ssch16/match.html"><STRONG>NEXT</STRONG></A> + +<P> +<ADDRESS> +<A HREF="../index.html">Brian Harvey</A>, +<CODE>bh@cs.berkeley.edu</CODE> +</ADDRESS> +</BODY> +</HTML> |