Ваша задача сегодня - реализовать функциональность, подобную t9 .
Вы реализуете функцию, которая будет иметь только 2 параметра.
Вы получите 1 номер телефона в строке и содержимое текстового файла со списком слов (не используйте конкретный стиль перевода строки).
Вы можете использовать ссылку https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt, чтобы проверить функциональность, или использовать /usr/share/dict/words
(проверьте текстовый файл со списком слов [закрыто], чтобы узнать больше Информация).
Вы можете предположить, что вы всегда получите как минимум 2 номера.
Учитывая число, вы будете читать из списка слов и возвращать слова, начинающиеся с букв, сопоставляемых с этими словами. Это означает, что ввод должен состоять только из цифр от 2 до 9.
Вы можете делать все, что захотите, если получите неверный ввод.
Если совпадение не найдено, вы можете вернуть пустой список, null
/ nil
или 0
.
Помните, что клавиши мобильного телефона сопоставлены с их эквивалентными символами:
- 0 и 1 недействительны
- 2 матча [abc]
- 3 совпало [def]
- 4 матча [гхи]
- 5 матчей [jkl]
- 6 матчей [мно]
- 7 матчей [pqrs]
- 8 матчей [tuv]
- и 9 совпадений [wxyz]
Примеры:
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
После того, как вы запустите свою функцию, вы можете распечатать ее любым удобным вам способом.
Правила:
- Стандартные лазейки НЕВЕРНЫ
- Вы должны что-то вернуть, даже если это
null
/nil
Javascript будет возвращать,undefined
если вы что-то не возвращаете, поэтому это правило. - Вы не можете использовать или повторно реализовывать ответы других или копировать мою реализацию.
- Для Javascript вы можете предположить, что браузер будет уже открыт и что
innerText
/textContent
из автоматического элемента будет передан в качестве второго параметра - Для скомпилированных языков вы не можете передавать специальные аргументы компилятору
- Вы можете получить имя файла через аргументы компилятора
- Переменные, макросы, глобальные переменные, константы, нестандартные классы и все виды, передающие другие значения внутри функции, будут считаться недействительными.
- В Javascript переменные без ключевого слова
var
делают ваш код недействительным - Ваша функция будет названа
f
- Вы можете только и только иметь 2 аргумента в вашей функции
- Постарайтесь, чтобы ваш код работал менее 500 секунд.
- Вам не нужно беспокоиться о пробелах
- Вы должны использовать только печатные символы ASCII .
Исключением являются языки, которые используют только непечатаемые символы (2 примера - APL и пробелы).
Подсчет очков:
- Наименьшее количество выигранных байтов
- Наличие в вашем ответе недопустимых печатных символов ASCII будет засчитываться как кодировка ответа в UTF-32
. Исключение из кодировки заставит ваш ответ быть посчитанным символами . - Подсчитывает только тело функции, не считайте ничего, что вы делаете вне ее
- Бонус -30%, если вы делаете систему прогнозирования на основе соседства или наиболее распространенных слов
- Бонус -20% в размере, если вы возвращаете только первые 5 совпадений для каждой буквы, соответствующей первому числу (например: 245 вернет 5 слов, начинающихся с «a», 5, начинающихся с «b», и 5, начинающихся с «c» ).
Вот пример реализации, использующей 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);
}
Чтобы запустить его, откройте ссылку списка и запустите, например:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
Этот пример был протестирован и работает под 64-битной версией Opera 12.17 на 64-битной Windows 7 Home Edition.