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;


const class SetDealer {
class SetDealer {
protected {
protected {
enum Color : ubyte {green, purple, red}
enum Color : ubyte {green, purple, red}
Line 86: Line 86:
}
}


immutable Card[81] deck;
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("DEALT %d CARDS:", cards.length);
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)