Игра BattleBlock Theatre иногда содержит головоломку, которая является обобщенной версией Lights Out . У вас есть три смежных блока, каждый из которых указывает уровень от 1 до 4 включительно с барами, например:
|
||||
||
Если вы дотронетесь до блока, то этот блок, как и любой соседний блок, будет увеличивать свой уровень (переход от 4 до 1). Загадка решается, когда все три блока показывают один и тот же уровень (не имеет значения, какой уровень). Поскольку порядок, в котором вы касаетесь блоков, не имеет значения, мы обозначаем решение по частоте касания каждого блока. Оптимальным решением для вышеуказанного ввода будет 201
:
| --> || --> ||| |||
|||| | || |||
|| || || --> |||
Игра очень легко обобщает любое количество блоков, хотя для некоторых чисел не все конфигурации разрешимы.
Соревнование
Учитывая последовательность уровней блоков, верните, как часто нужно нажимать на каждый блок, чтобы решить головоломку. Например, приведенный выше пример будет приведен как 142
и может дать 201
в результате. Если решения не существует, верните какой-либо непротиворечивый вывод по вашему выбору, который отличается от всех потенциальных решений, например, -1
пустую строку.
Вы можете написать функцию или программу, получить ввод через STDIN, аргумент командной строки или аргумент функции, в любом удобном формате списка или строки и аналогичным образом вывести через возвращаемое значение или распечатать в STDOUT.
Ваш код должен возвращать правильные результаты для всех тестовых случаев в течение минуты на приемлемой машине. (Это не совсем строгий предел, поэтому, если ваше решение занимает минуту и десять секунд, это нормально, но если это займет 3 минуты, это не так. Хороший алгоритм легко решит их за секунды.)
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
Примеры
Решения не являются уникальными, поэтому вы можете получить разные результаты.
Input Output
1 0
11 00
12 No solution
142 201
434 101
222 000
4113 0230
32444 No solution
23432 10301
421232 212301
3442223221221422412334 0330130000130202221111
22231244334432131322442 No solution
111111111111111111111222 000000000000000000000030
111111111111111111111234 100100100100100100100133
412224131444114441432434 113013201011001101012133
Насколько я знаю, есть ровно 4 решения для каждого входа, где количество блоков равно 0 mod 3 или 1 mod 3, и есть 0 или 16 решений, где это 2 mod 3.