Set puzzle: Difference between revisions

→‎{{header|Perl 6}}: bring up-to-date, since .combinations is now built-in
(reorder Perl vs Perl 6)
(→‎{{header|Perl 6}}: bring up-to-date, since .combinations is now built-in)
Line 1,187:
 
=={{header|Perl 6}}==
This uses the <tt>combine</tt> routine from [[Combinations#Perl_6]] task. The trick here is to allocate three different bits for each enum, with the result that the cards of a matching set OR together to produce a 4-digit octal number that contains only the digits 1, 2, 4, or 7. This OR is done by funny looking <tt>[+|]</tt>, which is the reduction form of <tt>+|</tt>, which is the numeric bitwise OR. (Because Perl 6 stole the bare <tt>|</tt> operator for composing junctions instead.)
{{works with|rakudo|2013-02-11}}
This uses the <tt>combine</tt> routine from [[Combinations#Perl_6]] task. The trick here is to allocate three different bits for each enum, with the result that the cards of a matching set OR together to produce a 4-digit octal number that contains only the digits 1, 2, 4, or 7. This OR is done by funny looking <tt>[+|]</tt>, which is the reduction form of <tt>+|</tt>, which is the numeric bitwise OR. (Because Perl 6 stole the bare <tt>|</tt> operator for composing junctions instead.)
<lang perl6>enum Color (red => 0o1000, green => 0o2000, purple => 0o4000);
enum Count (one => 0o100, two => 0o200, three => 0o400);
enum Shape (oval => 0o10, squiggle => 0o20, diamond => 0o40);
enum Style (solid => 0o1, open => 0o2, striped => 0o4);
 
my @deck := (Color.enums X Count.enums X Shape.enums X Style.enums).tree;
 
sub MAIN($DRAW = 9, $GOAL = $DRAW div 2) {
sub show-cards(@c) { for @c -> $c { printf " %-6s %-5s %-8s %s\n", $c_».key }for @c }</lang>
my @combinations = combine(3, [^$DRAW]);
 
my @combinations = combine(3, [^$DRAW].combinations(3);
 
my @draw;
repeat until (my @sets) == $GOAL {
Line 1,206 ⟶ 1,208:
}
}
 
say "Drew $DRAW cards:";
show-cards @draw;
Line 1,212 ⟶ 1,215:
show-cards @cards;
}
}</lang>
}
 
sub show-cards(@c) { for @c -> $c { printf " %-6s %-5s %-8s %s\n", $c».key } }</lang>
{{out}}
<pre>Drew 9 cards:
Anonymous user