Pertanyaan ini menanyakan fungsionalitas pencocokan kamus T9 yang merupakan masalah yang sangat menarik. Tetapi T9 memiliki cara lain untuk mengetik dan itu adalah mengetik karakter demi karakter. Anda TIDAK perlu kamus untuk mengimplementasikan keyboard ini.
Berikut adalah peta-kunci keyboard T9 jika Anda lupa:
+-------+-------+-------+
| 1 | 2 | 3 |
| .?! | ABC | DEF |
+-------+-------+-------+
| 4 | 5 | 6 |
| GHI | JKL | MNO |
+-------+-------+-------+
| 7 | 8 | 9 |
| PQRS | TUV | WXYZ |
+-------+-------+-------+
| * | 0 | # |
| ← | SPACE | → |
+-------+-------+-------+
Cara kerja T9
Untuk mengetikkan karakter dengan T9, Anda perlu menekan tombol angka yang mewakili n
waktu karakter itu .n
adalah urutan karakter yang tertulis pada kunci itu. Angka adalah karakter terakhir yang bisa Anda ketik untuk setiap tombol. Misalnya, untuk mengetik B
I tekan 2
dua kali, atau untuk mengetik 5
I tekan 5
empat kali. Untuk menyelesaikan mengetik karakter ini saya tekan #
. *
hanyalah backspace. Di versi keyboard kami tidak ada huruf besar.
Contoh input dan output:
8#99999#055#33#999#22#666#2#777#3# → T9 KEYBOARD
Penjelasan:
8
memilihT
dan#
pindah ke karakter berikutnya99999
pilih karakter terakhir9
key yang ada9
dan#
pindah ke charachter berikutnya0
menyisipkan spasi33
memilih karakter kedua dari3
kunci yaituK
dan#
pindah ke karakter berikutnya- Dan seterusnya...
Aturan
Fungsi atau program Anda harus menerima string yang mewakili penekanan tombol T9. Output adalah teks yang dihasilkan dari penekanan tombol tersebut, seperti diuraikan di atas.
Ini adalah kode dasar golf, jadi pemenangnya adalah yang terpendek dalam byte, dan aturan standar / celah berlaku.
T9 KEYBOARD
benar-benar salah. Yang bertuliskanT9 JEYBARD
#
jika tombol berturut-turut berbeda pula. yang dikatakan: tanpa bonus apa yang harus terjadi jika#
dihilangkan?Jawaban:
CJam,
10994 byte (2 nd bonus)Solusi yang sangat naif dan panjang
Ini adalah program lengkap, meskipun suatu fungsi akan memiliki panjang yang sama.
Input masuk ke STDIN
Contoh:
Keluaran:
Cobalah online di sini
sumber
JavaScript ES6,
220-10 = 210178 byteSebagai bagian dari CMC Helka , saya mengalahkan tantangan pertama saya.
Output sampel:
Penjelasan
Ini mengimplementasikan penggantian rekursif, mengganti semua karakter diikuti oleh
*
sampai tidak ada*
yang tersisa.Ini cocok dengan semua digit beruntun, atau
*
s.Ini menciptakan kamus yang diinginkan, mendapatkan bagian yang disandikan dari string besar, kemudian menambahkan digit yang diinginkan ke dalamnya.
Ini mendapatkan karakter,
a
panjang modulo .Ini mempersiapkan string untuk pemrosesan dan penghapusan
*
s.sumber
t("2#2");
memberiB
bukannyaAA
. Cobalah untuk mencocokkan apa saja#
daripada menghapusnya.Python,167157151 byte(tidak mendukung '*')
Tidak ada yang spesial. Saya menggunakan regex untuk mengonversi input ke daftar, lalu saya memutarkan entri. Saya menggunakan karakter pertama dan panjang setiap entri untuk mencarinya di daftar pencarian:
Setelah bermain golf, tampilannya seperti ini:
Tidak ada bonus (belum). Saya tidak tahu bagaimana saya akan menerapkan bonus pertama di regex. Bonus kedua akan menambahkan banyak byte karena elemen pencarian tidak berukuran sama. Tidak terlalu mengerti bonus ketiga.
sumber
Perl 5: 106 (104 kode + 2 bendera)
Dimodifikasi untuk menangani penghapusan.
Pemakaian:
Perl 5: 88 (86 kode + 2 bendera)Versi lama tanpa penghapusan bintang.
sumber
AWK 211 byte (dengan bonus)
Ini adalah program lengkap yang membaca input dari stdin. Akan lebih efisien untuk tidak memasang kembali keyboard untuk setiap baris, tetapi akan membuat skrip lebih panjang.
Juga jika kunci "0" lebih dari 0, skrip akan menjadi 4 byte lebih pendek, tapi itu bagian dari permainan: o)
sumber
C (245 byte)
Keluaran
Penjelasan
Hitungan byte tidak termasuk string input yang diberikan pada yang pertama
#define
.Saya menggunakan array dua dimensi sebagai tabel pencarian untuk karakter apa yang akan dicetak. Program membaca dalam karakter yang dibatasi oleh
'#'
.Untuk setiap grup, nomor input menentukan indeks array dimensi pertama, dan jumlah pengulangan nomor input menentukan indeks array dimensi kedua. The
'*'
bergerak kembali indeks array untuk string output sehingga dapat menimpa surat sebelumnya.Jadi string input
44#
(1 pengulangan'4'
) diterjemahkan ke tabel pencarianK[4][1]
, yang merupakan karakterH
.Versi Tidak Serigala
sumber
Ruby
254,248, 229 byteGolf:
Tidak Disatukan:
Semua spesifikasi ini harus berhasil:
The
0 0
Jawabannya terlihat sedikit seperti solusi Hacky. Akan melihatnya ketika aku punya waktu.sumber
PHP, 183-10 = 173 byte
Semua versi mengambil input dari argumen baris perintah; panggilan dengan
php -r '<code>' <string>
.Catatan : Semua versi memberikan peringatan jika input dimulai
*
.Tambahkan
$o=[];
kode untuk menghapus cacat itu.210-10 - ?? = ??? byte
181 byte, tidak ada bonus
kerusakan
Versi "tanpa tag hash" membagi string menjadi (coretan angka yang sama) dan (tanda bintang) dan melupakan yang lainnya. Versi no-bonus mengambil (nomor beruntun diikuti oleh
#
) dan (tanda bintang).Kemudian lewati pencocokan: Jika '*' ditemukan, hapus elemen terakhir dari array hasil.
Perbedaan antara versi ada di
else
bagian:-1
.sumber
JavaScript, 147 byte
Jawaban Conor diperbaiki dengan regex dari jawaban PHP saya dan diturunkan.
kerusakan
versi rotasi, 158 byte
ditambahkan
s=
untuk mengingat string dan%s.length
memutar.sumber