Playing cards: Difference between revisions
Content added Content deleted
(added a Common Lisp solution) |
(add m4) |
||
Line 1,088: | Line 1,088: | ||
} |
} |
||
}</lang> |
}</lang> |
||
=={{header|M4}}== |
|||
<lang M4> |
|||
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') |
|||
</lang> |
|||
=={{header|OCaml}}== |
=={{header|OCaml}}== |