Główny układ jest pamięciowy urządzenia do przekształcania numerów słowami, więc mogą być zapamiętane łatwiej.
Opiera się na tym, jak słowa brzmią fonetycznie, ale aby uprościć sprawę, zajmiemy się tylko pisownią słów. Oznacza to, że będą jakieś nieprawidłowe konwersje, ale to w porządku.
Aby przekonwertować liczbę na słowo za pomocą naszego uproszczonego systemu głównego:
- Wymień każdy
0zslubz. (Niektóre mogą być,sa niektóre mogąz. To samo idzie poniżej.)- Zamień
1je natlubdlubth.- Wymień każdy
2zn.- Wymień każdy
3zm.- Wymień każdy
4zr.- Wymień każdy
5zl.- Zamień
6je najlubshlubch.- Zamień
7je naklubclubglubq.- Wymień każdy
8zflubv.- Wymień każdy
9zplubb.- Dodaj litery w
aehiouwxydowolnym miejscu w dowolnych ilościach, aby, jeśli to możliwe, stworzyć prawdziwe angielskie słowo .
Jedynym wyjątkiem jest to, żehnie można wstawić poslubc.Liczba może być w rzeczywistości dowolnym ciągiem cyfr od 0 do 9 (brak miejsc po przecinku, przecinki lub znaki).
Słowo może zawierać tylko małe litery az.
Przykłady
Liczbę 32należy przekonwertować jako ?m?n?, gdzie ?reprezentuje dowolny skończony ciąg wykonany z liter aehiouwxy(ciąg z wolnej monoidy, jeśli wolisz). Istnieje wiele sposobów, to może być wykonane do prawdziwego angielskiego słowa: mane, moon, yeoman, itd.
Liczba 05może być przekonwertowana jako ?s?l?lub ?z?l?. Niektóre możliwości są easily, hasslei hazel. Słowo shawljest niedozwolone, ponieważ hnie może zostać umieszczone po s; byłby błędnie odczytany jako 65.
Wyzwanie
Napisz program lub funkcję, która pobiera ciąg cyfr 0–9 i znajdzie wszystkie słowa, na które można by je przekonwertować, używając uproszczonego głównego systemu mnemonicznego.
Twój program ma dostęp do pliku tekstowego z listą słów, który określa, jakie są wszystkie „prawdziwe” angielskie słowa. W każdym wierszu tego pliku znajduje się jedno małe słowo az, a opcjonalnie można założyć, że ma on końcowy znak nowej linii. Oto lista prawdziwych słów, których możesz użyć do testowania. Możesz założyć, że ten plik listy słów nazywa się f(lub coś dłuższego) i znajduje się w dowolnym wygodnym katalogu.
W przypadku kary 35 bajtów (dodaj 35 do wyniku) możesz założyć, że lista słów jest już załadowana do zmiennej jako lista ciągów znaków. Dotyczy to głównie języków, które nie potrafią odczytać plików, ale każde przesłanie może z nich skorzystać.
Twój program musi wypisać wszystkie słowa z listy słów, na które można przekonwertować numer wejściowy. Powinny być drukowane na standardowym (lub podobnym), po jednym w wierszu (z opcjonalnym końcowym znakiem nowej linii), lub mogą zostać zwrócone jako lista ciągów, jeśli zdecydujesz się napisać funkcję. Lista słów nie musi być alfabetycznie, a wynik nie musi być.
Jeśli nie ma możliwych słów, wynik (lub lista) będzie pusty. Dane wyjściowe są również puste, jeśli wprowadzono pusty ciąg.
Weź dane wejściowe za pomocą stdin, wiersza poleceń lub jako argument ciągu funkcji. Lista słów lub nazwa pliku nie powinny być częścią wejścia, a jedynie ciąg cyfr.
Pasujesz tylko pojedyncze słowa na liście słów, a nie sekwencje słów. Słowo noonprawdopodobnie będzie jednym z wyników 22, ale sekwencja słów no onenie.
Przypadki testowe
Załóżmy, że jest to lista słów:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
zdnmrlshchvb
sthnmrlchgvb
shthnmrlchgvb
bob
pop
bop
bopy
boppy
Wejście 0123456789powinno dać wszystkie z wyjątkiem długich słów zdnmrlshchvbi shthnmrlchgvb:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
sthnmrlchgvb
Dane wejściowe 99powinny dać:
bob
pop
bop
bopy
(Słowa wyjściowe mogą być w dowolnej kolejności.)
Punktacja
Najkrótsze przesłanie w bajtach wygrywa. Tiebreaker przechodzi do przesłanego posta jako pierwszego.
Powiązana strona: numzi.com .