Entrada:
Duas strings (NOTA: a ordem de entrada é importante).
Saída:
Ambas as palavras / frases começam em linhas com uma linha vazia entre elas. Eles 'andam' horizontalmente 'próximos um do outro'. Mas quando eles têm o mesmo caráter na mesma posição, eles se cruzam e depois continuam andando 'próximos um do outro'.
Confuso você diz? Vamos dar um exemplo:
Entrada: Words crossing over
& Ducks quacking
:
Word quack n
s i g
Duck cross n over
Desculpe a pintura ruim do MS ..
Regras do desafio:
- Sempre voltamos a andar em linha reta depois de atravessarmos antes de atravessarmos novamente (veja o caso de teste acima {1} - onde
ing
é igual, mas depois de atravessarmosi
, primeiro precisamos voltar andando em linha reta (ignorando assimn
), antes que possamos atravessar novamenteg
). - As entradas podem ter diferentes comprimentos; nesse caso, a mais longa continua andando em linha reta (consulte os casos de teste 1, 2, 4 e 6).
- Ambas as entradas podem ser as mesmas (consulte o caso de teste 3).
- As entradas não conterão nenhuma guia nem novas linhas.
- Os espaços são ignorados como caracteres iguais (como um caso de aresta) ; nesse caso, o próximo caractere (sem espaço) depois disso - se houver - está passando por cima (consulte os casos de teste 3, 5 e 6).
- As entradas não podem ter caracteres adjacentes (fora do espaço) na mesma posição; nesse caso, ambos caminham em linha reta horizontalmente (consulte os casos de teste 2).
- Mesmo que o primeiro caractere seja igual, sempre começamos duas linhas separadas (consulte os casos de teste 3 e 6).
- Espaços à direita e uma única linha nova à direita são opcionais.
- Você pode assumir que as entradas conterão apenas caracteres ASCII imprimíveis (novas linhas e tabulações excluídas).
- As entradas são caso-sensível, de modo
A
ea
não são iguais, e não vai atravessar (ver caso de teste 7). - Ambos os comprimentos das entradas sempre serão pelo menos 2.
- Entrada e saída podem estar em qualquer formato razoável. Pode ser uma única String com novas linhas; um String-array / lista; impresso para STDOUT; Matriz 2D de caracteres; etc.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
1. Input: "Words crossing over" & "Ducks quacking"
1. Output:
Word quack n
s i g
Duck cross n over
2. Input: "bananas" & "ananas"
2. Output:
bananas
ananas
3. Input: "I see my twin!" & "I see my twin!"
3. Output:
I e y w n
s e m t i !
I e y w n
4. Input: "Is the weather nice?" & "Not really, no.."
4. Output:
Is th ally, no..
e
Not r weather nice?
5. Input: "Codegolf & Programming Puzzles" & "The golfer might solve puzzles"
5. Output:
Code o f & Programming P z l s
g l u z e
The o fer might solve p z l s
6. Input: "Can you turn the lights off?" & "Can you try to solve this?"
6. Output:
C n o urn the ve s off?
a y u t l t
C n o ry to so igh his?
7. Input: "one Ampere" & "two apples"
7. Output:
one Am les
p
two ap ere
8. Input: "Words crossing" & "Words Quacking"
8. Output:
W r s cross n
o d i g
W r s Quack n
Carvão , 69 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Python 2 ,
217210 bytes-1 byte graças a officialaimm
Experimente online!
fonte
s=' '
Haskell,
142138 bytesExperimente online!
Como funciona:
fonte
g 0
. Com relação à palavra que faltava: "a" como em "variável chamada a", mas isso é realmente confuso, então eu a reformulei.a
. :) Eu pessoalmente usoa
nas minhas explicações ao indicar para as variáveis, embora geralmente seja claro o suficiente sem. Obrigado pelo esclarecimento, e eu estava realmente esperando uma correção muito fácil para isso.'
a substituição de um back-tick) em um comentário, o que eu queria dizer .. (Então, eu uso back-ticks em torno de variáveis, dentro dos meus blocos de código.)JavaScript (ES6), 112 bytes
Ungolfed:
Casos de teste:
Mostrar snippet de código
fonte
APL (Dyalog) , 50 bytes
Experimente online!
⍵⍀⍨¯1*⍳4
dá a matriz:(os pontos representam espaços). Suas colunas serão rotacionadas em diferentes quantidades, de modo que as três primeiras linhas acabem parecendo o resultado desejado - daí o
3↑
próximo começo. O restante do algoritmo calcula os valores de rotação.Dentro dos parâmetros:
3↑⍵
cria uma matriz comoe
2=⌿
compara suas linhas em pares, ou seja, primeira string vs segunda string e segunda string vs a linha all-spaces.Estamos interessados em saber onde o primeiro é verdadeiro (1) e o último falso (0); portanto, reduzimos
>⌿
para obter um vetor booleano chamadoa
.Agora, em cada trecho de 1 s, precisamos zerar as ocorrências pares, porque duas torções não podem ocorrer próximas uma da outra. Primeiro, obtemos uma numeração como:
falando vagamente, substituindo
a[i]
pora[i]*max(a[i-1]+1, a[i])
até que o resultado se estabilize:,{⍵⌈a×1+1,¯1↓⍵}⍣≡
e tomamos esse mod 2:2|
Agora sabemos onde as torções ocorrerão. Copiamos cada um
1
para a esquerda -2∨/
(em pares "ou"):e calcular as somas parciais -
+\
Isso nos dá a quantidade de rotação de colunas que precisávamos no começo. O módulo 4 está implícito.
fonte
Perl 5 , 211 bytes
Experimente online!
# Perl 5 , 234 bytescorrigido o bug que Kevin apontou
Experimente online!
fonte
"Can you turn the lights off?" & "Can you try to solve this?"
, parece que estou recebendo um erro:Modification of non-creatable array value attempted, subscript -1 at .code.tio line 1, <> line 2.
isso é um bug ou estou fazendo algo incorreto? Aqui está o TIO.05AB1E , 31 bytes
Resposta da porta do Japt do @ETHproductions , mas com duas pequenas diferenças:
1) Aceito a entrada como uma lista 2D de caracteres em vez de uma lista de strings.
2) O
counter_variable
em 05AB1E é 0 por padrão, em vez de 11 (ou 3) como oB
em Japt; portanto,NĀ
é adicionado como verificação adicional dentro do mapa (e eu giro para a direita em vez de para a esquerda).Experimente online ou verifique todos os casos de teste .
Explicação:
fonte