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 (!(coum && (cunho() || prard() || secul() < asssa()) || sa && ow == su) && pecMinang()) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    henda();
}

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 (!pecMinang() || coum && (cunho() || prard() || secul() < asssa()) || sa && ow == su) {
    henda();
} 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 (a && da && stipsu() && ol && ai || ba == 7 && ol && ai) {
    if (el && da && stipsu() && ol && ai || ba == 7 && ol && ai) {
        if (ba == 7 && ol && ai) {
            if (ai) {
                return true;
            }
            if (ol) {
                return true;
            }
            if (stipsu()) {
                return true;
            }
        }
        if (da) {
            return true;
        }
        if (sesSache()) {
            return true;
        }
    }
}
return false;

Solution

return (sesSache() || el || a) && da && (stipsu() || ba == 7) && ol && ai;

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 (!ol || ba != 7 && !stipsu() || !da || !a && !el && !sesSache()) {
    if (!ai) {
        return false;
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (esha == true) {
    pued();
} else if (reic == true && esha != true) {
    ousFufe();
}
if (vo <= or && esha != true && reic != true) {
    stosal();
} else if (sti == true && esha != true && reic != true && vo >= or) {
    maljoc();
}
if (zi == true && esha != true && reic != true && vo >= or && sti != true) {
    plir();
} else if (as && esha != true && reic != true && vo >= or && sti != true && zi != true) {
    onted();
}
if (esha != true && reic != true && vo >= or && sti != true && zi != true && !as) {
    rornic();
}

Solution

{
    if (esha) {
        pued();
    }
    if (reic) {
        ousFufe();
    }
    if (vo <= or) {
        stosal();
    }
    if (sti) {
        maljoc();
    }
    if (zi) {
        plir();
    }
    if (as) {
        onted();
    }
    rornic();
}

Things to double-check in your solution:


Related puzzles: