Produza um programa para numerar corretamente uma grade 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: um arquivo de texto. A primeira linha consiste em duas constantes inteiras separadas por espaço em branco M
e N
. Após essa linha, são M
linhas, cada uma composta por N
caracteres (mais uma nova linha) selecionados a partir de [#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
A saída será um arquivo de numeração e poderá ser enviada para a saída padrão, para um arquivo cujo nome é derivado do nome do arquivo de entrada, para um arquivo especificado pelo usuário ou para outro destino convencional.
Formato do arquivo de numeração Um arquivo de texto. As linhas iniciadas 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.
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. (Você pode assumir que nenhuma resposta de caractere único existirá no problema.)
- 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. (Portanto, cada intervalo horizontal é numerado no quadrado mais à esquerda e todas as colunas são numeradas no quadrado mais alto.)
Entrada de teste e saída esperada
Entrada:
5 5
# ##
#
#
#
## #
Saída (negligenciando linhas de comentário):
1 1 2
2 1 3
3 2 2
4 2 4
5 2 5
6 3 1
7 3 4
8 4 1
9 4 3
10 5 3
a parte, de lado
Este é o primeiro do que, espera-se, 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.
'\n'
em c em todas as plataformas. A suposição é de que o arquivo de entrada foi produzido no mesmo sistema que o processará, portanto esse problema deve ser transparente. Uma observação geral sobre o code-golf: se você estiver trabalhando em um idioma estranho ou em uma plataforma estranha, anote qualquer coisa que possa surpreender o leitor. As pessoas levarão em consideração isso ao julgar sua submissão.