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 ((!aedDontu() || !(tre && iap) && et) && !(melod() != pec && lathra())) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    stia();
}

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 (melod() != pec && lathra() || (!et || tre && iap) && aedDontu()) {
    stia();
} 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 (od && qis || fe <= 7) {
    if (!ca && taenod() == 5 && qis || fe <= 7 || !saes && qis || fe <= 7) {
        if (!saes && qis || fe <= 7) {
            if (fe <= 7) {
                if (qis) {
                    return true;
                }
            }
            if (taenod() == 5) {
                return true;
            }
        }
        if (no < 9) {
            return true;
        }
    }
}
return false;

Solution

return ((no < 9 || !ca) && (taenod() == 5 || !saes) || od) && (qis || fe <= 7);

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 (!od && saes && taenod() != 5 || ca && no > 9) {
    if (!qis) {
        return false;
    }
    if (fe >= 7) {
        return false;
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (roth == true) {
    swur();
}
if (ew == true && roth != true) {
    praPla();
} else if (fong == true && roth != true && ew != true) {
    gecas();
} else if (nen == true && roth != true && ew != true && fong != true) {
    dathag();
} else if (geri && roth != true && ew != true && fong != true && nen != true) {
    fraji();
} else if (roth != true && ew != true && fong != true && nen != true && !geri) {
    orro();
}

Solution

{
    if (roth) {
        swur();
    }
    if (ew) {
        praPla();
    }
    if (fong) {
        gecas();
    }
    if (nen) {
        dathag();
    }
    if (geri) {
        fraji();
    }
    orro();
}

Things to double-check in your solution:


Related puzzles: