Considere a seguinte grade padrão de palavras cruzadas 15 × 15 .
Podemos representar isso na arte ASCII usando #
blocos e (espaço) quadrados brancos.
# #
# #
#
# #
### ## ##
## #
# #
# ##
## ## ###
# #
#
# #
# #
Dada uma grade de palavras cruzadas no formato de arte ASCII acima, determine quantas palavras ela contém. (A grade acima tem 78 palavras. É o quebra - cabeça do New York Times da última segunda-feira .)
Uma palavra é um grupo de dois ou mais espaços consecutivos em execução na vertical ou na horizontal. Uma palavra começa e termina com um bloco ou a borda da grade e sempre corre de cima para baixo ou da esquerda para a direita, nunca na diagonal ou para trás. Observe que as palavras podem abranger toda a largura do quebra-cabeça, como na sexta linha do quebra-cabeça acima. Uma palavra não precisa estar conectada a outra palavra.
Detalhes
- A entrada sempre será um retângulo contendo os caracteres
#
ou(espaço), com linhas separadas por uma nova linha (
\n
). Você pode assumir que a grade é composta por 2 caracteres ASCII imprimíveis distintos em vez de#
e.
- Você pode assumir que há uma nova linha à direita opcional. Os caracteres de espaço à direita contam, pois afetam o número de palavras.
- A grade nem sempre será simétrica e pode ser todos os espaços ou todos os blocos.
- Teoricamente, seu programa deve funcionar em uma grade de qualquer tamanho, mas para esse desafio nunca será maior que 21 × 21.
- Você pode considerar a grade como entrada ou o nome de um arquivo que contém a grade.
- Pegue a entrada dos argumentos stdin ou da linha de comando e envie para stdout.
- Se preferir, você pode usar uma função nomeada em vez de um programa, tomando a grade como argumento de string e produzindo um número inteiro ou string via stdout ou retorno de função.
Casos de teste
Entrada:
# # #
Saída:
7
(Existem quatro espaços antes de cada um#
. O resultado seria o mesmo se cada sinal numérico fosse removido, mas o Markdown removeria espaços de outras linhas vazias.)Entrada:
## # ##
Saída:
0
(palavras de uma letra não contam.)Entrada:
###### # # #### # ## # # ## # #### #
Resultado:
4
Entrada: ( quebra - cabeça do Sunday NY Times de 10 de maio )
# ## # # # # # # # ### ## # # ## # # # ## # ## # ## # # ### ## # ## ## # ## ### # # ## # ## # ## # # # ## # # ## ### # # # # # # # ## #
Resultado:
140
Pontuação
O menor código em bytes vence. O desempate é o post mais antigo.
py -3 slip.py regex.txt input.txt
epy -3 slip.py regex.txt input.txt no
, o que é três bytes (incluindo o espaço antesn
)Haskell, 81 bytes
Usa espaços
como caracteres de bloco e qualquer outro caractere (sem espaço em branco) como uma célula vazia.
Como funciona: divida a entrada na lista de palavras nos espaços. Pegue um
1
para cada palavra com pelo menos 2 caracteres e some esses1
s. Aplique o mesmo procedimento à transposição (dividida em\n
) da entrada. Adicione os dois resultados.fonte
JavaScript ( ES6 ) 87121
147Crie a transposição da sequência de entrada e anexe-a à entrada e conte as sequências de 2 ou mais espaços.
Execute o trecho no Firefox para testar.
Créditos @IsmaelMiguel, uma solução para ES5 (122 bytes):
fonte
F=z=>{for(r=z.split(/\n/),i=0;i<r[j=0][L='length'];i++)for(z+='#';j<r[L];)z+=r[j++][i];return~-z.split(/ +/)[L]}
? Tem 113 bytes. Seu regex foi substituído por/ +/
(2 espaços), Oj=0
foi adicionado nofor
loop 'pai' e, em vez de usar a sintaxeobj.length
, mudei para usoL='length'; ... obj[L]
, que é repetido 3 vezes.F=z=>
precisar usarvar F=(z,i,L,j,r)=>
). Eu testei no IE11 e funciona!/\n/
por uma sequência de modelos por uma nova linha real entre elas. Isso economiza 1 byte, pois você não precisa escrever a sequência de escape.Pitão,
151413 bytesEstou usando
como separador e
#
como caracteres de preenchimento, em vez de seu significado oposto ao OP. Experimente online: DemonstraçãoEm vez de
#
como caractere de preenchimento, isso também aceita letras. Assim, você pode realmente pegar as palavras cruzadas resolvidas e imprimir o número de palavras. E se você remover ol
comando, ele imprimirá todas as palavras. Teste aqui: quebra-cabeça do Sunday NY Times de 10 de maioExplicação
fonte