Escreva um programa para produzir um arquivo contendo uma grade de palavras cruzadas na qual o usuário possa imprimir e trabalhar o quebra-cabeça.
Entrada
Um nome de arquivo representando um arquivo de grade de palavras cruzadas e, opcionalmente, um segundo nome de arquivo representando um arquivo de numeração de palavras cruzadas. A entrada deve ser aceita por um meio convencional para o seu ambiente de programação: argumentos de linha de comando, entrada padrão, formulários da web etc.
Você pode assumir que as palavras cruzadas foram validadas e se estiver usando um arquivo de numeração que corresponda à grade fornecida .
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.
Formato do arquivo de numeração As linhas que começam com '#' são ignoradas e podem ser usadas para comentários. Todas as outras linhas contêm uma guia separada tripleto i
, m
, n
onde i
representa um número a ser impresso sobre a grade, e m
e n
representam a linha e a coluna do quadrado onde deve ser impresso. O número de linhas e colunas começa em 1.
Resultado
A saída será um arquivo no qual o usuário poderá imprimir e trabalhar com palavras cruzadas. Serão aceitos ASCII, postscript, pdf, png e qualquer outro formato razoável, mas todos devem respeitar estas regras:
- Deve haver uma regra em torno de todo o quebra-cabeça e entre cada par de quadrados.
- Quadrados bloqueados devem ser preenchidos sombriamente.
- No quadrado de jogo que representa o início de uma pista numerada (do outro lado ou para baixo) deve ser fornecido com um número no canto superior esquerdo do quadrado, deixando a maior parte do quadrado em branco para a peça escrever. Observe que a grade típica publicado nos jornais terá muitas dezenas de pistas e poderá ter mais de 100.
A saída será apenas da grade, sem a lista de pistas.
A saída deve ser enviada para um destino convencional (um arquivo cujo nome é derivado do nome do arquivo de entrada, produzido como uma página da web, etc.)
Caso de teste
Dada uma contribuição de
5 5
# ##
#
#
#
## #
o canto inicial de uma saída ASCII aceitável pode se parecer com isso
+-----+-----+-----+---
|#####|1 |2 |###
|#####| | |###
|#####| | |###
+-----+-----+-----+---
|#####|3 | |4
|#####| | |
|#####| | |
+-----+-----+-----+---
|6 | |#####|
| | |#####|
Quem usa formatos gráficos deve se inspirar nas fontes impressas usuais.
Esquema de numeração
Uma grade numerada corretamente possui as seguintes propriedades:
- A numeração começa em 1.
- Nenhuma coluna ou extensão de quadrados abertos é numerada.
- Os números serão encontrados em ordem de contagem, digitalizando da linha superior para a inferior, levando cada linha da esquerda para a direita.
a parte, de lado
Este é o terceiro 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.
Desafios anteriores desta série: