Drill

ProblemsGo › patterns

The reading that only came once

mediumpatternsBit manipulationArraysGo

Every sensor reports twice except one, whose second report went missing. Find the reading with no partner, without keeping the whole batch in memory.

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.

Solve it in Python →

Where you start

func loneReading(batch []int) int {
	
}

Worked examples

CallResult
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
}

The same problem in another language

More patterns problems in Go