Este é um desafio adicional ao desafio de gerar quebra-cabeças Loopy . Você pode resolver esse desafio antes de tentar o desafio mais difícil no link anterior.
O objetivo deste desafio é validar a solução para um quebra-cabeça maluco. Por favor, pegue toda a documentação sobre o que é um quebra-cabeça maluco no link anterior. Um quebra-cabeça em loop resolvido é formatado de maneira muito semelhante à saída de um envio válido para o desafio "gerar quebra-cabeças em loop" e pode ser assim:
+-+-+ +-+ +-+ +
| | | |2|3|
+-+ + + + + +-+
2| | | |2| 3|
+ + +-+ + + +-+
2| 2 1|3| |
+-+ +-+ +-+ +-+
|2 | | 1 2|
+ +-+ +-+ +-+ +
| |2 1 2|3|3| |
+ + +-+ +-+ +-+
| | |3|2 1
+ +-+ +-+-+-+-+
| 2 2 |
+-+-+-+-+-+-+-+
O caminho que compõe a solução é marcado com |
e -
caracteres entre os +
caracteres.
Especificação de entrada
Seu programa receberá um quebra-cabeça em loop com uma solução formatada como o exemplo acima como entrada. Seu programa deve inferir o tamanho do quebra-cabeça a partir da entrada. Você pode fazer as seguintes suposições sobre a entrada:
- O quebra-cabeça tem nada menos que 2 e não mais que 99 células em qualquer direção
- Assim, cada linha tem um comprimento máximo de 199 caracteres, sem incluir o (s) caractere (s) de nova linha
- Assim, a entrada contém um máximo de 99 linhas
- cada linha pode terminar após o último caractere imprimível ou ser preenchida com caracteres de espaço em branco, para ter um comprimento de até 2 · y + 1 caracteres, em que y é o número de células na direção horizontal
- cada posição com as coordenadas x e y ainda contém um
+
caractere - as posições horizontal ou verticalmente adjacentes às posições que contêm
+
caracteres contêm um caractere de espaço em branco, estão atrás do final da linha ou contêm um-
caractere se horizontalmente adjacente ou um|
caractere se verticalmente adjacente - todas as outras posições são ou por trás da extremidade da linha ou conter um dos caracteres
,
0
,1
,2
, ou3
- todas as linhas são finalizadas com o (s) caractere (s) de nova linha padrão da sua plataforma
- existe exatamente uma nova linha à direita
A entrada deve ser recebida de uma das seguintes maneiras:
- Da entrada padrão
- Como o valor de um parâmetro nomeado
p
em uma solicitação HTTP POST - Como o conteúdo de um formulário HTML
- Como o conteúdo de um arquivo nomeado
p
em um diretório definido pela implementação - De uma maneira definida por implementação em tempo de execução, se os quatro primeiros não estiverem disponíveis
- Codificado se o seu idioma não fornecer meios de receber entrada
Especificação de saída
Seu programa será finalizado para todas as entradas correspondentes à especificação de entrada e calculará se a solução para o quebra-cabeça está correta. Seu programa deve gerar o resultado da computação como um valor booleano de uma das seguintes maneiras:
- Como um status de saída igual a zero (a solução é válida) ou diferente de zero (a solução é inválida)
- Como o caractere
y
(solução é válida) oun
(solução é inválida) seguido por zero ou mais caracteres arbitrários emitidos de uma maneira definida pela implementação
O comportamento do seu programa não é especificado ao encontrar entrada não formatada de acordo com a especificação de entrada.
Pontuação
A pontuação do seu programa é o número de caracteres em sua origem, exceto caracteres em branco omitíveis e comentários omitíveis. Você é incentivado a recuar seu envio, para que seja mais fácil ler para os outros e comentar sua solução, para que seja mais fácil seguir.
Os envios que não seguem a especificação de entrada ou saída ou geram resultados incorretos são inválidos.
0
- cabeças também é um número válido para uma célula.Respostas:
GolfScript, 133 caracteres
Espera a entrada do STDIN e imprime
y
para uma solução válida en
para uma inválida. Executa a tarefa usando principalmente substituição de cadeia na grade ou com versões rotacionadas da grade.Código anotado:
fonte
C #
803579bytesO programa completo, leituras do STDIN, deve lidar com qualquer esquema de nova linha comum, desde que tenha feeds de linha. Agradecemos ao HackerCow por apontar que não preciso anexar uma nova linha em uma pergunta diferente, solicitando que eu a remova aqui e economize 4 bytes
Código de golfe:
O código executa 3 verificações, primeiro verificando o número de linhas ao redor de cada número e se cada junção tem 0 ou 2 linhas à frente, e depois todas as linhas são unidas.
Código formatado:
fonte
Cobra - 514
Verifica se todos os números têm o número certo de linhas ao lado e, em seguida, percorre um caminho ao redor das linhas e verifica se houve algum erro.
fonte