def bits(n) c = 0 while n > 0 c += n % 2 n /= 2 end c end def path(n) q = [[1, 1]] visited = [] while head = q.shift i, d = head return d if i == n next if i < 1 || n < i || visited[i] visited[i] = n b = bits(i) q << [i + b, d + 1] << [i - b, d + 1] end -1 end p path gets.to_i