Drunk Uncle (przepraszam ME i AUS za blokadę regionu) to fikcyjna postać z Saturday Night Live. Często myli słowa z innymi, które brzmią jak one. Aby sprostać temu wyzwaniu, musisz zamienić normalną mowę na pijany.
Algorytm
Tłumaczenie na drunkspeak wymaga zamiany kolejności słów w tekście. Zamiana opiera się na podobieństwie dwóch słów do pijaństwa . Podobieństwo pijaństwa definiuje się jako liczbę liter, które dwa słowa występują przy tych samych wskaźnikach . Jednak dwa identyczne słowa mają podobieństwo do pijaństwa -1 . Na przykład tree
i friend
mają podobieństwo do pijaństwa 2, ponieważ oba mają „r” przy indeksie 1 i „e” przy indeksie 3.
Wszystko, co musisz zrobić, to znaleźć dwa słowa w tekście o najwyższym podobieństwie do pijaństwa, a następnie zamienić je. Po zamianie dwóch terminów nie będą się one już ruszać. Następnie patrzysz na pozostałe warunki, które możesz zamienić, i zamieniasz te, które mają najwyższe podobieństwo do pijaństwa. Robisz to tak długo, aż nie będziesz mógł już wymieniać. Następnie wyprowadzasz (lub zwracasz, dla funkcji) zaktualizowany tekst.
Specyfika
- Dla uproszczenia wprowadzanie to lista słów składających się ze znaków w [A-Za-z]
- Każde wejście zawiera co najmniej jedno słowo
- W dopasowywaniu liter nie jest rozróżniana wielkość liter:
A
pasuje doa
( Uwaga: Ze względu na tę zasadęDog
idog
są identyczne, a zatem mają DS równe -1) - Jeśli wiele par ma najwyższe podobieństwo pijaństwa:
- Ze słów, które mogą zmaksymalizować podobieństwo pijaństwa, wybierz ten z najniższym indeksem na liście
- Połącz to słowo ze słowem o najniższym indeksie, który maksymalizuje podobieństwo pijaństwa
Przykłady
Drunk Uncle needs your help
(tytuł)- S 1 : Pijany <=> twój (DS: 1)
your Uncle needs Drunk help
- S 2 : potrzebuje pomocy <=> (DS: 1)
your Uncle help Drunk needs
- Wynik:
your Uncle help Drunk needs
- S 1 : Pijany <=> twój (DS: 1)
I love fidget spinners
(nudny przykład)- S 1 : Kocham <=> (DS: 0)
love I fidget spinners
- S 2 : fidget <=> błystki (DS: 0)
love I spinners fidget
- S 1 : Kocham <=> (DS: 0)
dog eat dog ear
- S 1 : zjedz <=> ucho (DS: 2)
dog ear dog eat
- S 2 : pies <=> pies (DS: -1)
dog ear dog eat
(ten krok to tylko formalność)
- S 1 : zjedz <=> ucho (DS: 2)
Let me tell you a story
- S 1 : Niech <=> ja (DS: 1)
me Let tell you a story
- S 2 : powiedz <=> ciebie (DS: 0)
me Let you tell a story
- S 3 : historia <=> (DS: 0)
me Let you tell story a
- S 1 : Niech <=> ja (DS: 1)
Too many money and purple people
- S 1 : fioletowe <=> osoby (DS: 4)
Too many money and people purple
- S 2 : wiele <=> pieniędzy (DS: 2)
Too money many and people purple
- S 3 : Zbyt <=> i (DS: 0)
and money many Too people purple
- S 1 : fioletowe <=> osoby (DS: 4)
Daj mi znać, jeśli chcesz podać więcej przykładów.
źródło
Odpowiedzi:
JavaScript -
286279 bajtówMożesz spróbować na JSFiddle .
źródło
Python 3,
285277270267 Bajtów, nie działaPróbowałem dopasować dane wyjściowe do wyzwania, a nie przypadków testowych, ponieważ kilka przypadków testowych jest sprzecznych z wyzwaniem.
Edycja: grał w golfa w „niższą” rzecz.
Edycja: zmieniono podział („”) na podział ()
Edycja: Zdałem sobie sprawę, że to właściwie nie kończy wszystkich rzeczy i chociaż mogę znaleźć pełną roboczą odpowiedź, w międzyczasie równie dobrze mogę dodać, że to tylko jedna iteracja.
źródło
g = str.lower
lubg = lambda s: s.lower()
użyć jej w ten sposób ..split(' ')
można zastąpić.split()
.