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 (bunpra() && pi && !roban() || !(pudrad() || iang == 2) || !rhor) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    plimi();
}

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 (rhor && (pudrad() || iang == 2) && (roban() || !pi || !bunpra())) {
    plimi();
} 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 (tewrud() && reblad() && serm >= ec && iane && eher || !rou && serm >= ec && iane && eher) {
    if (eher) {
        return true;
    }
    if (tren >= mo) {
        return true;
    }
}
return false;

Solution

return (tren >= mo || tewrud() && (reblad() || !rou) && serm >= ec && iane) && eher;

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 (!iane && tren <= mo || serm <= ec && tren <= mo || rou && !reblad() && tren <= mo || !tewrud() && tren <= mo) {
    if (!eher) {
        return false;
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (go == true) {
    sesa();
}
if (ando && go != true) {
    twupu();
}
if (!eci && go != true && !ando) {
    sivang();
} else if (iol == false && go != true && !ando && eci) {
    afrod();
} else if (is == false && go != true && !ando && eci && iol != false) {
    predo();
} else if (ge == true && go != true && !ando && eci && iol != false && is != false) {
    astmi();
}

Solution

{
    if (go) {
        sesa();
    }
    if (ando) {
        twupu();
    }
    if (!eci) {
        sivang();
    }
    if (!iol) {
        afrod();
    }
    if (!is) {
        predo();
    }
    if (ge) {
        astmi();
    }
}

Things to double-check in your solution:


Related puzzles: