You are on page 1of 4

CL-USER 1 >

;; *deck* and *shuf-list* are gloabal variable so that can be used in multiple f
unctions for further development.
(setf *deck* '( (A Spades) (2 Spades) (3 Spades) (4 Spades) (5 Spades) (6 Spades
) (7 Spades) (8 Spades) (9 Spades) (10 Spades)
(J Spades) (Q Spades) (K Spades)
(A Diomands) (2 Diomands) (3 Diomands) (4 Diomands) (5 Diomands) (6 Diomands) (7
Diomands) (8 Diomands) (9 Diomands) (10 Diomands)
(J Diomands) (Q Diomands) (K Diomands)
(A Hearts) (2 Hearts) (3 Hearts) (4 Hearts) (5 Hearts) (6 Hearts) (7 Hearts) (8
Hearts) (9 Hearts) (10 Hearts)
(J Hearts) (Q Hearts) (K Hearts)
(A Clubs) (2 Clubs) (3 Clubs) (4 Clubs) (5 Clubs) (6 Clubs) (7 Clubs) (8 Clubs)
(9 Clubs) (10 Clubs)
(J Clubs) (Q Clubs) (K Clubs)))
((A SPADES) (2 SPADES) (3 SPADES) (4 SPADES) (5 SPADES) (6 SPADES) (7 SPADES) (8
SPADES) (9 SPADES) (10 SPADES) (J SPADES) (Q SPADES) (K SPADES) (A DIOMANDS) (2
DIOMANDS) (3 DIOMANDS) (4 DIOMANDS) (5 DIOMANDS) (6 DIOMANDS) (7 DIOMANDS) (8 D
IOMANDS) (9 DIOMANDS) (10 DIOMANDS) (J DIOMANDS) (Q DIOMANDS) (K DIOMANDS) (A HE
ARTS) (2 HEARTS) (3 HEARTS) (4 HEARTS) (5 HEARTS) (6 HEARTS) (7 HEARTS) (8 HEART
S) (9 HEARTS) (10 HEARTS) (J HEARTS) (Q HEARTS) (K HEARTS) (A CLUBS) (2 CLUBS) (
3 CLUBS) (4 CLUBS) (5 CLUBS) (6 CLUBS) (7 CLUBS) (8 CLUBS) (9 CLUBS) (10 CLUBS)
(J CLUBS) (Q CLUBS) (K CLUBS))
CL-USER 2 >
(setf *shuf-list* ())
NIL
CL-USER 3 >
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun shuf (*deck* &optional (new-list ()))


" This function will take complete deck and shuffle randomly"
;; The index is selected randomly to fetch indexed card from deck
;; random function will give random index from 0 to (lenth of deck - 1)
;; length-1 is considered because of length of list starts from 1 while ind
exing of list starts from 0.
;; When length is 1 then random function cant take random of 0 (length-1). So ra
nd is set to 0 to pick up last element of list.
;; The indexed element is selected from deck and pushed into new-list.Moreover i
t is removed from deck to avoid multiple time
;; processing of same element.
;; Function shuf called recursively till all elements in deck are processed only
once.
;; temp-list is once again shuffled on the basis of evenp of random # between 0
to 5
;; *print-length* has to be set to 52 to view complete 52 element list.
(setf deck-length (- (length *deck*) 1))
(if (= deck-length 0) (setf rand 0) (setf rand (random deck-length
)))
(setf remove-ele (elt *deck* rand))
(push remove-ele new-list)
(setf *deck* (remove remove-ele *deck*))
(if (not (null *deck*))
(shuf *deck* new-list)
(progn (if (evenp (random 5)) (setf *shuf-list*
(reverse new-list)) (setf *shuf-list* new-list)))))
SHUF
CL-USER 4 >
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun deal (*shuf-list* num)


"This function will receive shuffeled list and # of players and returns the dist
ribution of cards."
(let ((list1 ()) (list2 ()) (hole-list ()) (list3 ()) (dis
card-list ()) (communal-list ()) (final-list ()))
;; Two sets are created from whole deck based on number of players.these
two sets are again combined with 1:1 ration using mapcar.
;; e.g distribution of cards for 3 players : 1 2 3 4 5 6 -> ((1 4) (2 5)
(3 6))
(Setf list1 (subseq *shuf-list* 0 num))
(setf list2 (subseq *shuf-list* num (* num 2)))
(setf hole-list (mapcar #'(lambda (x y) (list x y)) list1
list2))
;; This will make list3 with stack of cards excluding hole-cards.
(setf list3 (subseq *shuf-list* (* num 2)))
;; First burning of card before flop.
(push (first list3) discard-list)
;; Opening of communal cards. i.e flop
(push (second list3) communal-list)
(push (third list3) communal-list)
(push (fourth list3) communal-list)
;; Burning of card before fourth street
(push (fifth list3) discard-list)
;; Opening of communal card i.e fourth street
(push (sixth list3) communal-list)
;; Burning of card before fifth street
(push (seventh list3) discard-list)
;; Opening of last communal card i.e fifth street
(push (eighth list3) communal-list)
;; Discard list needs as pile so no reverse is necessary only communal-l
ist needs to be reversed.
(setf communal-list (reverse communal-list))
; (setf discard-list (reverse discard-list))
;; Final list containing hole-list, discard-list & communal-list
(print "THE PROPER DEAL WAS:")
(setf final-list (list hole-list discard-list communal-lis
t))))
DEAL
CL-USER 5 >
(shuf *deck*)
((5 SPADES) (9 DIOMANDS) (9 SPADES) (6 SPADES) (Q CLUBS) (8 SPADES) (3 HEARTS) (
2 CLUBS) (9 CLUBS) (Q SPADES) (2 SPADES) (7 DIOMANDS) (10 HEARTS) (3 DIOMANDS) (
10 DIOMANDS) (3 CLUBS) (8 HEARTS) (A DIOMANDS) (Q HEARTS) (K SPADES) (A HEARTS)
(2 DIOMANDS) (J DIOMANDS) (9 HEARTS) (6 CLUBS) (Q DIOMANDS) (4 SPADES) (5 DIOMAN
DS) (K DIOMANDS) (6 DIOMANDS) (10 SPADES) (5 CLUBS) (J SPADES) (A CLUBS) (10 CLU
BS) (6 HEARTS) (A SPADES) (4 DIOMANDS) (7 HEARTS) (5 HEARTS) (8 CLUBS) (J CLUBS)
(4 CLUBS) (K HEARTS) (7 SPADES) (2 HEARTS) (J HEARTS) (3 SPADES) (7 CLUBS) (8 D
IOMANDS) (4 HEARTS) (K CLUBS))
CL-USER 6 > (deal *shuf-list* 2)
"THE PROPER DEAL WAS:"
((((5 SPADES) (9 SPADES)) ((9 DIOMANDS) (6 SPADES))) ((2 SPADES) (9 CLUBS) (Q CL
UBS)) ((8 SPADES) (3 HEARTS) (2 CLUBS) (Q SPADES) (7 DIOMANDS)))
CL-USER 7 >

(shuf *deck*)
((K CLUBS) (Q DIOMANDS) (5 DIOMANDS) (7 HEARTS) (5 SPADES) (Q HEARTS) (5 HEARTS)
(8 HEARTS) (6 HEARTS) (2 DIOMANDS) (8 SPADES) (3 CLUBS) (3 HEARTS) (K HEARTS) (
K DIOMANDS) (J HEARTS) (2 HEARTS) (Q SPADES) (A CLUBS) (6 SPADES) (9 HEARTS) (9
SPADES) (4 SPADES) (10 HEARTS) (4 CLUBS) (10 CLUBS) (K SPADES) (9 CLUBS) (10 SPA
DES) (7 DIOMANDS) (A DIOMANDS) (10 DIOMANDS) (9 DIOMANDS) (4 DIOMANDS) (6 DIOMAN
DS) (3 SPADES) (A HEARTS) (6 CLUBS) (8 CLUBS) (7 CLUBS) (J SPADES) (8 DIOMANDS)
(A SPADES) (Q CLUBS) (7 SPADES) (J CLUBS) (4 HEARTS) (5 CLUBS) (2 CLUBS) (J DIOM
ANDS) (2 SPADES) (3 DIOMANDS))
CL-USER 8 > (deal *shuf-list* 4)
"THE PROPER DEAL WAS:"
((((K CLUBS) (5 SPADES)) ((Q DIOMANDS) (Q HEARTS)) ((5 DIOMANDS) (5 HEARTS)) ((7
HEARTS) (8 HEARTS))) ((K DIOMANDS) (3 HEARTS) (6 HEARTS)) ((2 DIOMANDS) (8 SPAD
ES) (3 CLUBS) (K HEARTS) (J HEARTS)))
CL-USER 9 >

(shuf *deck*)
((K CLUBS) (6 SPADES) (7 CLUBS) (Q SPADES) (2 SPADES) (2 CLUBS) (4 HEARTS) (J CL
UBS) (8 DIOMANDS) (Q HEARTS) (J DIOMANDS) (6 CLUBS) (3 DIOMANDS) (7 DIOMANDS) (J
SPADES) (A HEARTS) (4 CLUBS) (6 HEARTS) (Q CLUBS) (3 CLUBS) (9 DIOMANDS) (3 HEA
RTS) (8 SPADES) (4 DIOMANDS) (9 CLUBS) (J HEARTS) (8 CLUBS) (5 SPADES) (7 HEARTS
) (2 DIOMANDS) (9 SPADES) (5 HEARTS) (5 DIOMANDS) (K HEARTS) (10 DIOMANDS) (5 CL
UBS) (3 SPADES) (10 CLUBS) (Q DIOMANDS) (2 HEARTS) (10 SPADES) (K DIOMANDS) (A C
LUBS) (A SPADES) (7 SPADES) (A DIOMANDS) (K SPADES) (10 HEARTS) (9 HEARTS) (4 SP
ADES) (6 DIOMANDS) (8 HEARTS))
CL-USER 10 > (deal *shuf-list* 22)
"THE PROPER DEAL WAS:"
((((K CLUBS) (8 SPADES)) ((6 SPADES) (4 DIOMANDS)) ((7 CLUBS) (9 CLUBS)) ((Q SPA
DES) (J HEARTS)) ((2 SPADES) (8 CLUBS)) ((2 CLUBS) (5 SPADES)) ((4 HEARTS) (7 HE
ARTS)) ((J CLUBS) (2 DIOMANDS)) ((8 DIOMANDS) (9 SPADES)) ((Q HEARTS) (5 HEARTS)
) ((J DIOMANDS) (5 DIOMANDS)) ((6 CLUBS) (K HEARTS)) ((3 DIOMANDS) (10 DIOMANDS)
) ((7 DIOMANDS) (5 CLUBS)) ((J SPADES) (3 SPADES)) ((A HEARTS) (10 CLUBS)) ((4 C
LUBS) (Q DIOMANDS)) ((6 HEARTS) (2 HEARTS)) ((Q CLUBS) (10 SPADES)) ((3 CLUBS) (
K DIOMANDS)) ((9 DIOMANDS) (A CLUBS)) ((3 HEARTS) (A SPADES))) ((6 DIOMANDS) (9
HEARTS) (7 SPADES)) ((A DIOMANDS) (K SPADES) (10 HEARTS) (4 SPADES) (8 HEARTS)))
CL-USER 11 > (deal *shuf-list* 12)
"THE PROPER DEAL WAS:"
((((K CLUBS) (3 DIOMANDS)) ((6 SPADES) (7 DIOMANDS)) ((7 CLUBS) (J SPADES)) ((Q
SPADES) (A HEARTS)) ((2 SPADES) (4 CLUBS)) ((2 CLUBS) (6 HEARTS)) ((4 HEARTS) (Q
CLUBS)) ((J CLUBS) (3 CLUBS)) ((8 DIOMANDS) (9 DIOMANDS)) ((Q HEARTS) (3 HEARTS
)) ((J DIOMANDS) (8 SPADES)) ((6 CLUBS) (4 DIOMANDS))) ((9 SPADES) (7 HEARTS) (9
CLUBS)) ((J HEARTS) (8 CLUBS) (5 SPADES) (2 DIOMANDS) (5 HEARTS)))
CL-USER 12 >

You might also like