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 :: UArray Int Int -> Int -> Int -> Int
dpLookup UArray Int Int
q Int
i Int
k = UArray (Int, Int, Int) Int
dp2 UArray (Int, Int, Int) Int -> Int -> Int
forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> Int -> e
`unsafeAt` Int
idx
  where idx :: Int
idx = ((Int, Int, Int), (Int, Int, Int)) -> (Int, Int, Int) -> Int
forall a. Ix a => (a, a) -> a -> Int
unsafeIndex ((Int
0,Int
0,Int
0), (Int
4,Int
13,Int
9)) (UArray Int Int
q UArray Int Int -> Int -> Int
forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> Int -> e
`unsafeAt` Int
i, Int
13 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1, Int
k)

dp2 :: Array.UArray (Int, Int, Int) Int
dp2 :: UArray (Int, Int, Int) Int
dp2 = ((Int, Int, Int), (Int, Int, Int))
-> [Int] -> UArray (Int, Int, Int) Int
forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
(i, i) -> [e] -> a i e
Array.listArray ((Int
0,Int
0,Int
0), (Int
4,Int
13,Int
9)) [
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0
    ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
1,  Int
1,  Int
1,  Int
1,  Int
1,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
1,  Int
2,  Int
3,  Int
4,  Int
5,  Int
4,  Int
3,  Int
2,  Int
1,  Int
0 ,
      Int
1,  Int
3,  Int
6,  Int
10,  Int
15,  Int
18,  Int
19,  Int
18,  Int
15,  Int
10 ,
      Int
1,  Int
4,  Int
10,  Int
20,  Int
35,  Int
52,  Int
68,  Int
80,  Int
85,  Int
80 ,
      Int
1,  Int
5,  Int
15,  Int
35,  Int
70,  Int
121,  Int
185,  Int
255,  Int
320,  Int
365 ,
      Int
1,  Int
6,  Int
21,  Int
56,  Int
126,  Int
246,  Int
426,  Int
666,  Int
951,  Int
1246 ,
      Int
1,  Int
7,  Int
28,  Int
84,  Int
210,  Int
455,  Int
875,  Int
1520,  Int
2415,  Int
3535 ,
      Int
1,  Int
8,  Int
36,  Int
120,  Int
330,  Int
784,  Int
1652,  Int
3144,  Int
5475,  Int
8800 ,
      Int
1,  Int
9,  Int
45,  Int
165,  Int
495,  Int
1278,  Int
2922,  Int
6030,  Int
11385,  Int
19855 ,
      Int
1,  Int
10,  Int
55,  Int
220,  Int
715,  Int
1992,  Int
4905,  Int
10890,  Int
22110,  Int
41470 ,
      Int
1,  Int
11,  Int
66,  Int
286,  Int
1001,  Int
2992,  Int
7887,  Int
18722,  Int
40612,  Int
81367 ,
      Int
1,  Int
12,  Int
78,  Int
364,  Int
1365,  Int
4356,  Int
12232,  Int
30888,  Int
71214,  Int
151580 ,
      Int
1,  Int
13,  Int
91,  Int
455,  Int
1820,  Int
6175,  Int
18395,  Int
49205,  Int
120055,  Int
270270
  ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
1,  Int
2,  Int
2,  Int
2,  Int
2,  Int
1,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
1,  Int
3,  Int
5,  Int
7,  Int
9,  Int
9,  Int
7,  Int
5,  Int
3,  Int
1 ,
      Int
1,  Int
4,  Int
9,  Int
16,  Int
25,  Int
33,  Int
37,  Int
37,  Int
33,  Int
25 ,
      Int
1,  Int
5,  Int
14,  Int
30,  Int
55,  Int
87,  Int
120,  Int
148,  Int
165,  Int
165 ,
      Int
1,  Int
6,  Int
20,  Int
50,  Int
105,  Int
191,  Int
306,  Int
440,  Int
575,  Int
685 ,
      Int
1,  Int
7,  Int
27,  Int
77,  Int
182,  Int
372,  Int
672,  Int
1092,  Int
1617,  Int
2197 ,
      Int
1,  Int
8,  Int
35,  Int
112,  Int
294,  Int
665,  Int
1330,  Int
2395,  Int
3935,  Int
5950 ,
      Int
1,  Int
9,  Int
44,  Int
156,  Int
450,  Int
1114,  Int
2436,  Int
4796,  Int
8619,  Int
14275 ,
      Int
1,  Int
10,  Int
54,  Int
210,  Int
660,  Int
1773,  Int
4200,  Int
8952,  Int
17415,  Int
31240 ,
      Int
1,  Int
11,  Int
65,  Int
275,  Int
935,  Int
2707,  Int
6897,  Int
15795,  Int
33000,  Int
63580 ,
      Int
1,  Int
12,  Int
77,  Int
352,  Int
1287,  Int
3993,  Int
10879,  Int
26609,  Int
59334,  Int
121979 ,
      Int
1,  Int
13,  Int
90,  Int
442,  Int
1729,  Int
5721,  Int
16588,  Int
43120,  Int
102102,  Int
222794 ,
      Int
1,  Int
14,  Int
104,  Int
546,  Int
2275,  Int
7995,  Int
24570,  Int
67600,  Int
169260,  Int
390325
  ,
      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
1,  Int
2,  Int
3,  Int
3,  Int
3,  Int
2,  Int
1,  Int
0,  Int
0,  Int
0 ,
      Int
1,  Int
3,  Int
6,  Int
9,  Int
12,  Int
13,  Int
12,  Int
9,  Int
6,  Int
3 ,
      Int
1,  Int
4,  Int
10,  Int
19,  Int
31,  Int
43,  Int
52,  Int
55,  Int
52,  Int
43 ,
      Int
1,  Int
5,  Int
15,  Int
34,  Int
65,  Int
107,  Int
155,  Int
200,  Int
233,  Int
245 ,
      Int
1,  Int
6,  Int
21,  Int
55,  Int
120,  Int
226,  Int
376,  Int
561,  Int
760,  Int
940 ,
      Int
1,  Int
7,  Int
28,  Int
83,  Int
203,  Int
428,  Int
798,  Int
1338,  Int
2043,  Int
2863 ,
      Int
1,  Int
8,  Int
36,  Int
119,  Int
322,  Int
749,  Int
1540,  Int
2850,  Int
4810,  Int
7470 ,
      Int
1,  Int
9,  Int
45,  Int
164,  Int
486,  Int
1234,  Int
2766,  Int
5580,  Int
10271,  Int
17419 ,
      Int
1,  Int
10,  Int
55,  Int
219,  Int
705,  Int
1938,  Int
4695,  Int
10230,  Int
20337,  Int
37270 ,
      Int
1,  Int
11,  Int
66,  Int
285,  Int
990,  Int
2927,  Int
7612,  Int
17787,  Int
37905,  Int
74470 ,
      Int
1,  Int
12,  Int
78,  Int
363,  Int
1353,  Int
4279,  Int
11880,  Int
29601,  Int
67221,  Int
140701 ,
      Int
1,  Int
13,  Int
91,  Int
454,  Int
1807,  Int
6085,  Int
17953,  Int
47476,  Int
114334,  Int
253682 ,
      Int
1,  Int
14,  Int
105,  Int
559,  Int
2366,  Int
8450,  Int
26390,  Int
73775,  Int
187655,  Int
439530
  ,

      Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0,  Int
0 ,
      Int
1,  Int
2,  Int
3,  Int
4,  Int
4,  Int
3,  Int
2,  Int
1,  Int
0,  Int
0 ,
      Int
1,  Int
3,  Int
6,  Int
10,  Int
14,  Int
16,  Int
16,  Int
14,  Int
10,  Int
6 ,
      Int
1,  Int
4,  Int
10,  Int
20,  Int
34,  Int
49,  Int
62,  Int
70,  Int
70,  Int
62 ,
      Int
1,  Int
5,  Int
15,  Int
35,  Int
69,  Int
117,  Int
175,  Int
235,  Int
285,  Int
313 ,
      Int
1,  Int
6,  Int
21,  Int
56,  Int
125,  Int
241,  Int
411,  Int
631,  Int
881,  Int
1125 ,
      Int
1,  Int
7,  Int
28,  Int
84,  Int
209,  Int
449,  Int
854,  Int
1464,  Int
2289,  Int
3289 ,
      Int
1,  Int
8,  Int
36,  Int
120,  Int
329,  Int
777,  Int
1624,  Int
3060,  Int
5265,  Int
8345 ,
      Int
1,  Int
9,  Int
45,  Int
165,  Int
494,  Int
1270,  Int
2886,  Int
5910,  Int
11055,  Int
19071 ,
      Int
1,  Int
10,  Int
55,  Int
220,  Int
714,  Int
1983,  Int
4860,  Int
10725,  Int
21615,  Int
40192 ,
      Int
1,  Int
11,  Int
66,  Int
286,  Int
1000,  Int
2982,  Int
7832,  Int
18502,  Int
39897,  Int
79375 ,
      Int
1,  Int
12,  Int
78,  Int
364,  Int
1364,  Int
4345,  Int
12166,  Int
30602,  Int
70213,  Int
148588 ,
      Int
1,  Int
13,  Int
91,  Int
455,  Int
1819,  Int
6163,  Int
18317,  Int
48841,  Int
118690,  Int
265914 ,
      Int
1,  Int
14,  Int
105,  Int
560,  Int
2379,  Int
8541,  Int
26845,  Int
75595,  Int
193830,  Int
457925
  ]