Ctrl K

Набрать число на счётчике

Средняя
На счётчике сейчас число start, а нужно получить goal. Есть набор шагов steps. Пока текущее число x лежит в диапазоне от 0 до 1000 включительно, за один ход можно взять любой шаг s из steps и заменить x на одно из: - x + s; - x - s; - x XOR s (побитовое исключающее ИЛИ). Шаги можно использовать сколько угодно раз и в любом порядке. Ход, который выводит число за пределы 0..1000, разрешён, но после него счётчик замирает и ходить дальше нельзя. Верните наименьшее число ходов, за которое из start получается goal, или -1, если это невозможно.
Пример 1
steps=[3, 6], start=1, goal=10 → 2

1 + 3 = 4, затем 4 + 6 = 10. За один ход до 10 не дойти.

Пример 2
steps=[4], start=0, goal=2 → -1

Любой ход с шагом 4 оставляет число кратным 4, поэтому 2 недостижимо.

Пример 3
steps=[400], start=300, goal=1100 → 2

300 → 700 → 1100. Число 1100 уже вне диапазона 0..1000, но это и есть цель, так что всё в порядке.

Ограничения
  • 1 ≤ len(steps) ≤ 1000
  • -10⁹ ≤ steps[i] ≤ 10⁹
  • 0 ≤ start ≤ 1000
  • -10⁹ ≤ goal ≤ 10⁹
  • start ≠ goal
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиОсушение замкнутых прудов СредняяУчастки суши на карте СредняяШаги до ближайшего выхода СредняяМинимум купюр СредняяЦепочки отношений Средняя
загружаем Python…
Вход
steps=[3, 6], start=1, goal=10
Ожидается
2

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 133 теста на сервере, включая скрытые.