Słowo BANANA
pojawia się dokładnie raz w tym wyszukiwaniu :
B A N A A N B B
A B A N A B A N
A N A B N N A A
N N B A A A N N
N A A N N N B A
A N N N B A N A
N A A B A N A N
B A N A N B B A
Wyszukiwanie słowo powyżej zawiera tylko jedno wystąpienie słowa, BANANA
patrząc w górę, w dół, w lewo, w prawo, lub po przekątnej, ale ma wiele podobnych słów, jak BANANB
, BANNANA
, BNANA
itp
Twoim zadaniem jest zbudowanie programu, który będzie generował irytujące wyszukiwania słów, takie jak ten.
Twój program weźmie jako dane wejściowe:
Jedno słowo, wielkimi literami, zawierające od trzech do siedmiu unikalnych liter o łącznej liczbie co najmniej czterech liter.
Jedna liczba reprezentująca wymiar kwadratowej siatki dla wyszukiwania słów. Liczba musi być co najmniej liczbą liter w słowie.
Następnie wypisz wyszukiwane słowo, używając tylko liter w słowie, które zawiera dokładnie jedno wystąpienie słowa wejściowego i możliwie najwięcej infuriatorów .
Infuriator jest zdefiniowany jako ciąg znaków, który ma odległość Damerau-Levenshteina od słowa docelowego i zaczyna się od tej samej litery co słowo. Dla BANANA
obejmowałoby to słowa takie jak:
BANBNA
, gdzie jedna z liter została zastąpiona.BANNANA
lubBANAANA
, gdzie dodano dodatkową literę.BANAN
,BNANA
gdzie list został usunięty, ale nieANANA
, ponieważ nie ma jużB
.BAANNA
lubBANAAN
, gdzie zamieniono dwie kolejne litery.
Podczas liczenia infuriatorów na siatce wyszukiwania słów mogą się one nakładać, ale nie można policzyć dużego łańcucha, jeśli zawiera on całkowicie mniejszy łańcuch, który już policzyłeś, lub odwrotnie. (Jeśli tak BANANB
, nie możesz go policzyć ponownie, jeśli już policzyłeś wewnątrz BANAN
lub wstecz BNANA
). Nie możesz też liczyć łańcuchów, które całkowicie zawierają lub są całkowicie zawarte w samym słowie docelowym (nie możesz policzyć konkretnego BANAN
który jest częścią BANANA
, ani BANANAA
lub BANANAN
).
Twój program zostanie przetestowany na określonej liście słów składającej się ze słów, które pasują do wymaganego słowa wejściowego (które zostanie podane później, gdy go wygeneruję), na siatce równej dwukrotności długości słowa i zostanie oceniony od liczby infuriatorów obecnych w każdej sieci. Proszę zamieścić swoje wyniki dla wejść BANANA 12
, ELEMENT 14
oraz ABRACADABRA 22
do weryfikacji.
źródło
MURMURS
wydaje się być dobrym przypadkiem testowym, ponieważ wyobrażam sobie, że optymalna odpowiedź wymagałaby porzuceniaS
Odpowiedzi:
Skrypt Java
Bonus: Możesz zainicjować wyszukiwanie słów. Domyślny seed to: „codechallenge”
BANANA - 12:
ELEMENT - 14:
Powodzenia: ABRACADABRA - 22:
Dodatkowo: MISSISSIPPI - 32:
źródło
C ++
Napisałem to dzisiaj. Nie jest to najbardziej efektywny sposób i nie zawsze generuje najbardziej losowo wyszukiwane słowa, ale wykonuje zadanie i robi to stosunkowo szybko.
Premia: obsługuje też Palindromy !!!
Działa, pobierając dane słowo i wielkość wyszukiwania słowa. Następnie generuje infuratory, upuszczając litery, wstawiając litery lub przewracając litery. Następnie dodaje je do siatki, a także poprawne słowo. Następnie sprawdza wszystkie wystąpienia pierwszej litery we wszystkich kierunkach pod kątem słowa. Jeśli nie znaleziono 1 instancji (2 dla palindromów), brutal wymusza cykl. Następnie wyświetla wyniki wyszukiwania słowa na konsoli, a także plik.
Oto 213 linii kodu z białymi znakami i komentarzami.
Jestem daleki od eksperta w C ++, więc jestem pewien, że są miejsca, w których można by ulepszyć ten kod, ale byłem zadowolony z tego, jak to się skończyło.
Oto wyniki.
Mogę to zaktualizować, aby wygenerować nieco więcej „losowych” wyszukiwań słów.
źródło
Excel VBA
Działa, najpierw losowo umieszczając słowo w arkuszu kalkulacyjnym, losowo zarówno w pozycji, jak i kierunku, a następnie wypełniając niepuste spacje w otaczającej siatce, losowo wybierając spośród wszystkich oprócz ostatniej litery słowa.
Wyjście BANANA (2, 1):
ELEMENT Wyjście (6, 5):
Wyjście ABRACADABRA (2, 3):
źródło