Valide uma grade de palavras cruzadas proposta.
As inscrições devem ser programas completos que simplesmente testam uma grade proposta para determinar se ela atende a um conjunto de condições para tornar felizes os solucionadores de palavras cruzadas.
Entrada
A entrada será o nome de um arquivo que representa a grade de palavras cruzadas. O nome do arquivo de entrada pode ser passado como argumento, na entrada padrão ou por outros meios convencionais que não sejam codificados.
Formato de arquivo de grade: A primeira linha consiste em duas constantes inteiras separadas por espaços em branco M e N. A seguir, há linhas M, cada uma composta por N caracteres (mais uma nova linha) selecionados [#A-Z ]
. Esses caracteres são interpretados de forma a '#'
indicar um quadrado bloqueado, ' '
um quadrado aberto no quebra-cabeça sem conteúdo conhecido e qualquer letra um quadrado aberto que contenha essa letra.
Resultado
O programa não deve produzir saída em grades válidas e sair com o estado de terminação normal. Se a grade proposta falhar, o programa deverá produzir uma mensagem de erro de diagnóstico e sair com um estado de finalização anormal (ou seja, não 0 no unix) se isso for suportado pelo seu ambiente de execução. A mensagem de erro deve indicar qual condição de validade é violada e a localização do quadrado incorreto; você é livre para escolher os meios de transmitir esses fatos.
Condições de validade
As grades válidas não terão respostas (cruzadas ou inativas) com apenas 1 caractere (crédito extra por tornar o tamanho mínimo um parâmetro de entrada) e exibirão a simetria usual. A simetria usual significa que as palavras cruzadas permanecem as mesmas depois (três descrições equivalentes da mesma operação):
- reflexão através do seu próprio centro
- reflexão vertical e horizontalmente
- Rotação de 180 graus
Entrada de teste e saída esperada
Passes:
5 5
# ##
#
#
#
## #
Falha na resposta curta:
5 5
## ##
#
#
#
## ##
Falha na simetria:
5 5
# ##
#
#
# #
## #
a parte, de lado
Este é o segundo de vários desafios relacionados às palavras cruzadas. Pretendo usar um conjunto consistente de formatos de arquivo e criar um conjunto respeitável de utilitários relacionados a palavras cruzadas no processo. Por exemplo, um quebra-cabeça subsequente exigirá a impressão de uma versão ASCII das palavras cruzadas com base na entrada e saída desse quebra-cabeça.
Desafios anteriores desta série: