Neste desafio, você removerá palavras duplicadas de cada frase .
Exemplos
Hello Hello, World!
Hello, World!
Code Code! Golf Code
Code! Golf Code
Hello hello World
Hello World
Programming Golf Programming!
Programming Golf!
Especificação
- A entrada será uma sequência de caracteres ASCII.
- Uma sentença é definida como qualquer coisa até o final da string, avanço de linha (
\n
) ou pontuação (.!?
). - Uma palavra é definida como uma sequência de
A-Za-z
. - As palavras não diferenciam maiúsculas de minúsculas (
Hello
==heLlO
).
- Somente a primeira ocorrência de uma palavra em uma frase é mantida.
- Se uma palavra for removida, os espaços antes da palavra removida deverão ser removidos. (por exemplo
A A B
->A B
).
- Como sempre , brechas padrão não são permitidas.
Este é o código-golfe, pelo que o código mais curto em bytes vence!
a b a.
vai para o que?a b.
porque o `a` foi removido.a__b_b_a
, você recebea_b_a
(primeirob
removido) oua__b_a
(segundob
removido)?a__b__
porque o repetidob
é removido e as repetidasa
é removidoRespostas:
Vim, 27 bytes
Observe que os 27 bytes incluem um retorno de carro à direita no final.
Experimente online! Nota lateral: este é um link para um idioma diferente que estou escrevendo chamado "V". O V é principalmente compatível com o vim, portanto, para todos os efeitos, pode contar como um intérprete do vim. Também adicionei um byte
%
para que você possa verificar todos os casos de teste de uma só vez.Explicação:
fonte
JavaScript (ES6), 98
Note que enquanto eu o encontrei, é irritantemente semelhante ao do @ Neil, apenas com a lógica adicional para dividir toda a cadeia de entrada em frases.
Teste
fonte
Retina ,
6646 bytesA contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
Explicação
Como apenas letras devem ser consideradas caracteres de palavras (mas o regex trata dígitos e sublinhados como caracteres de palavras também), precisamos criar nossos próprios limites de palavras. Como a entrada é garantida para conter apenas caracteres ASCII, estou inserindo
·
(fora do ASCII, mas dentro da ISO 8859-1) todas as palavras e removendo-as novamente com as duplicatas. Isso economiza 20 bytes com o uso de lookarounds para implementar limites genéricos de palavras.Isso corresponde a cada palavra e a envolve
·
.Este é dois passos compactados em um.
<sp>*(·[a-z]+·)(?<=\1[^.!?¶]+)
corresponde a uma palavra completa (garantida pela inclusão de·
na correspondência), juntamente com todos os espaços anteriores, desde que (conforme garantido pelo lookbehind), possamos encontrar a mesma palavra em algum lugar anteriormente na frase. (¶
Corresponde a um avanço de linha.)A outra parte é simplesmente a
·
, que corresponde a todos os limites de palavras artificiais que não foram correspondidos como parte da primeira metade. Em ambos os casos, a correspondência é simplesmente removida da sequência.fonte
C, 326 bytes
Quem precisa de expressões regulares?
fonte
Perl 6 , 104 bytes
Uso:
Explicação
fonte
Perl 5, 57 bytes
Código de 56 bytes + 1 para
-p
Uso:
Talvez precise ser +1, atualmente estou assumindo que haverá apenas espaços na entrada, sem guias.
fonte
\s
... Ainda não está nem perto da sua resposta da retina!