ポーカーの役判定を Groovy で
勉強会 - 第一回 オフラインリアルタイムどう書くの参考問題 - Qiita
これを Groovy でやってみた。
判定が楽になっていいけど、ストレートやフラッシュがないのはなんでかね?
gist https://gist.github.com/4640261
package doukaku import doukaku.Poker import spock.lang.Specification import spock.lang.Unroll class PokerSpec extends Specification { @Unroll def "#hand の場合は #result を返す"() { setup: Poker sut = new Poker() expect: sut.judge(hand) == result where: hand |result "S2HKD10CJCA" |"-" "S2H3D10DKC2" |"1P" "S2H3D10D2C10" |"2P" "SAHAD10DAC2" |"3K" "SAHAD10DACA" |"4K" } }
package doukaku class Poker { final def handPattern = ['14':'4K', '23':'FH', '113':'3K', '122':'2P', '1112':'1P', '11111':'-'] String judge(String hand) { def eachNumberCount = [:].withDefault {0} (hand =~ /([2-9AJQK]|10)/).each { ++eachNumberCount[it] } def countPattern = "" eachNumberCount.sort { it.value }.each { countPattern += it.value } handPattern[countPattern] } }