packages feed

poker-0.1.0.0: src/Poker/Holdem/Table/DP.hs

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
  ]