Cenzory są powszechnym narzędziem stosowanym w interwebach. Ale często cenzurują zbyt wiele słowa, przez co przekleństwa stają się niejednoznaczne dla czytelnika. A czasem nie cenzurują wystarczająco, więc słowa nadal obrażają. Twoim zadaniem jest to naprawić.
Twoje zadanie
Napisz program / funkcję / cokolwiek, co wymaga dwóch list i ciągu. Pierwsza lista będzie słowniku wszystkich słów w swoim języku, takich jak: ["hello", "goodbye", "belgium", "offensive", "jumping", "hypercool"]
. Kolejnym będzie podzbiorem pierwszej listy zawierającej wszystkie obraźliwych słów w języku: ["belgium", "offensive"]
. Słowa na tych listach z pewnością zawierają tylko małe litery alfabetu.
Ciąg jest frazą, którą będziesz musiał cenzurować. Będzie się składać ze słów ze słownika, oddzielonych spacjami:"Goodbye offensive belgium"
Zwrócona wartość będzie tą cenzurą. Musisz jednak w pewien sposób cenzurować. W szczególności dla każdego słowa na liście ofensywnej musisz cenzurować jak najwięcej liter, pozostając całkowicie jednoznacznym w głównym słowniku. Więc byłoby to: Goodbye o******** b******
.
Wyjaśnienia
- Kod musi interpretować słowa bez rozróżniania wielkości liter, ale zwraca początkową literę.
- Jeśli istnieje wiele optymalnych odpowiedzi, wybierz jedną z nich.
- Jeśli jednoznaczna cenzura jest niemożliwa, ocenzuruj pojedynczą literę, która ma najmniejszą liczbę innych możliwych interpretacji (jeśli wielokrotność jest możliwa, to znowu twój wybór).
Przypadki testowe
["hello", "goodbye", "belgium", "offensive", "jumping", "hypercool"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye o******** b******"
["word"] ["word"] "word" -> "****"
["hot", "hat", "bat", "had"] ["hat"] "hat" -> "*at" or "h*t" or "ha*"
https://gist.github.com/deekayen/4148741 ["quart"] "I am a quart" -> "I am a q**r*"
To jest code-golf, więc wygrywa najkrótszy d * mn kod w bajtach!
PS Ktoś złapał referencję z Belgii? ; P
źródło
["hello", "goodbye", "belgium", "offensive"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye o******** b******"
ale przypadki testowe mówią, że["hello", "goodbye", "belgium", "offensive"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye offensive b******"
przypadek testowy jest zły, prawda?Odpowiedzi:
JavaScript ES7, 194 bajty
Bardzo duża funkcja. Zgaduję, że można oddzielić kilka bajtów, ale niewiele, chyba że całkowicie zmienię sposób działania.
źródło