41 lines
1.4 KiB
Plaintext
41 lines
1.4 KiB
Plaintext
define(`randSeed',141592653)dnl
|
|
define(`setRand',
|
|
`define(`randSeed',ifelse(eval($1<10000),1,`eval(20000-$1)',`$1'))')dnl
|
|
define(`rand_t',`eval(randSeed^(randSeed>>13))')dnl
|
|
define(`random',
|
|
`define(`randSeed',eval((rand_t^(rand_t<<18))&0x7fffffff))randSeed')dnl
|
|
define(`for',
|
|
`ifelse($#,0,``$0'',
|
|
`ifelse(eval($2<=$3),1,
|
|
`pushdef(`$1',$2)$4`'popdef(`$1')$0(`$1',incr($2),$3,`$4')')')')dnl
|
|
define(`foreach', `pushdef(`$1')_foreach($@)popdef(`$1')')dnl
|
|
define(`_arg1', `$1')dnl
|
|
define(`_foreach', `ifelse(`$2', `()', `',
|
|
`define(`$1', _arg1$2)$3`'$0(`$1', (shift$2), `$3')')')dnl
|
|
define(`new',`define(`$1[size]',0)')dnl
|
|
define(`append',
|
|
`define(`$1[size]',incr(defn(`$1[size]')))`'define($1[defn($1[size])],$2)')
|
|
define(`deck',
|
|
`new($1)foreach(`x',(Ace,2,3,4,5,6,7,8,9,10,Jack,Queen,King),
|
|
`foreach(`y',(Clubs,Diamonds,Hearts,Spades),
|
|
`append(`$1',`x of y')')')')dnl
|
|
define(`show',
|
|
`for(`x',1,defn($1[size]),`defn($1[x])ifelse(x,defn($1[size]),`',`, ')')')dnl
|
|
define(`swap',`define($1[$2],defn($1[$4]))define($1[$4],$3)')dnl
|
|
define(`shuffle',
|
|
`for(`x',1,defn($1[size]),
|
|
`swap($1,x,defn($1[x]),eval(1+random%defn($1[size])))')')dnl
|
|
define(`deal',
|
|
`ifelse($#,0,``$0'',
|
|
`ifelse(defn($1[size]),0,
|
|
`NULL',
|
|
defn($1[defn($1[size])])define($1[size],decr(defn($1[size]))))')')dnl
|
|
dnl
|
|
deck(`b')
|
|
show(`b')
|
|
shuffling shuffle(`b')
|
|
show(`b')
|
|
deal deal(`b')
|
|
deal deal(`b')
|
|
show(`b')
|