In my blog post yesterday, I shared this puzzle:
Add or modify exactly one operator in the following code such that it prints exactly 6 dots.
int i; for (i = 0; i < 6; i) printf(".");
Let me first list all the possible solutions I know.

for (i = 0; i < 6; i++)

for (i = 0; i < 6; ++i)

for (i = 0; i < 6; i)

for (i = 0; i + 6; i)
for (i = 0; i ^= 6; i)
The last solution in the list is not quite obvious and needs a little analysis to understand why it works. To generalize the problem, let us use n instead of 6. So, the loop becomes:
int i; for (i = 0; i ^= n; i) printf(".");If we use XOR to represent bitwise exclusive OR, first i is set to (n XOR i) before we enter the loop. Since, the initial value of i is 0, this amounts to setting i = n before we enter the loop.
Thereafter, every iteration prints a dot and sets i = n XOR (i  1). If we try to represent two such consecutive iterations as one operation, this composite operation prints two dots and sets i = n XOR ((n XOR (i  1)) − 1) where i on the RHS is the value of i before the pair of iterations and i on the LHS is the value of i after the pair of iterations complete. … (A)
Before we proceed further, note that
 k XOR 1 = k − 1 for an odd integer k. … (1)
 k XOR 1 = k + 1 for an even integer k. … (2)
 a XOR b is an odd integer if a and b have different parities. … (3)
I'm not presenting the proof of these results since they are very trivial. We'll use these results in the discussion below.
If n is odd, i is odd initially because i is set to n before we enter the loop. We'll show that i always remains odd and never changes for every pair of iterations.
i = n XOR ((n XOR (i − 1)) − 1) … from (A)
= n XOR ((n XOR (i − 1)) XOR 1) … from (1) and (3)
= (n XOR n) XOR ((i − 1) XOR 1) … from associativity of XOR
= 0 XOR ((i − 1) + 1) … from (2) and (3)
= i
Note that i begins as i = n. Since, i is set to n again after every two iterations, the loop never terminates.
If n is even, i is even initially because i is set to n before we enter the loop. We'll show that i always remains even and decrements by 2 for every pair of iterations.
i = n XOR ((n XOR (i − 1)) − 1) … from (A)
= n XOR ((n XOR (i − 1)) XOR 1) … from (1) and (3)
= (n XOR n) XOR ((i − 1) XOR 1) … from associativity of XOR
= 0 XOR ((i − 1) − 1) … from (1) and (3)
= i − 2
Since i begins as i = n and decrements by 2 for every two iterations, the loop terminates after n iterations thereby printing n dots.
No comments