Skip to content

Instantly share code, notes, and snippets.

@tkych
Last active December 30, 2015 11:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkych/7822150 to your computer and use it in GitHub Desktop.
Save tkych/7822150 to your computer and use it in GitHub Desktop.
;;;; Last modified: 2013-12-06 20:45:32 tkych
;; 自前の解答があまりにもひどかったので、shiracamussaさんの解答を参考に書き直しました。
;;====================================================================
;; ポーカー
;;====================================================================
;; - [第一回 オフラインリアルタイムどう書くの参考問題](http://qiita.com/Nabetani/items/cbc3af152ee3f50a822f)
;; - [shiracamussaさんの解答: 第一回 オフラインリアルタイムどう書くの参考問題の解答例をPythonで書いてみた](http://qiita.com/shiracamus/items/6a58a7f9d6c80dd56293)
;;--------------------------------------------------------------------
;; Package
;;--------------------------------------------------------------------
(in-package :cl-user)
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload '(:cl-ppcre :alexandria)))
(defpackage :poker (:use :cl))
(in-package :poker)
;;--------------------------------------------------------------------
;; Main
;;--------------------------------------------------------------------
(defun parse (input)
(remove-if (lambda (c) (member c '(#\S #\H #\D #\C)))
(cl-ppcre:regex-replace-all "10" input "T")))
(defun group-same-rank (ranks)
(sort (map 'list (lambda (c) (count c ranks))
(remove-duplicates ranks))
#'>))
(defun main (input)
(let ((ranks (parse input)))
(alexandria:switch (ranks :key #'group-same-rank
:test #'equal)
('(4 1) "4K")
('(3 2) "FH")
('(3 1 1) "3K")
('(2 2 1) "2P")
('(2 1 1 1) "1P")
('(1 1 1 1 1) "--")
(t (error "BUG")))))
;;--------------------------------------------------------------------
;; Tests
;;--------------------------------------------------------------------
(defun =>? (got want)
(assert (string= got want)))
(progn
(=>? (main "D3C3C10D10S3") "FH")
(=>? (main "S8D10HJS10CJ") "2P")
(=>? (main "DASAD10CAHA") "4K")
(=>? (main "S10HJDJCJSJ") "4K")
(=>? (main "S10HAD10DAC10") "FH")
(=>? (main "HJDJC3SJS3") "FH")
(=>? (main "S3S4H3D3DA") "3K")
(=>? (main "S2HADKCKSK") "3K")
(=>? (main "SASJDACJS10") "2P")
(=>? (main "S2S10H10HKD2") "2P")
(=>? (main "CKH10D10H3HJ") "1P")
(=>? (main "C3D3S10SKS2") "1P")
(=>? (main "S3SJDAC10SQ") "--")
(=>? (main "C3C9SAS10D2") "--")
)
;;====================================================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment