The reading that only came once
Every sensor reports twice except one, whose second report went missing. Find the reading with no partner, without keeping the whole batch in memory.
- Every value appears exactly twice, except one that appears once.
- The batch is in no particular order.
- Return the value that appears once.
- An empty batch returns 0.
loneReading(batch: list<int>) → int
Go needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.
Where you start
func loneReading(batch []int) int {
}
Worked examples
| Call | Result |
|---|---|
loneReading([]int{4, 1, 2, 1, 2}) | 4 |
loneReading([]int{2, 2, 1}) | 1 |
loneReading([]int{7}) | 7 |
loneReading([]int{}) | 0 |
Hint
A value exclusive-or’d with itself is zero, and order does not matter. Fold the whole batch together with xor and the pairs cancel out.
Reference solution in Go
func loneReading(batch []int) int {
lone := 0
for _, reading := range batch {
lone ^= reading
}
return lone
}