Ваша задача сьогодні - реалізувати функціонал, подібний до т9 .
Ви реалізуєте функцію, яка матиме лише 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 сірники [ghi]
- 5 матчів [jkl]
- 6 матчів [mno]
- 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
Після запуску функції ви можете роздрукувати її будь-яким способом.
Правила:
- Стандартні лазівки INVALID
- Ви повинні щось повернути, навіть якщо це
null
/nil
Javascript повернеться,undefined
якщо ви щось не повернете, тому це правило. - Ви не можете використовувати чи повторно реалізовувати відповіді інших або копіювати мою реалізацію.
- Ви можете припустити, що для Javascript, що браузер буде вже відкритий і що
innerText
/textContent
автоматичного елемента буде передано як 2-й параметр - Для компільованих мов ви не можете передавати спеціальні аргументи компілятору
- Ви можете отримати ім'я файлу через аргументи компілятора
- Змінні, макроси, глобальні змінні, константи, нестандартні класи та всі види, що передають інші значення всередині функції, вважатимуться недійсними.
- У Javascript змінні без ключового слова
var
роблять ваш код недійсним - Ваша функція буде названа
f
- Ви можете мати і мати лише 2 аргументи щодо вашої функції
- Намагайтеся тримати код менше 500 секунд для запуску.
- Не потрібно турбуватися про пробіли
- Ви повинні використовувати лише символи для друку ASCII .
Виняток становлять мови, які використовують лише символи, що не друкуються (APL та пробіли - 2 приклади).
Оцінка:
- Найменша кількість байтів виграє
- Якщо у вашій відповіді недійсні символи для друку 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 "]
Цей приклад був протестований і працює в операційній системі Opera 12.17 64bit на ОС Windows 7 Home Edition 64bit.