3 ms·
For his logical combination problem, I think the solution is to use enums: State nextState(bool a, bool b, bool c, bool d) { enum A { A_NO = 0, A_Y
by pierrebai 8y ago
For his logical combination problem, I think the solution is to use enums:
State nextState(bool a, bool b, bool c, bool d)
{
enum A { A_NO = 0, A_YES = 1 } As[] = { A_NO, A_YES };
enum B { B_NO = 0, B_YES = 2 } Bs[] = { B_NO, B_YES };
enum C { C_NO = 0, C_YES = 4 } Cs[] = { C_NO, C_YES };
enum D { D_NO = 0, D_YES = 8 } Ds[] = { D_NO, D_YES };
switch (As[a]) + Bs[b] + Cs[c] + Ds[d])
{
case A_NO + B_NO + C_NO + D_NO : return X; // 0
case A_NO + B_NO + C_NO + D_YES: return X; // 1
case A_NO + B_NO + C_YES + D_NO : return X; // 2
case A_NO + B_NO + C_YES + D_YES: return X; // 3
case A_NO + B_YES + C_NO + D_NO : return X; // 4
case A_NO + B_YES + C_NO + D_YES: return X; // 5
case A_NO + B_YES + C_YES + D_NO : return X; // 6
case A_NO + B_YES + C_YES + D_YES: return X; // 7
case A_YES + B_NO + C_NO + D_NO : return X; // 8
case A_YES + B_NO + C_NO + D_YES: return X; // 9
case A_YES + B_NO + C_YES + D_NO : return X; // 10
case A_YES + B_NO + C_YES + D_YES: return X; // 11
case A_YES + B_YES + C_NO + D_NO : return X; // 12
case A_YES + B_YES + C_NO + D_YES: return X; // 13
case A_YES + B_YES + C_YES + D_NO : return X; // 14
case A_YES + B_YES + C_YES + D_YES: return X; // 15
}
}
Let the compiler reorgonise the switch for efficiency. Do not: skip combination. Do not: reorder. Do not: remove the number that help see we got all cases. The compiler will error out if a case is duplicated. I wish we could make it detect missing cases too!