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.
Jawaban:
CJam, 28 byte
Mengambil input dalam bentuk
"<number>" [<list of words>]
Contoh:
Keluaran:
Tidak ada bonus untuk saat ini.
Coba kode online di sini tetapi untuk pengukuran waktu aktual, jalankan di kompiler Java
Perhatikan bahwa CJam mewakili daftar kosong seperti
""
Untuk mengonversi daftar kata mentah menjadi daftar CJam, gunakan kode berikut dengan daftar kata sebagai masukan:
sumber
Jawa: 395
Ini membentuk pola regex berdasarkan huruf-huruf yang diperbolehkan untuk setiap angka, dan kemudian menekan a. * Di akhir untuk mencocokkan karakter berikut.
Ini adalah versi golfnya:
Dan di sini adalah versi tanpa kemampuan untuk membaca-kemampuan
sumber
f
".([W-Zw-z)]
) seharusnya([W-Zw-z])
. Dan pada Code-golf Anda tidak perlu khawatir tentang gaya pemrograman dan praktik yang baik: kode Anda hanya harus melakukan hal itu dengan parameter yang diperlukan. Jika Anda memeriksa jawaban saya, Anda akan melihat baris ini:$s=[2=>abc,def,ghi,jkl,mno,pqrs,tuv,wxyz];
. Ini adalah 'kejahatan' yang mengerikan di PHP. Pada dasarnya saya memaksa PHP untuk mengubah konstanta yang tidak ada menjadi string. Ini bisa diterima. Anda juga akan melihat bahwa saya bahkan tidak mengatur variabel$t
ke array sebelum menggunakannyaC # .NET 4.5 235
Ini seharusnya bekerja:
sumber
foreach
di dalamnya. Jika Anda berharap sudahIEnumerable
, sertakan kode yang digunakan di luara
var Anda .a
var Anda . Tapi saya benar-benar melihat peningkatan nyata! Terus bekerja dengan baik.Python 2 (155 byte)
Harus juga bekerja di Python 3 dengan penggantian yang sesuai (
string
->bytes
,b
awalan pada string, dll.).Saya tidak yakin apakah memiliki
maketrans
panggilan di luar fungsi tersebut dianggap "adil"; jika tidak, fungsinya 134 byte dengan itu dipindahkan ke dalam.EDIT: Turun satu byte dari pengawasan bodoh.
Dengan siap
maketrans
, 67 byte:Dengan
maketrans
isi, 134 byte:Dengan
import
danmaketrans
dalam tubuh, 155 byte:Panggilan uji:
sumber
maketrans
adalah bagian dari fungsi tubuh. Anda harus memindahkannya. Saya tidak tahu apakah itu mungkin, tetapi Anda dapat mencoba langsung menggunakanimport
. Saya rasa saya melihatnya di suatu tempat ... Tapi kode Anda sangat bagus!t=(from stirng import maketrans)([...])
. Saya tidak tahu apakah itu mungkin. Tapi mungkin Anda dapat menggunakanfrom string import as x t=x([...])
yang saya tidak yakin apakah itu mungkin juga: /__import__('string').maketran
.PHP 5.4+ (
171186-20% = 148.8 byte):Baiklah, ini jawaban yang sangat besar, tetapi baik.
Saya harap ini membawa lebih banyak orang untuk menjawab.
Fungsi ini mengharapkan konten mentah sedang dibaca.
Ini kodenya:
Ini berfungsi dengan memverifikasi bahwa surat itu ada dalam daftar surat yang diizinkan.
Contoh: input
36
akan membuat untuk memeriksa apakah1abc
memiliki huruf pertama dari kata dan yang1def
memiliki huruf ke-2.Saya menambahkan
1
sehingga tidak memeriksa apakah surat itu di posisi 1 (yang akan kembali0
dan yang akan dievaluasifalse
).if(!strpos(1..$s[$c],$v[$i]))
atauif(!strpos($c.$s[$c],$v[$i]))
akan memiliki efek yang sama, tetapi yang pertama lebih membingungkan dan saya menyukainya.Gagal melakukannya, akan menghapus kata.
Dengan tidak ada kata yang tersisa, itu mengembalikan array kosong.
Untuk menguji ini secara online, buka http://writecodeonline.com/php/ dan buat variabel sederhana dengan kata untuk baris.
Contoh yang dapat diuji:
Ini akan menghasilkan:
Untuk bekerja pada versi php yang lebih lama, ganti
$s=[2=>abc,def,ghi,jkl,mno,pqrs,tuv,wxyz];
dengan$s=array(2=>abc,def,ghi,jkl,mno,pqrs,tuv,wxyz);
Untuk bonus 20%:
Untuk mengurangi kode saya cukup menambahkan
||$t[$v[0]]++>4
, yang memeriksa berapa kali huruf pertama digunakan.Dalam php,
$t
tidak perlu didefinisikan, membantu mengurangi sebagian besar dari 37,2 byte.Untuk melihat efek ini, gunakan variabel berikut sebagai argumen ke-2:
sumber