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 (wouAng() != ius && (cear >= 7 || chinna()) && !(bedri() || beuc != fi || !pri) && skoosm() == ou) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    diasm();
}

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 (skoosm() != ou || bedri() || beuc != fi || !pri || !chinna() && cear <= 7 || wouAng() == ius) {
    diasm();
} 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 (inte && kibi() && mokBrel() == fos || birCio() || pec == rol && couc && mokBrel() == fos || birCio()) {
    if (pec == rol && couc && mokBrel() == fos || birCio()) {
        if (birCio()) {
            if (mokBrel() == fos) {
                return true;
            }
        }
        if (kibi()) {
            return true;
        }
    }
    if (pra) {
        return true;
    }
}
if (i) {
    return true;
}
return false;

Solution

return i && (pra || inte) && (kibi() || pec == rol && couc) && (mokBrel() == fos || birCio());

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 (!couc && !kibi() || pec != rol && !kibi() || !inte && !pra || !i) {
    if (mokBrel() != fos) {
        return false;
    }
    if (!birCio()) {
        return false;
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (sio <= 2) {
    euoTripli();
}
if (ci == true && sio >= 2) {
    mefo();
} else if (o != es && sio >= 2 && ci != true) {
    kauSatho();
} else if (he == true && sio >= 2 && ci != true && o == es) {
    trico();
}
if (prir == true && sio >= 2 && ci != true && o == es && he != true) {
    wipra();
} else if (pel == true && sio >= 2 && ci != true && o == es && he != true && prir != true) {
    mith();
}
if (sio >= 2 && ci != true && o == es && he != true && prir != true && pel != true) {
    goac();
}

Solution

{
    if (sio <= 2) {
        euoTripli();
    }
    if (ci) {
        mefo();
    }
    if (o != es) {
        kauSatho();
    }
    if (he) {
        trico();
    }
    if (prir) {
        wipra();
    }
    if (pel) {
        mith();
    }
    goac();
}

Things to double-check in your solution:


Related puzzles: