Montag Minigolf: Eine Reihe von kurzen Code-Golf- Herausforderungen, die (hoffentlich!) Jeden Montag veröffentlicht werden.
(Sorry, das ist ein bisschen spät.)
Ich bin sicher, die meisten von Ihnen haben von Levenshtein distance gehört , einem Algorithmus zur Berechnung des Abstands zwischen zwei Saiten. Nun, bei dieser Herausforderung geht es darum, einen ähnlichen Algorithmus meiner eigenen Erfindung *, genannt Anagramm-Distanz, zu implementieren . Der wesentliche Unterschied besteht darin , dass die Reihenfolge der Zeichen keine Rolle spielt; Stattdessen werden nur die Zeichen gemessen, die für die eine oder die andere Zeichenfolge eindeutig sind.
Herausforderung
Das Ziel der Herausforderung ist es, ein Programm oder eine Funktion zu schreiben, die zwei Zeichenfolgen enthält und den Anagrammabstand zwischen ihnen zurückgibt. Der wichtigste Weg, dies zu tun, ist die folgende Logik zu verwenden:
- Konvertieren Sie beide Strings in Kleinbuchstaben und (optional) sortieren jeweils alphabetisch Charaktere ein.
- Während die Saiten mindestens ein Gleichheitszeichen enthalten, aus jeder Zeichenfolge, die die erste Instanz dieses Zeichen entfernen.
- Addieren Sie die Längen der verbleibenden Zeichenfolgen und geben Sie das Ergebnis aus.
Beispiel
Wenn die Eingaben sind:
Hello, world!
Code golf!
Dann kleingeschrieben und sortiert, diese werden: (von JS-Standard Art, beachten Sie die führenden Leerzeichen)
!,dehllloorw
!cdefgloo
Entfernen alle Zeichen, die in beiden Strings sind wir am Ende mit:
,hllrw
cfg
Somit wird das anagramm Abstand zwischen den ursprünglichen beiden Strings = 6 + 3 = 9.
Einzelheiten
- Die Zeichenfolgen können in jedem vernünftigen Format aufgenommen werden.
- Die Zeichenfolgen bestehen nur aus druckbarem ASCII.
- Die Zeichenfolgen selbst enthalten keine anderen Leerzeichen als normale Leerzeichen. (Keine Tabulatoren, Zeilenumbrüche usw.)
- Sie müssen nicht genau diesen Algorithmus verwenden, solange die Ergebnisse die gleichen sind.
Testfälle
Eingang 1:
Hello, world!
Code golf!
Ausgang 1:
9
Eingang 2:
12345 This is some text.
.txet emos si sihT 54321
Ausgang 2:
0
Eingang 3:
All unique characters here!
Bdfgjkmopvwxyz?
Ausgang 3:
42
Eingang 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
Ausgang 4:
30
Eingang 5:
all lowercase.
ALL UPPERCASE!
Ausgang 5:
8
Wertung
Dies ist Code-Golf , so kürzester gültigen Code in Bytes gewinnt. Tiebreaker geht an Unterwerfung , die zuerst seine letzte Byte - Zählung erreicht. Der Gewinner wird am kommenden Montag, den 12. Oktober, ermittelt. Viel Glück!
Bearbeiten: Herzlichen Glückwunsch an den Gewinner, @isaacg, mit Pyth (wieder) für erstaunliche 12 Bytes!
* Wenn dieser Algorithmus an anderer Stelle verwendet wurde und / oder einen anderen Namen hat, lassen Sie es mich bitte wissen! Ich konnte es mit einer 20-minütigen Suche nicht finden.