Set puzzle: Difference between revisions

Content added Content deleted
(→‎{{header|Perl 6}}: for is prettier than map, add works with)
(solution for immutable issue and optional shuffle)
Line 72:
std.exception;
 
const class SetDealer {
protected {
enum Color : ubyte {green, purple, red}
Line 86:
}
 
immutable Card[81] deck;
}
 
this() pure nothrow {
Card[] tmpdeck;
immutable colors = [EnumMembers!Color];
immutable numbers = [EnumMembers!Number];
Line 95 ⟶ 97:
immutable fill = [EnumMembers!Fill];
 
foreach (immutable i,; ref0 di;.. deck.length)
ditmpdeck ~= Card(colors[i / 27],
numbers[(i / 9) % 3],
symbols[(i / 3) % 3],
fill[i % 3]);
// randomShuffle(tmpdeck); /* not pure nothrow */
deck = assumeUnique(tmpdeck);
}
 
Line 107 ⟶ 113:
immutable(Card)[] deal(in uint numCards) const {
enforce(numCards < deck.length, "number of cards too large");
return assumeUnique(deck[].randomSample(numCards).array());
}