module Poker.Holdem.Table.DP ( dpLookup ) where import qualified Data.Array.Unboxed as Array import Data.Array.Base (unsafeAt) import GHC.Arr (unsafeIndex) dpLookup :: Array.UArray Int Int -> Int -> Int -> Int dpLookup q i k = dp2 `unsafeAt` idx where idx = unsafeIndex ((0,0,0), (4,13,9)) (q `unsafeAt` i, 13 - i - 1, k) dp2 :: Array.UArray (Int, Int, Int) Int dp2 = Array.listArray ((0,0,0), (4,13,9)) [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 , 1, 2, 3, 4, 5, 4, 3, 2, 1, 0 , 1, 3, 6, 10, 15, 18, 19, 18, 15, 10 , 1, 4, 10, 20, 35, 52, 68, 80, 85, 80 , 1, 5, 15, 35, 70, 121, 185, 255, 320, 365 , 1, 6, 21, 56, 126, 246, 426, 666, 951, 1246 , 1, 7, 28, 84, 210, 455, 875, 1520, 2415, 3535 , 1, 8, 36, 120, 330, 784, 1652, 3144, 5475, 8800 , 1, 9, 45, 165, 495, 1278, 2922, 6030, 11385, 19855 , 1, 10, 55, 220, 715, 1992, 4905, 10890, 22110, 41470 , 1, 11, 66, 286, 1001, 2992, 7887, 18722, 40612, 81367 , 1, 12, 78, 364, 1365, 4356, 12232, 30888, 71214, 151580 , 1, 13, 91, 455, 1820, 6175, 18395, 49205, 120055, 270270 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 1, 2, 2, 2, 2, 1, 0, 0, 0, 0 , 1, 3, 5, 7, 9, 9, 7, 5, 3, 1 , 1, 4, 9, 16, 25, 33, 37, 37, 33, 25 , 1, 5, 14, 30, 55, 87, 120, 148, 165, 165 , 1, 6, 20, 50, 105, 191, 306, 440, 575, 685 , 1, 7, 27, 77, 182, 372, 672, 1092, 1617, 2197 , 1, 8, 35, 112, 294, 665, 1330, 2395, 3935, 5950 , 1, 9, 44, 156, 450, 1114, 2436, 4796, 8619, 14275 , 1, 10, 54, 210, 660, 1773, 4200, 8952, 17415, 31240 , 1, 11, 65, 275, 935, 2707, 6897, 15795, 33000, 63580 , 1, 12, 77, 352, 1287, 3993, 10879, 26609, 59334, 121979 , 1, 13, 90, 442, 1729, 5721, 16588, 43120, 102102, 222794 , 1, 14, 104, 546, 2275, 7995, 24570, 67600, 169260, 390325 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 1, 2, 3, 3, 3, 2, 1, 0, 0, 0 , 1, 3, 6, 9, 12, 13, 12, 9, 6, 3 , 1, 4, 10, 19, 31, 43, 52, 55, 52, 43 , 1, 5, 15, 34, 65, 107, 155, 200, 233, 245 , 1, 6, 21, 55, 120, 226, 376, 561, 760, 940 , 1, 7, 28, 83, 203, 428, 798, 1338, 2043, 2863 , 1, 8, 36, 119, 322, 749, 1540, 2850, 4810, 7470 , 1, 9, 45, 164, 486, 1234, 2766, 5580, 10271, 17419 , 1, 10, 55, 219, 705, 1938, 4695, 10230, 20337, 37270 , 1, 11, 66, 285, 990, 2927, 7612, 17787, 37905, 74470 , 1, 12, 78, 363, 1353, 4279, 11880, 29601, 67221, 140701 , 1, 13, 91, 454, 1807, 6085, 17953, 47476, 114334, 253682 , 1, 14, 105, 559, 2366, 8450, 26390, 73775, 187655, 439530 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 1, 2, 3, 4, 4, 3, 2, 1, 0, 0 , 1, 3, 6, 10, 14, 16, 16, 14, 10, 6 , 1, 4, 10, 20, 34, 49, 62, 70, 70, 62 , 1, 5, 15, 35, 69, 117, 175, 235, 285, 313 , 1, 6, 21, 56, 125, 241, 411, 631, 881, 1125 , 1, 7, 28, 84, 209, 449, 854, 1464, 2289, 3289 , 1, 8, 36, 120, 329, 777, 1624, 3060, 5265, 8345 , 1, 9, 45, 165, 494, 1270, 2886, 5910, 11055, 19071 , 1, 10, 55, 220, 714, 1983, 4860, 10725, 21615, 40192 , 1, 11, 66, 286, 1000, 2982, 7832, 18502, 39897, 79375 , 1, 12, 78, 364, 1364, 4345, 12166, 30602, 70213, 148588 , 1, 13, 91, 455, 1819, 6163, 18317, 48841, 118690, 265914 , 1, 14, 105, 560, 2379, 8541, 26845, 75595, 193830, 457925 ]