# frozen_string_literal: true C = (0..10_000).map { |i| i.digits(2).sum } # Current positions. class Array def solve_rec(rst) # rubocop:todo Metrics/AbcSize if empty? || rst > N -1 else # Avoid block chain is slow. m = map do |x| [x + C[x], x - C[x]] end.flatten.select { _1 > 1 && _1 <= N }.uniq m.include?(N) ? rst + 1 : m.solve_rec(rst + 1) end end end N = gets.to_i RESULT = [1].solve_rec(1) puts RESULT