BattleBlock Theater 게임 에는 때때로 일반화 된 버전의 Lights Out 퍼즐이 포함되어 있습니다 . 3 개의 인접한 블록이 있으며 각 블록은 막대를 포함하여 1과 4 사이의 레벨을 나타냅니다. 예 :
|
||||
||
블록을 터치하면 해당 블록과 인접 블록이 레벨을 증가시킵니다 (4에서 1로 다시 감김). 세 블록 모두 동일한 레벨을 표시하면 퍼즐이 해결됩니다 (어떤 레벨은 중요하지 않음). 블록을 터치하는 순서는 중요하지 않으므로 각 블록을 얼마나 자주 터치하는지에 대한 솔루션을 나타냅니다. 위 입력에 대한 최적의 솔루션은 다음과 201
같습니다.
| --> || --> ||| |||
|||| | || |||
|| || || --> |||
일부 숫자의 경우 모든 구성을 해결할 수는 없지만 게임은 여러 블록을 매우 쉽게 일반화합니다.
도전
일련의 블록 레벨이 주어지면 퍼즐을 풀기 위해 각 블록을 얼마나 자주 터치해야하는지 반환하십시오. 예를 들어 위의 예는 그대로 주어지고 결과적으로 142
산출 201
될 수 있습니다. 솔루션이없는 경우 선택한 모든 일관된 결과를 반환 -1
합니다. 예를 들어 빈 문자열과 같이 모든 잠재적 솔루션과 구별됩니다 .
함수 또는 프로그램을 작성하고, STDIN, 명령 행 인수 또는 함수 인수를 통해 편리한 목록 또는 문자열 형식으로 입력하고, 리턴 값을 통해 또는 STDOUT으로 인쇄하여 유사하게 출력 할 수 있습니다.
코드는 합리적인 시스템에서 1 분 이내에 모든 테스트 사례에 대한 올바른 결과를 반환해야합니다. (이것은 완전히 엄격한 제한이 아니므로 솔루션이 1 분에서 10 초가 걸리더라도 괜찮지 만 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
내가 아는 한, 블록의 수가 0 mod 3 또는 1 mod 3 인 각 입력에 대해 정확히 4 개의 솔루션이 있으며 2 mod 3 인 0 또는 16 개의 솔루션이 있습니다.