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 (!(o == 2) && nud && u || hodo != 8 && trece() && !masm) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    slel();
}

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 ((masm || !trece() || hodo == 8) && (!u || !nud || o == 2)) {
    slel();
} 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 (ajeEsess() > 5 && tolid() && di != 5 && spiOepro()) {
    if (diod() && spiOepro() || !ce && spiOepro()) {
        if (spiOepro()) {
            return true;
        }
        if (fi) {
            return true;
        }
    }
}
return false;

Solution

return (fi || diod() || !ce || ajeEsess() > 5 && tolid() && di != 5) && spiOepro();

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 (di == 5 && ce && !diod() && !fi || !tolid() && ce && !diod() && !fi || ajeEsess() < 5 && ce && !diod() && !fi) {
    if (!spiOepro()) {
        return false;
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (tene == true) {
    spul();
}
if (stos == true && tene != true) {
    acva();
} else if (ses == true && tene != true && stos != true) {
    dasmla();
}
if (en == false && tene != true && stos != true && ses != true) {
    acoc();
}
if (!nuss && tene != true && stos != true && ses != true && en != false) {
    greto();
} else if (tene != true && stos != true && ses != true && en != false && nuss) {
    noss();
}

Solution

{
    if (tene) {
        spul();
    }
    if (stos) {
        acva();
    }
    if (ses) {
        dasmla();
    }
    if (!en) {
        acoc();
    }
    if (!nuss) {
        greto();
    }
    noss();
}

Things to double-check in your solution:


Related puzzles: