Este desafio é baseado no jogo Layerz.
Dado, no stdin ou como argumento de função, uma matriz retangular de células 2D em que cada célula contém um espaço em branco (você pode optar por usar 0s em vez de espaços em branco sem penalidade), 1, 2, 3 ou 4 ; encontre uma maneira de dividi-lo em regiões válidas (conforme definido abaixo), de modo que cada célula não em branco esteja contida em exatamente uma região. Em seguida, imprima a solução encontrada em qualquer formato razoável. Se não houver solução, pare sem produzir saída ou produza um único valor de falsey e pare.
Qualquer um dos seguintes constitui uma região válida:
- Uma única célula contendo 1
- Uma célula contendo um 2 e exatamente um de seus vizinhos ortogonais não vazios
- Uma célula contendo um 3 e exatamente dois de seus vizinhos ortogonais não vazios
- Uma célula contendo 4 e exatamente três de seus vizinhos ortogonais não vazios
Isso é código-golfe , então a resposta mais curta e válida, em bytes, vence.
Alguns casos de teste:
1. Um tanto trivial:
E esta é a solução, com cada região em uma cor diferente:
2. Mais interessante
Este tem mais de uma solução, mas aqui está um deles:
3. Um menor, contendo espaços em branco, que não possui soluções (dependendo de você usar um dos dois para "capturar" os três ou os três para capturar dois dos dois, você fica com um par de dois não adjacentes [e, portanto, não agrupáveis] ou um único dois por si só):
Como essa grade não tem soluções, seu programa deve parar sem produzir nenhuma saída quando receber essa grade.
4. Esta (com as duas principais deslocadas uma célula para a esquerda) possui uma solução:
Solução:
(O canto inferior direito 2 é usado para "capturar" os 3)
5. Porque precisávamos de um caso de teste com alguns quatro:
Uma solução:
4
s se essas são entradas válidas.