Booleans and conditionals: Correct Solution


Part 1

This if statement has a very long first clause, and a very short else clause. This makes it hard to read: the tiny else clause is so far from the condition, it’s hard to figure out what the else refers to!

if ((ue || or != motwa()) && (!cer || gacno() || !(ujoo || i) && !(grii() || ur))) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    cilel();
}

Improve readability by refactoring this conditional so that its two clauses are swapped: what is now the second clause (the else clause) comes first, and the first clause comes second.

Solution

if ((grii() || ur || ujoo || i) && !gacno() && cer || or == motwa() && !ue) {
    cilel();
} else {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
}

Things to double-check in your solution:


Part 2

Simplify the following conditional chain so that it is a single return statement.

if (he && scip() || rer <= pooga() && !jir || en && !jir || !mi && !jir || cesa == psoCais() && !cin && scip() || rer <= pooga() && !jir || en && !jir || !mi && !jir) {
    if (rer <= pooga() && !jir || en && !jir || !mi && !jir) {
        if (scip()) {
            return true;
        }
    }
    if (!eoud) {
        return true;
    }
}
return false;

Solution

return (!eoud || he || cesa == psoCais() && !cin) && (scip() || (rer <= pooga() || en || !mi) && !jir);

Bonus challenge: rewrite the if/else chain above so that instead of consisting of many return true; statements with one return false; at the end, it has many return false; statements with one return true; at the end.

Solution

if (cin && !he && eoud || cesa != psoCais() && !he && eoud) {
    if (mi && !en && rer >= pooga() && !scip()) {
        if (!scip()) {
            return false;
        }
        if (jir) {
            return false;
        }
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (sa == true) {
    eler();
} else if (hesh == false && sa != true) {
    flild();
}
if (pri == false && sa != true && hesh != false) {
    bobess();
} else if (on == ulfo && sa != true && hesh != false && pri != false) {
    dism();
} else if (ie == true && sa != true && hesh != false && pri != false && on != ulfo) {
    endan();
}
if (lo < 8 && sa != true && hesh != false && pri != false && on != ulfo && ie != true) {
    drobo();
} else if (de == false && sa != true && hesh != false && pri != false && on != ulfo && ie != true && lo > 8) {
    hese();
} else if (mism == 5 && sa != true && hesh != false && pri != false && on != ulfo && ie != true && lo > 8 && de != false) {
    blema();
}

Solution

{
    if (sa) {
        eler();
    }
    if (!hesh) {
        flild();
    }
    if (!pri) {
        bobess();
    }
    if (on == ulfo) {
        dism();
    }
    if (ie) {
        endan();
    }
    if (lo < 8) {
        drobo();
    }
    if (!de) {
        hese();
    }
    if (mism == 5) {
        blema();
    }
}

Things to double-check in your solution:


Related puzzles: