Ze słowem anagram nie jeden z Was się spotkał. A jeśli się nie spotkaliście to zachęcam do odwiedzenia Wujka Google lub Cioci Wikipedii.
Dzisiejsze zadanie będzie proste. A przynajmniej tak ma się wydawać. Lecimy...
Wstęp i Zasady
Celem dzisiejszego zadania jest przemyślane pisanie kodu, tworzenie algorytmów i rozwiązań jak najbardziej optymalnych.
Jak i w poprzednim trzymamy się zasady Test First:
- Staraj się nie czytać całej treści zadania, chyba że zostało to zaznaczone inaczej
- Najpierw napisz Test wg. specyfikacji zadania. Wystarczy jak napiszesz tylko te które spełniają poprawne wyniki.
- Napisz najbardziej minimalną i najszybszą implementację która spełnia test (Choćby miał być to np. return 1)
- Po każdym spełnieniu testu zrób refactoring kodu
Na uwagę zasługuje również to, że podczas pisania testów wszystkie punkty powinny być zawsze spełniane. Nie zmieniamy specyfikacji w trakcie (Jeśli będzie tego wymagało zadanie na pewno będzie to opisane).
A teraz lecimy z zadaniem...
Zadanie
- Utwórz metodę
check(string, string): bool
(2 parametry string, na wyjściu bool) która sprawdzi czy oba słowa prowadzone są anagramami np:check('kat', 'akt')
- wyniktrue
check('dom', 'moce')
- wynikfalse
check('noc', 'moc')
- wynikfalse
- Dodaj możliwość wprowadzenia tablicy ze słowami. Jako wynik
true
/false
jeśli znaleziono jakikolwiek anagram np:check(['akt', 'kat', 'dom']
- wyniktrue
check(['koty', 'kat', 'dom']
- wynikfalse
- Dodaj metodę
getAnagrams(): array
która po wykonaniu metody check zwróci tablicę wielowymiarową anagramów w formacie:- Uwaga, tablice posortowane alfabetycznie!!
Tablica ta zawiera "powtórzenia".[ 'akt' => [ 'kat', 'tak' ], 'kat' => [ 'akt', 'tak' ], 'tak' => [ 'akt', 'kat' ], ]
- Uwaga, tablice posortowane alfabetycznie!!
- Dodaj parametr w funkcji
getAnagrams
dający możliwość przefiltrowania tablicy pod kątem powtórzeń. Mając tablicę z pkt. 3 po przefiltrowaniu powinna być tablica:[ 'akt' => [ 'kat', 'tak' ], ]
- Dla metody
check()
dodaj możliwość podania jako wejścia pliku np:check('path/anagrams.txt')
. Plik powinien być formatu: 1 słowo = 1 wiersz. Wszystkie powyższe powinny nadal działać. - Przetestujcie wydajność, czas oraz ilość odnalezionych słów na słowniku: anagrams.txt
Podsumowanie
Zadanie jak widać nie jest bardzo skomplikowane. Wymaga tutaj jednak sprytu, wyczucia, ponieważ uruchomienie rozwiązania na dużym słowniku może spowodować opłakane skutki.
Mile będą widziane Wasze wyniki, ile słów udało się znaleźć w słowniku, jaki czas mieliście. Możecie też podsyłać własne słowniki do testów.