Twoim dzisiejszym wyzwaniem jest wdrożenie funkcjonalności podobnej do T9 .
Zaimplementujesz funkcję, która będzie miała tylko 2 parametry.
Otrzymasz 1 numer telefonu w ciągu i zawartość pliku tekstowego z listą słów (nie zakładaj określonego stylu nowej linii).
Możesz użyć linku https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt, aby przetestować funkcjonalność, lub użyj /usr/share/dict/words
(zaznacz plik tekstowy z listą słów [zamknięty], aby uzyskać więcej Informacja).
Możesz założyć, że zawsze otrzymasz co najmniej 2 numery.
Biorąc pod uwagę liczbę, przeczytasz z listy słów i zwrócisz słowa zaczynające się od odwzorowania liter na te słowa. Oznacza to, że dane wejściowe powinny składać się tylko z liczb od 2 do 9.
Możesz zrobić co chcesz, jeśli otrzymasz nieprawidłowe dane wejściowe.
Jeśli nie zostanie znaleziony, można powrócić pustą listę, null
/ nil
albo 0
.
Pamiętaj, że klawisze telefonu są mapowane na odpowiadające im znaki:
- 0 i 1 są nieprawidłowe
- 2 mecze [abc]
- 3 dopasowane [def]
- 4 mecze [ghi]
- 5 dopasowania [jkl]
- 6 dopasowania [mno]
- 7 dopasowania [pqrs]
- 8 meczów [tuv]
- i 9 dopasowań [wxyz]
Przykłady:
f('52726')
//returns ["Japan","japan","Japanee","Japanese","Japanesque"...,"larbowlines"]
f('552')
//returns ["Kjeldahl","kjeldahlization","kjeldahlize"...,"Lleu","Llew"]
f('1234')
//makes demons fly out your nose or divide by 0
f('9999')
//returns ["Zyzzogeton"]
f('999999')
//returns [] or null/nil or 0
Po uruchomieniu funkcji możesz wydrukować ją w dowolny sposób.
Zasady:
- Standardowe luki są NIEPRAWIDŁOWE
- Musisz coś zwrócić, nawet jeśli to
null
/nil
JavaScript zwróci,undefined
jeśli czegoś nie zwrócisz, dlatego ta reguła. - Nie możesz użyć lub ponownie zaimplementować odpowiedzi innych osób ani skopiować mojej implementacji.
- W przypadku Javascript można założyć, że przeglądarka zostanie już otwarta i że element
innerText
/textContent
elementu automatycznego zostanie przekazany jako drugi parametr - W przypadku języków skompilowanych nie można przekazywać kompilatorowi specjalnych argumentów
- Możesz otrzymać nazwę pliku zamiast argumentów kompilatora
- Zmienne, makra, zmienne globalne, stałe, niestandardowe klasy i wszystkie inne przekazywanie innych wartości wewnątrz funkcji zostaną uznane za nieprawidłowe.
- W JavaScript zmienne bez słowa kluczowego
var
powodują, że kod jest nieprawidłowy - Twoja funkcja zostanie nazwana
f
- Możesz mieć tylko i tylko 2 argumenty na swojej funkcji
- Staraj się, aby kod działał krócej niż 500 sekund.
- Nie musisz się martwić o białe znaki
- Musisz używać tylko znaków drukowalnych ASCII .
Wyjątkiem są języki, które używają tylko znaków niedrukowalnych (APL i białe znaki to 2 przykłady).
Punktacja:
- Najniższa liczba bajtów wygrywa
- Niepoprawne znaki drukowalne ASCII w odpowiedzi będą liczone jako odpowiedź kodowana w UTF-32
. Wyjątek od kodowania spowoduje, że odpowiedź będzie liczona według znaków . - Liczy się tylko ciało funkcji, nie licz niczego, co robisz poza nim
- Premia w wysokości -30%, jeśli stworzysz system przewidywania oparty na sąsiedztwie lub najczęściej używanych słowach
- Premia wielkości -20%, jeśli zwrócisz tylko 5 pierwszych dopasowań dla każdej litery odpowiadającej pierwszej cyfrze (np .: 245 zwróci 5 słów zaczynających się na „a”, 5 zaczynających się na „b” i 5 zaczynających się na „c” ).
Oto przykład implementacji przy użyciu Javascript:
function f(phone, words)
{
var keypad=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];
var regex='';
for(var i=0,l=phone.length;i<l;i++)
{
regex+='['+keypad[phone[i]]+']';
}
var regexp=new RegExp('\\s('+regex+'[a-z]*)\\s','gi');
return words.match(regexp);
}
Aby go uruchomić, otwórz link do listy i uruchom, na przykład:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
Ten przykład został przetestowany i działa pod kontrolą Opery 12.17 64bits w systemie Windows 7 Home Edition 64bits.