Set puzzle: Difference between revisions
Content added Content deleted
(solution for immutable issue and optional shuffle) |
(→{{header|Perl 6}}: for clarity use octal to set up original bits, masak++) |
||
Line 435: | Line 435: | ||
{{works with|rakudo|2013-02-11}} |
{{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.) |
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 => |
<lang perl6>enum Color (red => 0o1000, green => 0o2000, purple => 0o4000); |
||
enum Count (one => |
enum Count (one => 0o100, two => 0o200, three => 0o400); |
||
enum Shape (oval => |
enum Shape (oval => 0o10, squiggle => 0o20, diamond => 0o40); |
||
enum Style (solid => |
enum Style (solid => 0o1, open => 0o2, striped => 0o4); |
||
my @deck := (Color.enums X Count.enums X Shape.enums X Style.enums).tree; |
my @deck := (Color.enums X Count.enums X Shape.enums X Style.enums).tree; |