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.Respostas:
Ruby -
210139 caracteresTestado com ruby 1.9.
fonte
./temp.ruby:4: wrong argument type Symbol (expected Proc) (TypeError)
.ruby1.9 test.rb
.PHP - 175 caracteres
fonte
Pitão,
194177176172 caracteresfonte
h.join(f)
eu achonext(f)
em vez def.readline()
se você for> = 2,6 outra coisaf.next()
echo test_input_file_name | python golf.py
está errado?C ++
270264260256253 charUsar:
Bem formatado:
Tentei ler as palavras cruzadas inteiras de uma só vez e usar um único loop.
Mas o custo de compensar o caractere '\ n superou quaisquer ganhos:
Comprimido: 260 caracteres
fonte
C,
184189 caracteresNão há muito a dizer aqui; a lógica é bastante básica. O programa leva o nome do arquivo na entrada padrão em tempo de execução. (É tão irritante que o programa precise trabalhar com um nome de arquivo e não possa simplesmente ler o conteúdo do arquivo diretamente da entrada padrão. Mas quem paga o flautista chama a música!)
O
fscanf()
padrão estranho é minha tentativa de varrer a primeira linha completa, incluindo a nova linha, mas não incluindo os espaços em branco à esquerda na linha a seguir. Há uma razão pela qual ninguém usascanf()
.fonte
5 5
, você assume os 5 primeiros como a largura, quando deveria ter escolhido a segunda (o que não importa, é claro, neste exemplo).Implementação de referência:
c99 ungolfed e mais de 2000 caracteres, incluindo vários frobs de depuração ainda lá.
fonte
PerlTeX : 1143 caracteres (mas ainda não joguei)
Ele precisa de um arquivo chamado
grid.txt
com a especificação e compile comfonte
Scala 252:
compilação e invocação:
fonte
SHELL SCRIPT
E / S de amostra:
./numberCrossWord.sh crosswordGrid.txt
fonte
/bin/sh
queixas sobre a linha 11. Você poderia dizer qual shell está usando (incluindo o número da versão)?ANSI C 694 caracteres
Esta é uma versão em C que procura execuções horizontais ou verticais de dois espaços que se encontram contra a borda ou contra um caractere '#'.
O arquivo de entrada é obtido do stdin e deve ser:
Quaisquer dicas para compactar isso serão recebidas com gratidão.
Saída para o exemplo fornecido
fonte