Zebra puzzle: Difference between revisions

Content deleted Content added
+ faster second D entry
+ some comments in second D entry
Line 570:
static int diff(in Content A, in Content B, in Test CA, in Test CB)
nothrow {
/*static*/ foreach (H1; EnumMembers!House)
/*static*/ foreach (H2; EnumMembers!House)
if (mat[CA][H1] == A && mat[CB][H2] == B)
return H1 - H2;
Line 591:
return mat[Drink][Three] == Milk;
case Person:
/*static*/ foreach (H; EnumMembers!House)
if ((mat[Person][H] == Norwegian && H != One) ||
(mat[Person][H] == Danish && mat[Drink][H] != Tea))
Line 597:
return true;
case Color:
/*static*/ foreach (H; EnumMembers!House)
if ((mat[Person][H] == English && mat[Color][H] != Red) ||
(mat[Drink][H] == Coffee && mat[Color][H] != Green))
Line 603:
return true;
case Smoke:
/*static*/ foreach (H; EnumMembers!House)
if ((mat[Color][H] == Yellow && mat[Smoke][H] != Dunhill) ||
(mat[Smoke][H] == BlueMaster && mat[Drink][H] != Beer) ||
Line 610:
return true;
case Pet:
/*static*/ foreach (H; EnumMembers!House)
if ((mat[Person][H] == Swedish && mat[Pet][H] != Dog) ||
(mat[Smoke][H] == PallMall && mat[Pet][H] != Bird))
Line 619:
 
void show() {
/*static*/ foreach (H; EnumMembers!House) {
writef("%5s: ", H);
/*static*/ foreach (T; EnumMembers!Test)
writef("%10s ", mat[T][H]);
writeln();
Line 643:
 
void main() {
/*static*/ foreach (i; EnumMembers!Test)
/*static*/ foreach (j; EnumMembers!House)
mat[i][j] = EnumMembers!Content[i * 5 + j];