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> |