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 ((ceor < hawsoc() || siac) && ceck() && !inse && (iolPrenar() && qosfra() && !uph || vunk)) {
    ...
    ...
    // Pretend there is lots of code here
    ...
    ...
} else {
    hefi();
}

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 (!vunk && (uph || !qosfra() || !iolPrenar()) || inse || !ceck() || !siac && ceor > hawsoc()) {
    hefi();
} 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 (!ca && cani() && thiwu() || athi && to == gocsto() && thiwu() || ba >= 0 && thiwu() || !al && thiwu()) {
    if (athi && to == gocsto() && thiwu() || ba >= 0 && thiwu() || !al && thiwu()) {
        if (thiwu()) {
            return true;
        }
        if (cani()) {
            return true;
        }
    }
    if (ines()) {
        return true;
    }
    if (te) {
        return true;
    }
}
return false;

Solution

return (te && ines() || !ca) && (cani() || athi && to == gocsto() || ba >= 0 || !al) && thiwu();

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 (al && ba <= 0 && to != gocsto() && !cani() || !athi && !cani() || ca && !ines() || !te) {
    if (!thiwu()) {
        return false;
    }
}
return true;

Part 3

Simplify the following messy chain of conditionals:

if (o == false) {
    trehia();
} else if (e == true && o != false) {
    cuass();
}
if (pe == false && o != false && e != true) {
    nicBeb();
} else if ((sa > ashi) == true && o != false && e != true && pe != false) {
    sermsa();
} else if ((romu != va) == true && o != false && e != true && pe != false && (sa > ashi) != true) {
    sespat();
}
if (rass == false && o != false && e != true && pe != false && (sa > ashi) != true && (romu != va) != true) {
    feaEidass();
} else if (ro == true && o != false && e != true && pe != false && (sa > ashi) != true && (romu != va) != true && rass != false) {
    sarso();
}
if (cle == false && o != false && e != true && pe != false && (sa > ashi) != true && (romu != va) != true && rass != false && ro != true) {
    permuc();
}

Solution

{
    if (!o) {
        trehia();
    }
    if (e) {
        cuass();
    }
    if (!pe) {
        nicBeb();
    }
    if (sa > ashi) {
        sermsa();
    }
    if (romu != va) {
        sespat();
    }
    if (!rass) {
        feaEidass();
    }
    if (ro) {
        sarso();
    }
    if (!cle) {
        permuc();
    }
}

Things to double-check in your solution:


Related puzzles: