Ctrl K

Расчистить ряд шариков

Сложная
В игре на столе лежит ряд цветных шариков row, а у игрока есть запас шариков reserve. Цвета обозначены буквами: R — красный, Y — жёлтый, B — синий, G — зелёный, W — белый. За один ход игрок берёт любой шарик из запаса и вставляет его в ряд: между любыми двумя соседними шариками или с любого края. Если после этого где-то стоят подряд три или больше шариков одного цвета, вся такая группа исчезает, а ряд смыкается. Если от смыкания образуется новая группа из трёх и более одноцветных шариков, она тоже исчезает — и так далее, пока такие группы не кончатся. Игрок выигрывает, когда ряд становится пустым. Верните наименьшее число шариков из запаса, которое нужно потратить, чтобы расчистить ряд, или -1, если запаса на это не хватит.
Пример 1
row="WRRW", reserve="RW" → 2

Вставляем R к паре RR: WRRRW → WW. Затем W: WWW → пусто. Понадобилось 2 шарика.

Пример 2
row="YGGY", reserve="G" → -1

Единственный шарик G убирает середину, но два Y остаются, а запас кончился.

Пример 3
row="B", reserve="BBB" → 2

Добавляем два B по очереди: BB, затем BBB → пусто. Третий шарик не нужен.

Ограничения
  • 1 ≤ len(row) ≤ 16
  • 0 ≤ len(reserve) ≤ 5
  • row и reserve состоят только из букв R, Y, B, G, W
  • В исходном ряду нет трёх одноцветных шариков подряд
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПроверка контрольной по арифметике СложнаяСамый длинный сбалансированный отрезок скобок СложнаяВсе способы расставить пробелы СложнаяСамый длинный подъём по карте СложнаяНабор слова на кодовом диске Сложная
загружаем Python…
Вход
row="WRRW", reserve="RW"
Ожидается
2

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