27 lines
815 B
Text
27 lines
815 B
Text
divert(-1)
|
|
define(`randSeed',141592653)
|
|
define(`rand_t',`eval(randSeed^(randSeed>>13))')
|
|
define(`random',
|
|
`define(`randSeed',eval((rand_t^(rand_t<<18))&0x7fffffff))randSeed')
|
|
define(`for',
|
|
`ifelse($#,0,``$0'',
|
|
`ifelse(eval($2<=$3),1,
|
|
`pushdef(`$1',$2)$4`'popdef(`$1')$0(`$1',incr($2),$3,`$4')')')')
|
|
define(`set',`define(`$1[$2]',`$3')')
|
|
define(`get',`defn($1[$2])')
|
|
define(`new',`set($1,size,0)')
|
|
define(`deck',
|
|
`new($1)for(`x',1,$2,
|
|
`set(`$1',x,x)')`'set(`$1',size,$2)')
|
|
define(`show',
|
|
`for(`x',1,get($1,size),`get($1,x)`'ifelse(x,get($1,size),`',`, ')')')
|
|
define(`swap',`set($1,$2,get($1,$4))`'set($1,$4,$3)')
|
|
define(`shuffle',
|
|
`define(`s',get($1,size))`'for(`x',1,decr(s),
|
|
`swap($1,x,get($1,x),eval(x+random%(s-x+1)))')')
|
|
divert
|
|
|
|
deck(`b',52)
|
|
show(`b')
|
|
shuffle(`b')
|
|
show(`b')
|