Set puzzle: Difference between revisions

Content added Content deleted
(→‎{{header|Tcl}}: Added zkl)
Line 2,439: Line 2,439:
(red,oval,two,striped)
(red,oval,two,striped)
(red,squiggle,two,open)
(red,squiggle,two,open)
</pre>

=={{header|zkl}}==
{{trans|D}}
<lang zkl>const nDraw=9, nGoal=(nDraw/2); // Basic
var [const] UH=Utils.Helpers; // baked in stash of goodies
deck:=UH.cprod4("red green purple".split(), // cartesian product of 4 lists of lists
"one two three".split(),
"oval squiggle diamond".split(),
"solid open striped".split());
reg draw,sets,N=0;
do{ N+=1;
draw=deck.shuffle()[0,nDraw]; // one draw per shuffle
sets=UH.pickNFrom(3,draw) // 84 sets of 3 cards (each with 4 features)
.filter(fcn(set){ // list of 12 items (== 3 cards)
set[0,4].zip(set[4,4],set[8,4]) // -->4 tuples of 3 features
.pump(List,UH.listUnique,"len", // 1,3 (good) or 2 (bad)
'==(2)) // (F,F,F,F)==good
.sum(0) == 0 // all 4 feature sets good
});
}while(sets.len()!=nGoal);
println("Dealt %d cards %d times:".fmt(draw.len(),N));
draw.pump(Void,fcn(card){ println(("%8s "*4).fmt(card.xplode())) });
println("\nContaining:");
sets.pump(Void,fcn(card){ println((("%8s "*4 + "\n")*3).fmt(card.xplode())) });</lang>
{{out}}
<pre>
Dealt 9 cards 271 times:
red one oval solid
green one diamond striped
red two oval open
purple two squiggle striped
green three diamond open
purple three squiggle solid
purple one diamond striped
green three squiggle solid
green one squiggle open

Containing:
red one oval solid
purple two squiggle striped
green three diamond open

red one oval solid
purple one diamond striped
green one squiggle open

green one diamond striped
red two oval open
purple three squiggle solid

red two oval open
purple one diamond striped
green three squiggle solid
</pre>
</pre>