Hacker News new | ask | show | jobs
by foota 330 days ago
It's a solution to the problem: given a list of n-1 unique integers 1 through n, find the missing integer.

The trick is that when you xor all of the numbers in the list together and then xor that with the xor of 1 through n, the result is the missing number.

2 comments

>the xor of 1 through n

XOR[0...x] = (x&1^(x&2)>>1)+x*(~x&1)

Of course, you don't have to do this with xor, you can do it with just addition (mod wordmax) and the well known identity attributed to gauss will support you.

I know XOR only in the context of binary numbers. Is this "XOR trick" more general?
It works on the binary representation so it actually works for any data type, even composite types! It won't resolve pointers/references/aliases of course
Every number on computers is converted to binary internally, so yes this works on decimal numbers too.
> so yes this works on decimal numbers too.

Given that rounding tends to be necessary that seems extremely questionable in practice. Similar to how the equality operator in most (probably all) languages can be used with floating point numbers but in most cases that is a very bad idea.

Integers don’t have to be stored as floating point.
And yet a great many applications that use numbers with a decimal point will involve rounding and/or inexact matches.