Your antivirus squad is up against
a particularly sadistic bit
of malicious code
that’s hijacked your mainframe.
What you’ve learned from other infected
systems— right before they went dark—
is that it likes to toy with antivirus
agents in a very peculiar way.
It corrupts one of the 4 disks
that run your mainframe,
represented by lights showing
which are on and which off.
Then it selects one member
of the antivirus squad— this’ll be you—
and brings them into the mainframe.
It tells them which disk it corrupted,
allows the agent to switch
a single disk on or off,
then immediately de-rezzes the agent.
Your squad can make an all-out attack
to break into the mainframe
and destroy one disk
before they’re wiped out.
If they destroy the corrupted one,
the malware will be defeated.
Any others, and the virus will erase
the entire system.
The lights are only visible
within the mainframe,
so you won’t know until you get there
which, if any, are on.
How can you communicate,
with your single action,
which of the 4 disks
has been corrupted?
Pause here to figure it out for yourself.
Answer in 3
Answer in 2
Answer in 1
The setting is a big clue
for one solution.
Using binary code— the base two
numbering system that only uses 1s and 0s—
we can represent each of the 4 disks
with a 2-bit binary number
ranging from 00 for zero
to 11 for three.
What we’re looking for now is some sort
of mathematical operation
that can take the lit disks as input,
and give the corrupted disk as an output.
Let’s consider one possibility.
Say that the corrupted disk was this one,
and when you come in, no lights are on.
You could turn 11 on
to indicate that disk.
Okay, what if you came in
and 11 was already on?
You have to switch one light.
Which seems like the most innocuous
to change?
Probably 00,
in that if you were to add 00 and 11,
you’d still get 11.
So maybe the key is to think of addition
of binary numbers,
with the sum of the lit disks
communicating the corrupted disk number.
This works great, until we start
with a different hypothetical.
What if 00 was the corrupted disk,
and 01 and 10 were on?
Here, the sum of the lit disks is 11.
But we need to change this to a sum
of 00 with the flip of one switch.
We have four options:
turning switch 00 on gives us 11.
Turning 01 off takes us back to 10,
and turning 10 off gives 01.
None of those work.
Turning switch 11 on gives us 110
by standard binary addition.
But we don’t really want
three digit numbers.
So what if— to keep the result
a two digit number—
we break the rules a bit
and let this sum equal 22.
That’s not a binary number,
but if we regard 2s as the same as 0s,
that does indicate the correct disk.
So this suggests a strategy:
look at the sum of all the lighted disks
we see,
regarding 2s as 0s.
If it’s already the correct result,
flip 00,
and if not, find the switch that will
make the sum correct.
You can see for yourself that any
starting configuration
can sum to any number from 00 to 11
with a flip of a switch.
The reason this works is related
to a concept called parity.
Parity tells you whether a given value
is even or odd.
In this case, the values whose
parity we’re considering
are the number of 1s in each digit place
of our binary sums.
And that’s why we can say that 2 and 0,
both even numbers,
can be treated as equivalents.
By adding or subtracting
00, 01, 10, or 11,
we can change the parity of either,
both, or neither digit,
and create the disk number we want.
What’s incredible about this solution
is that it works for any mainframe
whose disks are a power of two.
With 64 you could turn each activated disk
into a 6-bit binary number
and sum the 1s in each column,
regarding any even sum as the same as 0
and any odd sum as 1.
1,048,576 disks would be daunting,
but entirely doable.
Luckily, your mainframe is much smaller.
You make the valiant sacrifice
and your team rushes in,
destroying the corruption
and freeing the system.