Tantangan Anda hari ini adalah mengimplementasikan fungsionalitas mirip- t9 .
Anda akan mengimplementasikan fungsi yang hanya akan memiliki 2 parameter.
Anda akan menerima 1 nomor telepon dalam sebuah string dan konten file teks dengan daftar kata-kata (jangan menganggap gaya baris baru tertentu).
Anda dapat menggunakan tautan https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt untuk menguji fungsionalitas, atau menggunakan /usr/share/dict/words
(periksa file teks dengan daftar kata [ditutup] untuk informasi lebih lanjut. informasi).
Anda dapat mengasumsikan bahwa Anda akan selalu menerima setidaknya 2 angka.
Dengan nomor tersebut, Anda akan membaca dari daftar kata-kata dan mengembalikan kata-kata yang dimulai dengan pemetaan huruf ke kata-kata itu. Ini berarti bahwa input harus hanya angka dari 2 hingga 9.
Anda dapat melakukan apa pun yang Anda inginkan jika Anda menerima input yang tidak valid.
Jika tidak ada yang cocok, Anda dapat mengembalikan daftar kosong, null
/ nil
atau 0
.
Ingat bahwa tombol ponsel dipetakan ke karakternya yang setara:
- 0 dan 1 tidak valid
- 2 pertandingan [abc]
- 3 cocok [def]
- 4 pertandingan [ghi]
- 5 pertandingan [jkl]
- 6 pertandingan [mno]
- 7 pertandingan [pqrs]
- 8 pertandingan [tuv]
- dan 9 pertandingan [wxyz]
Contoh:
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
Setelah Anda menjalankan fungsi Anda, Anda dapat mencetaknya dengan cara apa pun yang Anda inginkan.
Aturan:
- Celah standar adalah INVALID
- Anda harus mengembalikan sesuatu, meskipun itu
null
/nil
Javascript akan kembaliundefined
jika Anda tidak mengembalikan sesuatu, oleh karena itu aturan ini. - Anda tidak dapat menggunakan atau mengimplementasikan kembali jawaban orang lain atau menyalin implementasi saya.
- Anda dapat mengasumsikan, untuk Javascript, bahwa browser akan sudah dibuka dan bahwa
innerText
/textContent
dari elemen otomatis akan diteruskan sebagai parameter ke-2 - Untuk bahasa yang dikompilasi, Anda tidak bisa meneruskan argumen khusus ke kompiler
- Anda dapat menerima nama file melalui argumen kompiler
- Variabel, makro, variabel global, konstanta, kelas non-standar, dan semua pengurutan yang melewati nilai lain di dalam fungsi akan dianggap tidak valid.
- Dalam Javascript, variabel tanpa kata kunci
var
membuat kode Anda tidak valid - Fungsi Anda akan dinamai
f
- Anda hanya dapat dan hanya memiliki 2 argumen pada fungsi Anda
- Cobalah untuk menjaga kode Anda di bawah 500 detik untuk dijalankan.
- Anda tidak perlu khawatir tentang spasi putih
- Anda harus menggunakan hanya karakter yang dapat dicetak ASCII .
Pengecualian adalah bahasa yang hanya menggunakan karakter yang tidak dapat dicetak (APL dan spasi putih adalah 2 contoh).
Mencetak:
- Jumlah byte terendah menang
- Memiliki karakter ASCII yang dapat dicetak yang dapat dicetak dalam jawaban Anda, akan dihitung sebagai jawaban yang dikodekan dalam UTF-32
. Pengecualian untuk pengkodean akan membuat jawaban Anda dihitung berdasarkan karakter . - Hanya fungsi tubuh yang penting, jangan menghitung apa pun yang Anda lakukan di luarnya
- Bonus -30% jika Anda membuat sistem prediksi berdasarkan lingkungan atau kata-kata yang paling umum
- Bonus dalam ukuran -20% jika Anda hanya mengembalikan 5 pertandingan pertama untuk setiap huruf yang sesuai dengan angka pertama (mis .: 245 akan mengembalikan 5 kata dimulai dengan 'a', 5 dimulai dengan 'b' dan 5 dimulai dengan 'c' ).
Berikut adalah contoh implementasi, menggunakan 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);
}
Untuk menjalankannya, buka tautan daftar dan jalankan, misalnya:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
Contoh ini diuji dan berfungsi di bawah Opera 12.17 64bits pada Windows 7 Home Edition 64bits.