Monday Mini-Golf: Une série de courts défis de golf à code , affichés (espérons-le!) Tous les lundis.
(Désolé celui-ci est un peu en retard.)
Je suis sûr que la plupart d'entre vous ont entendu parler de la distance de Levenshtein , un algorithme pour calculer la distance entre deux chaînes. Eh bien, ce défi consiste à implémenter un algorithme similaire de ma propre invention *, appelé distance anagramme . La principale différence est que l'ordre des caractères n'a pas d'importance; au lieu de cela, seuls les caractères uniques à une chaîne ou à l'autre sont mesurés.
Défi
Le but du défi est d'écrire un programme ou une fonction qui prend deux chaînes et renvoie la distance entre elles entre les anagrammes. La principale façon de procéder consiste à utiliser la logique suivante:
- Convertissez les deux chaînes en minuscules et (facultativement) triez les caractères de chacun par ordre alphabétique.
- Bien que les chaînes contiennent au moins un caractère égal, supprimez la première instance de ce caractère de chaque chaîne.
- Ajoutez les longueurs des chaînes restantes et retournez / sortez le résultat.
Exemple
Si les entrées sont:
Hello, world!
Code golf!
Ensuite, en minuscules et triés, ceux-ci deviennent: (par le tri par défaut de JS; notez les espaces de tête)
!,dehllloorw
!cdefgloo
En supprimant tous les caractères des deux chaînes, nous nous retrouvons avec:
,hllrw
cfg
Ainsi, la distance anagramme entre les deux chaînes originales = 6 + 3 = 9.
Détails
- Les chaînes peuvent être prises dans n'importe quel format raisonnable.
- Les chaînes seront uniquement constituées d'ASCII imprimables.
- Les chaînes elles-mêmes ne contiendront aucun espace autre que des espaces réguliers. (Pas d'onglets, de nouvelles lignes, etc.)
- Vous n'avez pas besoin d'utiliser cet algorithme exact, tant que les résultats sont les mêmes.
Cas de test
Entrée 1:
Hello, world!
Code golf!
Sortie 1:
9
Entrée 2:
12345 This is some text.
.txet emos si sihT 54321
Sortie 2:
0
Entrée 3:
All unique characters here!
Bdfgjkmopvwxyz?
Sortie 3:
42
Entrée 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
Sortie 4:
30
Entrée 5:
all lowercase.
ALL UPPERCASE!
Résultat 5:
8
Notation
Il s'agit de code-golf , donc le code valide le plus court en octets l'emporte. Tiebreaker passe à la soumission qui a atteint son nombre d'octets final en premier. Le gagnant sera choisi lundi 12 octobre prochain. Bonne chance!
Edit: Félicitations au gagnant, @isaacg, en utilisant (à nouveau) Pyth pour un incroyable 12 octets!
* Si cet algorithme a été utilisé ailleurs et / ou a reçu un autre nom, veuillez me le faire savoir! Je n'ai pas pu le trouver avec une recherche de 20 minutes.