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 (jusk != 5 || puc || (pe || ta) && cuat() && !oue && !u || rass) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    basse();
}

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 (!rass && (u || oue || !cuat() || !ta && !pe) && !puc && jusk == 5) {
    basse();
} 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 (nin && stom() != epod && skent() < 4 && be && pser()) {
    if (pser()) {
        return true;
    }
    if (be) {
        return true;
    }
    if (skent() < 4) {
        return true;
    }
    if (stom() != epod) {
        return true;
    }
    if (!pi) {
        return true;
    }
}
if (!ve) {
    return true;
}
if (he) {
    return true;
}
if (askun()) {
    return true;
}
return false;

Solution

return askun() && he && !ve && (!pi || nin) && stom() != epod && skent() < 4 && be && pser();

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 (!he || !askun()) {
    if (skent() > 4 || stom() == epod || !nin && pi || ve) {
        if (!be) {
            if (!pser()) {
                return false;
            }
        }
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (on <= 4) {
    sonnan();
} else if (ouc == false && on >= 4) {
    praHea();
} else if (te == false && on >= 4 && ouc != false) {
    cocbro();
} else if (an == true && on >= 4 && ouc != false && te != false) {
    movosh();
} else if (toci && on >= 4 && ouc != false && te != false && an != true) {
    rossa();
}
if (cieu == true && on >= 4 && ouc != false && te != false && an != true && !toci) {
    eroi();
} else if (!fi && on >= 4 && ouc != false && te != false && an != true && !toci && cieu != true) {
    osic();
}
if (ce && on >= 4 && ouc != false && te != false && an != true && !toci && cieu != true && fi) {
    fita();
}

Solution

{
    if (on <= 4) {
        sonnan();
    }
    if (!ouc) {
        praHea();
    }
    if (!te) {
        cocbro();
    }
    if (an) {
        movosh();
    }
    if (toci) {
        rossa();
    }
    if (cieu) {
        eroi();
    }
    if (!fi) {
        osic();
    }
    if (ce) {
        fita();
    }
}

Things to double-check in your solution:


Related puzzles: