Solution to Project Euler problem 54

db4
Aaron Schaefer 2009-04-05 15:37:03 -04:00
parent 469c3c05ec
commit 8fdc852038
4 changed files with 1100 additions and 9 deletions

View File

@ -0,0 +1,4 @@
USING: project-euler.054 tools.test ;
IN: project-euler.054.tests
[ 376 ] [ euler054 ] unit-test

View File

@ -0,0 +1,87 @@
! Copyright (c) 2009 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays io.encodings.ascii io.files kernel math.order poker
project-euler.common sequences ;
IN: project-euler.054
! http://projecteuler.net/index.php?section=problems&id=54
! DESCRIPTION
! -----------
! In the card game poker, a hand consists of five cards and are ranked, from
! lowest to highest, in the following way:
! * High Card: Highest value card.
! * One Pair: Two cards of the same value.
! * Two Pairs: Two different pairs.
! * Three of a Kind: Three cards of the same value.
! * Straight: All cards are consecutive values.
! * Flush: All cards of the same suit.
! * Full House: Three of a kind and a pair.
! * Four of a Kind: Four cards of the same value.
! * Straight Flush: All cards are consecutive values of same suit.
! * Royal Flush: Ten, Jack, Queen, King, Ace, in same suit.
! The cards are valued in the order:
! 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, Ace.
! If two players have the same ranked hands then the rank made up of the
! highest value wins; for example, a pair of eights beats a pair of fives (see
! example 1 below). But if two ranks tie, for example, both players have a pair
! of queens, then highest cards in each hand are compared (see example 4
! below); if the highest cards tie then the next highest cards are compared,
! and so on.
! Consider the following five hands dealt to two players:
! Hand Player 1 Player 2 Winner
! ---------------------------------------------------------
! 1 5H 5C 6S 7S KD 2C 3S 8S 8D TD
! Pair of Fives Pair of Eights Player 2
! 2 5D 8C 9S JS AC 2C 5C 7D 8S QH
! Highest card Ace Highest card Queen Player 1
! 3 2D 9C AS AH AC 3D 6D 7D TD QD
! Three Aces Flush with Diamonds Player 2
! 4 4D 6S 9H QH QC 3D 6D 7H QD QS
! Pair of Queens Pair of Queens
! Highest card Nine Highest card Seven Player 1
! 5 2H 2D 4C 4D 4S 3C 3D 3S 9S 9D
! Full House Full House
! With Three Fours With Three Threes Player 1
! The file, poker.txt, contains one-thousand random hands dealt to two players.
! Each line of the file contains ten cards (separated by a single space): the
! first five are Player 1's cards and the last five are Player 2's cards. You
! can assume that all hands are valid (no invalid characters or repeated
! cards), each player's hand is in no specific order, and in each hand there is
! a clear winner.
! How many hands does Player 1 win?
! SOLUTION
! --------
<PRIVATE
: source-054 ( -- seq )
"resource:extra/project-euler/054/poker.txt" ascii file-lines
[ [ 14 head-slice ] [ 14 tail-slice* ] bi 2array ] map ;
: player1-win? ( hand1 hand2 -- ? )
before? ; inline
PRIVATE>
: euler054 ( -- answer )
source-054 [ [ <hand> ] map first2 player1-win? ] count ;
! [ euler054 ] 100 ave-time
! 36 ms ave run time - 2.71 SD (100 trials)
SOLUTION: euler054

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
! Copyright (c) 2007, 2008 Aaron Schaefer, Samuel Tardieu.
! Copyright (c) 2007, 2008, 2009 Aaron Schaefer, Samuel Tardieu.
! See http://factorcode.org/license.txt for BSD license.
USING: definitions io io.files io.pathnames kernel math math.parser
prettyprint project-euler.ave-time sequences vocabs vocabs.loader
@ -14,14 +14,14 @@ USING: definitions io io.files io.pathnames kernel math math.parser
project-euler.037 project-euler.038 project-euler.039 project-euler.040
project-euler.041 project-euler.042 project-euler.043 project-euler.044
project-euler.045 project-euler.046 project-euler.047 project-euler.048
project-euler.049 project-euler.052 project-euler.053 project-euler.055
project-euler.056 project-euler.057 project-euler.059 project-euler.067
project-euler.071 project-euler.073 project-euler.075 project-euler.076
project-euler.079 project-euler.092 project-euler.097 project-euler.099
project-euler.100 project-euler.116 project-euler.117 project-euler.134
project-euler.148 project-euler.150 project-euler.151 project-euler.164
project-euler.169 project-euler.173 project-euler.175 project-euler.186
project-euler.190 project-euler.203 project-euler.215 ;
project-euler.049 project-euler.052 project-euler.053 project-euler.054
project-euler.055 project-euler.056 project-euler.057 project-euler.059
project-euler.067 project-euler.071 project-euler.073 project-euler.075
project-euler.076 project-euler.079 project-euler.092 project-euler.097
project-euler.099 project-euler.100 project-euler.116 project-euler.117
project-euler.134 project-euler.148 project-euler.150 project-euler.151
project-euler.164 project-euler.169 project-euler.173 project-euler.175
project-euler.186 project-euler.190 project-euler.203 project-euler.215 ;
IN: project-euler
<PRIVATE