Last active
December 30, 2015 11:19
-
-
Save tkych/7822150 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;;; 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