Set, the card game: Difference between revisions
Content added Content deleted
(Add Python) |
(Added Wren) |
||
Line 297: | Line 297: | ||
-----</pre> |
-----</pre> |
||
=={{header|Wren}}== |
|||
{{libheader|Wren-ioutil}} |
|||
{{libheader|Wren-fmt}} |
|||
{{libheader|Wren-perm}} |
|||
Note that entering 81 for the number of cards to deal confirms that there are 1080 possible sets. |
|||
<syntaxhighlight lang="ecmascript">import "random" for Random |
|||
import "./ioutil" for Input |
|||
import "./fmt" for Fmt |
|||
import "./perm" for Comb |
|||
var nums = ["one", "two", "three"] |
|||
var shas = ["solid", "striped", "open"] |
|||
var cols = ["red", "green", "purple"] |
|||
var syms = ["diamond", "oval", "squiggle"] |
|||
var pack = List.filled(81, null) |
|||
var i = 0 |
|||
for (num in 0..2) { |
|||
for (sha in 0..2) { |
|||
for (col in 0..2) { |
|||
for (sym in 0..2) { |
|||
pack[i] = [nums[num], shas[sha], cols[col], syms[sym]] |
|||
i = i + 1 |
|||
} |
|||
} |
|||
} |
|||
} |
|||
var printCards = Fn.new { |cards| |
|||
for (card in cards) { |
|||
var cstr = card.toString |
|||
var pl = card[0] != "one" ? "s" : "" |
|||
Fmt.print("$s $s $s $s$s", card[0], card[1], card[2], card[3], pl) |
|||
} |
|||
} |
|||
var findSets = Fn.new { |cards| |
|||
var sets = [] |
|||
var trios = Comb.list(cards, 3) |
|||
for (trio in trios) { |
|||
var t1 = trio[0] |
|||
var t2 = trio[1] |
|||
var t3 = trio[2] |
|||
var found = true |
|||
for (i in 0..3) { |
|||
if (t1[i] == t2[i] && t2[i] == t3[i]) continue |
|||
if (t1[i] != t2[i] && t2[i] != t3[i] && t1[i] != t3[i]) continue |
|||
found = false |
|||
break |
|||
} |
|||
if (found) sets.add(trio) |
|||
} |
|||
Fmt.print("Sets present: $d\n", sets.count) |
|||
if (sets.count > 0) { |
|||
for (set in sets) { |
|||
printCards.call(set) |
|||
System.print() |
|||
} |
|||
} |
|||
} |
|||
var prompt = "Enter number of cards to deal - 3 to 81 or 2 to exit: " |
|||
while(true) { |
|||
Random.new().shuffle(pack) // shuffle for each deal |
|||
var i = Input.integer(prompt, 2, 81) |
|||
if (i == 2) return |
|||
var dealt = pack[0...i] |
|||
System.print() |
|||
printCards.call(dealt) |
|||
System.print() |
|||
findSets.call(dealt) |
|||
}</syntaxhighlight> |
|||
{{out}} |
|||
Sample run: |
|||
<pre> |
|||
Enter number of cards to deal - 3 to 81 or 2 to exit: 4 |
|||
three solid green diamonds |
|||
one solid red diamond |
|||
one solid green oval |
|||
three striped purple squiggles |
|||
Sets present: 0 |
|||
Enter number of cards to deal - 3 to 81 or 2 to exit: 8 |
|||
one open green squiggle |
|||
one open purple squiggle |
|||
one solid green squiggle |
|||
three solid purple squiggles |
|||
three open green squiggles |
|||
one striped red diamond |
|||
one striped green oval |
|||
one striped green squiggle |
|||
Sets present: 1 |
|||
one open green squiggle |
|||
one solid green squiggle |
|||
one striped green squiggle |
|||
Enter number of cards to deal - 3 to 81 or 2 to exit: 12 |
|||
three open green ovals |
|||
three striped green diamonds |
|||
one solid purple oval |
|||
one striped purple diamond |
|||
two open green diamonds |
|||
three solid red diamonds |
|||
three solid red ovals |
|||
three solid green diamonds |
|||
three striped red ovals |
|||
three striped red squiggles |
|||
two open red squiggles |
|||
one solid green oval |
|||
Sets present: 3 |
|||
three striped green diamonds |
|||
one solid purple oval |
|||
two open red squiggles |
|||
one solid purple oval |
|||
two open green diamonds |
|||
three striped red squiggles |
|||
one striped purple diamond |
|||
two open green diamonds |
|||
three solid red diamonds |
|||
Enter number of cards to deal - 3 to 81 or 2 to exit: 2 |
|||
</pre> |