Set puzzle: Difference between revisions
Content added Content deleted
(D entry: removed assumeUnique, added immutable and const, used foreach, shorter lines, and other small changes) |
(→{{header|D}}: removed some of the constness because the code wouldn't compile otherwise) |
||
Line 72: | Line 72: | ||
std.exception; |
std.exception; |
||
class SetDealer { |
|||
protected { |
protected { |
||
enum Color : ubyte {green, purple, red} |
enum Color : ubyte {green, purple, red} |
||
Line 86: | Line 86: | ||
} |
} |
||
Card[81] deck; |
|||
} |
} |
||
Line 107: | Line 107: | ||
immutable(Card)[] deal(in uint numCards) const { |
immutable(Card)[] deal(in uint numCards) const { |
||
enforce(numCards < deck.length, "number of cards too large"); |
enforce(numCards < deck.length, "number of cards too large"); |
||
return deck[].randomSample(numCards).array(); |
return assumeUnique(deck[].randomSample(numCards).array()); |
||
} |
} |
||
Line 158: | Line 158: | ||
const cards = dealer.deal(); |
const cards = dealer.deal(); |
||
writefln(" |
writefln("\nDEALT %d CARDS:\n", cards.length); |
||
foreach (c; cards) |
foreach (c; cards) |
||
writeln(cast()c); |
writeln(cast()c); |
||
Line 164: | Line 164: | ||
immutable sets = dealer.findSets(cards); |
immutable sets = dealer.findSets(cards); |
||
immutable len = sets.length; |
immutable len = sets.length; |
||
writefln("\nFOUND %d %s:", len, len == 1 ? "SET" : "SETS"); |
writefln("\nFOUND %d %s:\n", len, len == 1 ? "SET" : "SETS"); |
||
foreach (set; sets) { |
foreach (set; sets) { |
||
foreach (c; set) |
foreach (c; set) |
||
Line 173: | Line 173: | ||
{{out|Sample output}} |
{{out|Sample output}} |
||
<pre>DEALT 9 CARDS: |
<pre>DEALT 9 CARDS: |
||
Card(green, two, diamond, open) |
Card(green, two, diamond, open) |
||
Card(green, three, oval, striped) |
Card(green, three, oval, striped) |
||
Line 184: | Line 185: | ||
FOUND 4 SETS: |
FOUND 4 SETS: |
||
Card(green, two, diamond, open) |
Card(green, two, diamond, open) |
||
Card(purple, two, squiggle, open) |
Card(purple, two, squiggle, open) |