Set, the card game: Difference between revisions

Added Wren
(Add Python)
(Added Wren)
Line 297:
 
-----</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>
9,486

edits