Set puzzle: Difference between revisions

GP
(GP)
Line 525:
[Card: RED, THREE, OVAL, STRIPED]
[Card: PURPLE, TWO, SQUIGGLE, SOLID]</pre>
 
=={{header|PARI/GP}}==
<lang parigp>dealraw(cards)=vector(cards,i,vector(4,j,1<<random(3)));
howmany(a,b,c)=hammingweight(bitor(a,bitor(b,c)));
name(v)=Str(["red","green",0,"purple"][v[1]],", ",["oval","squiggle",0,"diamond"][v[2]],", ",["one","two",0,"three"][v[3]],", ",["solid","open",0,"striped"][v[4]]);
check(D,sets)={
my(S=List());
for(i=1,#D-2,for(j=i+1,#D-1,for(k=j+1,#D,
for(x=1,4,
if(howmany(D[i][x],D[j][x],D[k][x])==2,next(2))
);
listput(S,[i,j,k]);
if(#S>sets,return(0))
)));
if(#S==sets,Vec(S),0)
};
deal(cards,sets)={
my(v,s);
until(s,
s=check(v=dealraw(cards),sets)
);
v=apply(name,v);
for(i=1,cards,print(v[i]));
for(i=1,sets,
print("Set #"i);
for(j=1,3,print(" "v[s[i][j]]))
)
};
deal(9,4)
deal(12,6)</lang>
{{output}}
<pre>green, diamond, one, open
purple, squiggle, three, solid
green, squiggle, two, striped
green, oval, one, striped
purple, oval, two, striped
purple, oval, one, open
red, squiggle, one, open
green, squiggle, one, solid
red, diamond, three, solid
Set #1
green, diamond, one, open
green, oval, one, striped
green, squiggle, one, solid
Set #2
green, diamond, one, open
purple, oval, one, open
red, squiggle, one, open
Set #3
purple, squiggle, three, solid
green, squiggle, two, striped
red, squiggle, one, open
Set #4
green, squiggle, two, striped
purple, oval, one, open
red, diamond, three, solid
 
 
purple, squiggle, three, open
red, oval, two, open
purple, oval, two, solid
green, squiggle, two, solid
purple, diamond, two, striped
purple, squiggle, two, solid
green, oval, two, striped
red, oval, one, striped
red, squiggle, two, striped
green, diamond, three, solid
green, diamond, two, open
purple, oval, one, open
Set #1
red, oval, two, open
purple, oval, two, solid
green, oval, two, striped
Set #2
red, oval, two, open
green, squiggle, two, solid
purple, diamond, two, striped
Set #3
purple, oval, two, solid
red, squiggle, two, striped
green, diamond, two, open
Set #4
green, squiggle, two, solid
green, oval, two, striped
green, diamond, two, open
Set #5
purple, diamond, two, striped
green, oval, two, striped
red, squiggle, two, striped
Set #6
red, squiggle, two, striped
green, diamond, three, solid
purple, oval, one, open</pre>
 
=={{header|Perl 6}}==