Set puzzle: Difference between revisions

1,563 bytes added ,  9 years ago
+ second Python entry from the second D entry
m (Simpler second D entry)
(+ second Python entry from the second D entry)
Line 1,756:
green one diamond solid
red three oval solid</pre>
 
===Short Version===
{{trans|D}}
<lang python>import random, pprint
from itertools import product, combinations
 
N_DRAW = 9
N_GOAL = N_DRAW // 2
 
deck = list(product("red green purple".split(),
"one two three".split(),
"oval squiggle diamond".split(),
"solid open striped".split()))
 
sets = []
while len(sets) != N_GOAL:
draw = random.sample(deck, N_DRAW)
sets = [cs for cs in combinations(draw, 3)
if all(len(set(t)) in [1, 3] for t in zip(*cs))]
 
print "Dealt %d cards:" % len(draw)
pprint.pprint(draw)
print "\nContaining %d sets:" % len(sets)
pprint.pprint(sets)</lang>
{{out}}
<pre>Dealt 9 cards:
[('purple', 'three', 'squiggle', 'striped'),
('red', 'one', 'squiggle', 'solid'),
('red', 'three', 'diamond', 'striped'),
('red', 'two', 'oval', 'open'),
('purple', 'three', 'squiggle', 'open'),
('green', 'three', 'oval', 'open'),
('purple', 'three', 'squiggle', 'solid'),
('green', 'two', 'squiggle', 'open'),
('purple', 'two', 'oval', 'open')]
 
Containing 4 sets:
[(('purple', 'three', 'squiggle', 'striped'),
('red', 'one', 'squiggle', 'solid'),
('green', 'two', 'squiggle', 'open')),
(('purple', 'three', 'squiggle', 'striped'),
('purple', 'three', 'squiggle', 'open'),
('purple', 'three', 'squiggle', 'solid')),
(('red', 'one', 'squiggle', 'solid'),
('red', 'three', 'diamond', 'striped'),
('red', 'two', 'oval', 'open')),
(('red', 'three', 'diamond', 'striped'),
('green', 'three', 'oval', 'open'),
('purple', 'three', 'squiggle', 'solid'))]</pre>
 
=={{header|Racket}}==