Mini-golfe de segunda-feira: Uma série de desafios curtos de golfe com código , publicados (espero!) Toda segunda-feira.
(Desculpe, este está um pouco atrasado.)
Tenho certeza que a maioria de vocês já ouviu falar da distância de Levenshtein , um algoritmo para calcular a distância entre duas cordas. Bem, esse desafio é sobre a implementação de um algoritmo semelhante de minha própria invenção *, chamado distância do anagrama . A principal diferença é que a ordem dos personagens não importa; em vez disso, apenas os caracteres exclusivos de uma sequência ou de outra são medidos.
Desafio
O objetivo do desafio é escrever um programa ou função que pegue duas cordas e retorne a distância do anagrama entre elas. A principal maneira de fazer isso é usar a seguinte lógica:
- Converta as duas strings em minúsculas e (opcionalmente) classifique os caracteres de cada um em ordem alfabética.
- Enquanto as seqüências contêm pelo menos um caractere igual, remova a primeira instância desse caractere de cada sequência.
- Adicione os comprimentos das seqüências restantes e retorne / produza o resultado.
Exemplo
Se as entradas são:
Hello, world!
Code golf!
Em seguida, em minúsculas e classificadas, elas se tornam: (pela classificação padrão de JS; observe os espaços iniciais)
!,dehllloorw
!cdefgloo
Removendo todos os caracteres que estão nas duas cadeias, terminamos com:
,hllrw
cfg
Assim, a distância do anagrama entre as duas cordas originais = 6 + 3 = 9.
Detalhes
- As seqüências de caracteres podem ser obtidas em qualquer formato sensato.
- As seqüências consistirão apenas em ASCII imprimível.
- As cadeias de caracteres em si não conterão nenhum espaço em branco além dos espaços regulares. (Sem guias, novas linhas etc.)
- Você não precisa usar esse algoritmo exato, desde que os resultados sejam os mesmos.
Casos de teste
Entrada 1:
Hello, world!
Code golf!
Saída 1:
9
Entrada 2:
12345 This is some text.
.txet emos si sihT 54321
Saída 2:
0
Entrada 3:
All unique characters here!
Bdfgjkmopvwxyz?
Saída 3:
42
Entrada 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
Saída 4:
30
Entrada 5:
all lowercase.
ALL UPPERCASE!
Saída 5:
8
Pontuação
Este é o code-golf , pelo que o código válido mais curto em bytes vence. O desempatador vai para o envio que atingiu sua contagem final de bytes primeiro. O vencedor será escolhido na próxima segunda-feira, 12 de outubro. Boa sorte!
Edit: Parabéns ao vencedor, @isaacg, usando Pyth (novamente) por 12 bytes surpreendentes !
* Se este algoritmo foi usado em outro lugar e / ou recebeu outro nome, informe-me! Não consegui encontrá-lo com uma pesquisa de 20 minutos.