68 lines
1.5 KiB
Plaintext
68 lines
1.5 KiB
Plaintext
attr$[][] &= [ "one " "two " "three" ]
|
|
attr$[][] &= [ "solid " "striped" "open " ]
|
|
attr$[][] &= [ "red " "green " "purple" ]
|
|
attr$[][] &= [ "diamond" "oval" "squiggle" ]
|
|
#
|
|
subr init
|
|
for card = 0 to 80 : pack[] &= card
|
|
.
|
|
proc card2attr card &attr[] .
|
|
attr[] = [ ]
|
|
for i to 4
|
|
attr[] &= card mod 3 + 1
|
|
card = card div 3
|
|
.
|
|
.
|
|
proc printcards cards[] .
|
|
for card in cards[]
|
|
card2attr card attr[]
|
|
write " "
|
|
for i to 4 : write attr$[i][attr[i]] & " "
|
|
print ""
|
|
.
|
|
print ""
|
|
.
|
|
proc getsets &cards[] &set[] .
|
|
set[] = [ ]
|
|
for i to len cards[]
|
|
card2attr cards[i] a[]
|
|
for j = i + 1 to len cards[]
|
|
card2attr cards[j] b[]
|
|
for k = j + 1 to len cards[]
|
|
card2attr cards[k] c[]
|
|
ok = 1
|
|
for at to 4
|
|
s = a[at] + b[at] + c[at]
|
|
if s <> 3 and s <> 6 and s <> 9 : ok = 0
|
|
.
|
|
if ok = 1
|
|
set[] &= cards[i]
|
|
set[] &= cards[j]
|
|
set[] &= cards[k]
|
|
.
|
|
.
|
|
.
|
|
.
|
|
.
|
|
proc run ncards nsets .
|
|
repeat
|
|
init
|
|
cards[] = [ ]
|
|
for i to ncards
|
|
ind = random len pack[]
|
|
cards[] &= pack[ind]
|
|
pack[ind] = pack[len pack[]]
|
|
len pack[] -1
|
|
.
|
|
getsets cards[] set[]
|
|
until len set[] = 3 * nsets
|
|
.
|
|
print "Cards:"
|
|
printcards cards[]
|
|
print "Sets:"
|
|
for i = 1 step 3 to 3 * nsets - 2
|
|
printcards [ set[i] set[i + 1] set[i + 2] ]
|
|
.
|
|
.
|
|
run 9 4
|