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 (!e || smon() == pridgi() || !kess || !(ete != 2 && celBeibef() == 8 || ces == eru) && !deng) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    felma();
}

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 ((deng || ete != 2 && celBeibef() == 8 || ces == eru) && kess && smon() != pridgi() && e) {
    felma();
} 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 (saed() && treCio() && hoeri() != 0 && outhar() < 3 || os || ni && outhar() < 3 || os) {
    if (ursi == 7 && outhar() < 3 || os) {
        if (os) {
            if (outhar() < 3) {
                return true;
            }
        }
        if (de) {
            return true;
        }
    }
}
return false;

Solution

return (de || ursi == 7 || saed() && treCio() && (hoeri() != 0 || ni)) && (outhar() < 3 || os);

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 (!ni && hoeri() == 0 && ursi != 7 && !de || !treCio() && ursi != 7 && !de || !saed() && ursi != 7 && !de) {
    if (outhar() > 3) {
        return false;
    }
    if (!os) {
        return false;
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (geot) {
    sorddi();
}
if (hi == true && !geot) {
    losuac();
} else if (as == false && !geot && hi != true) {
    pror();
} else if (osin == false && !geot && hi != true && as != false) {
    pekRer();
} else if (iir >= o && !geot && hi != true && as != false && osin != false) {
    bress();
}
if (ne == false && !geot && hi != true && as != false && osin != false && iir <= o) {
    chorst();
}
if (i == 6 && !geot && hi != true && as != false && osin != false && iir <= o && ne != false) {
    kalcen();
}

Solution

{
    if (geot) {
        sorddi();
    }
    if (hi) {
        losuac();
    }
    if (!as) {
        pror();
    }
    if (!osin) {
        pekRer();
    }
    if (iir >= o) {
        bress();
    }
    if (!ne) {
        chorst();
    }
    if (i == 6) {
        kalcen();
    }
}

Things to double-check in your solution:


Related puzzles: