Monday Mini-Golf: Seria krótkich golfowych wyzwań, opublikowanych (miejmy nadzieję!) W każdy poniedziałek.
(Przepraszam, ten jest trochę spóźniony.)
Jestem pewien, że większość z was słyszała o odległości Levenshteina , algorytmie do obliczania odległości między dwoma łańcuchami. To wyzwanie polega na wdrożeniu podobnego algorytmu mojego wynalazku *, zwanego odległością anagramową . Główna różnica polega na tym, że kolejność znaków nie ma znaczenia; zamiast tego mierzone są tylko znaki unikalne dla jednego lub drugiego łańcucha.
Wyzwanie
Celem wyzwania jest napisanie programu lub funkcji, która przyjmuje dwa ciągi znaków i zwraca odległość między nimi anagramów. Głównym sposobem na to jest użycie następującej logiki:
- Konwertuj oba ciągi znaków na małe i (opcjonalnie) sortuj znaki każdego z nich alfabetycznie.
- Chociaż ciągi zawierają co najmniej jeden taki sam znak, usuń pierwsze wystąpienie tego znaku z każdego ciągu.
- Dodaj długości pozostałych ciągów i zwróć / wyślij wynik.
Przykład
Jeśli dane wejściowe to:
Hello, world!
Code golf!
Następnie, małe i posortowane, stają się: (według domyślnego sortowania JS; zwróć uwagę na spacje wiodące)
!,dehllloorw
!cdefgloo
Usuwając wszystkie znaki z obu ciągów, otrzymujemy:
,hllrw
cfg
Zatem odległość anagramu między oryginalnymi dwoma łańcuchami = 6 + 3 = 9.
Detale
- Ciągi mogą być pobierane w dowolnym rozsądnym formacie.
- Ciągi będą składały się wyłącznie z drukowalnego ASCII.
- Same łańcuchy nie będą zawierać żadnych białych znaków oprócz zwykłych spacji. (Bez kart, nowych linii itp.)
- Nie musisz używać tego dokładnego algorytmu, o ile wyniki są takie same.
Przypadki testowe
Wejście 1:
Hello, world!
Code golf!
Wyjście 1:
9
Wejście 2:
12345 This is some text.
.txet emos si sihT 54321
Wyjście 2:
0
Wejście 3:
All unique characters here!
Bdfgjkmopvwxyz?
Wyjście 3:
42
Wejście 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
Wyjście 4:
30
Wejście 5:
all lowercase.
ALL UPPERCASE!
Wyjście 5:
8
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy prawidłowy kod w bajtach. Tiebreaker przechodzi do przesyłania, które jako pierwsze osiągnęło końcową liczbę bajtów. Zwycięzca zostanie wybrany w następny poniedziałek, 12 października. Powodzenia!
Edycja: Gratulacje dla zwycięzcy, @isaacg, używając Pytha (ponownie) dla zadziwiającego 12 bajtów!
* Jeśli ten algorytm był używany gdzie indziej i / lub otrzymał inną nazwę, daj mi znać! Nie udało mi się go znaleźć podczas 20-minutowego wyszukiwania.