Set puzzle: Difference between revisions
Content added Content deleted
m (Better section name for second D entry) |
(Better second D entry) |
||
Line 662: | Line 662: | ||
===Short Version=== |
===Short Version=== |
||
This requires the third solution module of the Combinations Task. |
This requires the third solution module of the Combinations Task. |
||
{{trans|Perl6}} |
|||
<lang d>void main() { |
<lang d>void main() { |
||
import std.stdio, std.algorithm, std.range, std.random, |
import std.stdio, std.algorithm, std.range, std.random, combinations3; |
||
std.traits, std.string, combinations3; |
|||
enum nDraw = 9, nGoal = nDraw / 2; |
enum nDraw = 9, nGoal = nDraw / 2; |
||
⚫ | |||
enum Color {red = octal!1000, green = octal!2000, purple = octal!4000} |
|||
"one two three".split, |
|||
⚫ | |||
enum Shape {oval = octal!10, squiggle = octal!20, diamond = octal!40} |
|||
"solid open striped".split).array; |
|||
enum Style {solid = octal!1, open = octal!2, striped = octal!4} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
alias Card = Unqual!(ForeachType!(typeof(deck))); |
|||
⚫ | |||
sets = draw.combinations(3).array.filter!((string[][] cs) => |
|||
auto show(in Card[] cards) { |
|||
cs.array.transposed.all!(t => t.array.sort().uniq.count % 2)).array; |
|||
⚫ | |||
foreach (immutable c; cards) |
|||
writefln(" %-6s %-5s %-8s %s", c[]); |
|||
} |
} |
||
writefln("Dealt %d cards:\n%(%-(%8s %)\n%)\n", draw.length, draw); |
|||
const combs = nDraw.iota.array.combinations(3).array; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
do { |
|||
⚫ | |||
//const bits = draw.map!(c => [c[]].sum).array; |
|||
const bits = draw.map!(c => c[0] + c[1] + c[2] + c[3]).array; |
|||
sets = combs |
|||
.filter!(ci => "%o".format(bits.indexed(ci).reduce!q{a | b}).countchars("1247") == 4) |
|||
.map!(ci => draw.indexed(ci).array).array; |
|||
⚫ | |||
writeln("Drew ", nDraw, " cards:"); |
|||
show(draw); |
|||
foreach (immutable i, const cards; sets) { |
|||
writefln("\nSet %d:", i + 1); |
|||
show(cards); |
|||
} |
|||
}</lang> |
}</lang> |
||
{{out}} |
{{out}} |
||
<pre> |
<pre>Dealt 9 cards: |
||
purple one oval solid |
|||
red three squiggle solid |
|||
purple three diamond solid |
|||
green one squiggle open |
|||
green two squiggle open |
|||
⚫ | |||
⚫ | |||
purple one squiggle striped |
|||
purple two squiggle striped |
|||
green three diamond striped |
|||
Containing: |
|||
Set 1: |
|||
⚫ | |||
⚫ | |||
green one squiggle open |
|||
⚫ | |||
purple three squiggle open |
|||
⚫ | |||
Set 2: |
|||
green two squiggle open |
|||
purple one squiggle striped |
|||
⚫ | |||
⚫ | |||
Set 3: |
|||
green one squiggle open |
|||
purple two squiggle striped |
|||
⚫ | |||
red two oval striped |
|||
Set 4: |
|||
purple one squiggle striped |
|||
green three diamond striped</pre> |
|||
⚫ | |||
</pre> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |