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 ((se || epli) && (eaede() != 8 || !a) || hil != 6 && giac) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    sira();
}

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 ((!giac || hil == 6) && (a && eaede() == 8 || !epli && !se)) {
    sira();
} 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 (eougnu() && eec == baod() && cer) {
    if (losi == sa && !qiol) {
        if (!qiol) {
            return true;
        }
        if (!imic) {
            return true;
        }
        if (!viel) {
            return true;
        }
    }
}
return false;

Solution

return (!viel && !imic || losi == sa) && !qiol || eougnu() && eec == baod() && cer;

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 (eec != baod() && qiol || losi != sa && imic || viel || !eougnu() && qiol || losi != sa && imic || viel) {
    if (losi != sa && imic || viel) {
        if (qiol) {
            return false;
        }
    }
    if (!cer) {
        return false;
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (bahu) {
    moap();
}
if (!al && !bahu) {
    hecSermes();
} else if (sne && !bahu && al) {
    lald();
} else if (oic > ur && !bahu && al && !sne) {
    sunos();
} else if (am == true && !bahu && al && !sne && oic < ur) {
    evoEsci();
} else if (!bahu && al && !sne && oic < ur && am != true) {
    epal();
}

Solution

{
    if (bahu) {
        moap();
    }
    if (!al) {
        hecSermes();
    }
    if (sne) {
        lald();
    }
    if (oic > ur) {
        sunos();
    }
    if (am) {
        evoEsci();
    }
    epal();
}

Things to double-check in your solution:


Related puzzles: