Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (format t "LISP Nim~%~%")
- (defvar L '())
- ;; (setq tok 8)
- ;; (format t "We have ~D tokens initially.~%" tok)
- (defun random123 () ;; this returns a number 1,2,or 3
- (+ 1 (random 3))
- )
- (defun pickPile(L)
- (setq x 0)
- (loop for i from 0 to (length L)
- do (
- if (= (nth x L) 0) (setq x (+ x 1))
- )
- )
- (format t "X is : ~D" x)
- x
- )
- ;;this to0k so long im so dumb
- (defun makePiles (N L X)
- (make-list X :initial-element N)
- )
- (defun take123 (tokens)
- ;; given # of tokens, return a number 1,2,3 or tokens
- (if (>= tokens (setq x (+ 1 (random 3))))
- x
- tokens
- )
- )
- (defun cturn (L playerNum)
- (setq pileNum (pickPile L))
- (setq curTokens (nth pileNum L))
- (setq take (take123 curTokens))
- (setf (nth pileNum L) (- (curTokens) take))
- (format t "(P~D ~D ~D)~S~%" playerNum (+ pileNum 1) take L)
- L
- )
- (defun printRemaining (remaining)
- (format t "~D tokens remaining~%~%" remaining))
- (defun checkWins (L)
- (loop for x in L
- do (if (= x 0)
- (setq nonZeroes nil)
- (setq nonZeroes t)
- )
- )
- (if (nonZeroes)
- (return nil)
- (return t))
- )
- (defun p2nim1 (numTokens numPiles numPlayers)
- (setq playerNum 1)
- (setq tok N)
- (setq L (makePiles(numTokens numPiles)))
- (loop
- (setq L (cturn L playerNum))
- (if (checkWins)
- (return (format t "~%**P~D wins**~%" playerNum))
- )
- (if (= playerNum 3) (setq playerNum 1) (+ 1 playerNum))
- )
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement