ブラックジャックの点数

ブラックジャックの点数を数えるプログラムが思ってたのと全然違った
employment.en-japan.com

Aを2回以上11と数えるとバースト確実やねんから
Aの枚数=Aの合計値とみなしてかまへん

Aの枚数とA以外の合計値を求め、合計値-1が10以下ならA1枚を11とする
他はAを1と数えるだけでいい

せやないと6個のデッキをごちゃまぜにしてプレイしたときの
エース21枚という合法手に対し計算がややこしくなるやん(するかい、そんなん)

sumHand2 :: [Card] -> Int
sumHand2 cards | as == 0           = ax
               | ax + as - 1 <= 10 = ax + as - 1 + 11
               | otherwise         = ax + as
               where (a, xs) = partition (== A) cards
                     ax      = sum (map toPoint2 xs)
                     as      = length a

toPoint2 :: Card -> Int
toPoint2 A     = 1 -- 不要だけど書いておく
toPoint2 (N n) = n
toPoint2 _     = 10

そういえば練習でポーカーの手役を判定するプログラムと麻雀のシャンテン数を数えてたけど
作り途中でほっぽったのはどこ行ったんだろう
前のPCの中かな?