Pencari Nomor Kamar
Saya telah menemukan teknik pemecahan masalah yang menarik di pekerjaan saya ketika diberi nomor kamar yang salah dari seorang kolega untuk rapat. Sesekali, saat dalam perjalanan ke sebuah pertemuan, seorang anggota di tim saya akan mengirim saya nomor kamar yang salah, biasanya karena mereka terburu-buru di meja mereka dan jari yang salah kunci yang salah.
Menariknya, setibanya di ruangan yang salah, saya biasanya bisa menebak kamar mana yang mereka maksud dengan membayangkan Keypad Numerik :
dan dengan menebak nomor yang berdekatan, mereka bermaksud menekan.
Tantangan
Tantangan Anda adalah menulis fungsi yang menggunakan nomor gedung kantor (000-999) dan menampilkan kemungkinan solusi salah ketik, dengan asumsi kolega Anda hanya salah ketik satu digit.
Tabel berikut menunjukkan nomor mana yang berdekatan satu sama lain pada Keypad Numerik:
0 -> 1,2
1 -> 0,2,4
2 -> 0,1,3,5
3 -> 2,6
4 -> 1,5,7
5 -> 2,4,6,8
6 -> 3,5,9
7 -> 4,8
8 -> 5,7,9
9 -> 6,8
Memasukkan
3 digit angka: 000-999
. Asumsikan input tepat 3 digit. Jika jumlahnya kurang dari 100 atau kurang dari 10, Anda akan diberi angka nol di depan. (yaitu 004 & 028).
Keluaran
Daftar kamar yang memungkinkan. Ini bisa dalam bentuk apa pun yang Anda inginkan, asalkan ada pembatas antara nomor kamar. (mis. spasi, koma, baris baru, dll.) Jika angkanya kurang dari 100 atau kurang dari 10, Anda dapat atau tidak dapat memiliki nol terkemuka sebagai output, itu terserah Anda. (Yaitu 004 bisa 004 04 4
, dan 028 bisa 028 28
)
Kasus Uji (angka nol di depan adalah opsional):
008 -> 108, 208, 018, 028, 005, 007, 009
123 -> 023, 223, 423, 103, 113, 133, 153, 122, 126
585 -> 285, 485, 685, 885, 555, 575, 595, 582, 584, 586, 588
777 -> 477, 877, 747, 787, 774, 778
963 -> 663, 863, 933, 953, 993, 962, 966
555 -> 255, 455, 655, 855, 525, 545, 565, 585, 552, 554, 556, 558
Ini adalah kode-golf , jadi kode terpendek dalam byte untuk setiap bahasa akan menang.
933
jadi saya sudah memperbaikinya.Jawaban:
Bahasa Wolfram (Mathematica) ,
112106 byteMenyadari bahwa keypad numerik pada dasarnya adalah 3x3
GridGraph
dengan tepi ditambahkan untuk 0, kita mendapatkan angka yang berdekatan untuk setiap digit inputAdjacencyList
.Ini bisa dilihat di bawah:
EdgeAdd[GridGraph[{3,3},VertexLabels->"Name",GraphLayout->"SpringEmbedding"],{0<->1,0<->2}]
hasil:Lalu saya gunakan
Tuples
untuk mencari tahu semua kesalahan yang mungkin terjadi dan memilih mereka yang memiliki satu kesalahan denganSelect
danEditDistance
. Omong-omong, ini akan bekerja untuk nomor kamar yang lebih panjang dan Anda juga dapat meningkatkanEditDistance
parameter untuk memungkinkan lebih dari satu kesalahan. Mungkin bisa bermain golf ini sedikit lebih jauh tetapi ingin menunjukkan pendekatan saya.Versi golf yang sedikit lebih keras, dikodekan dengan panjang 3 nomor kamar (106 Bytes). Ini akan ditampilkan sebagai daftar peringkat 3 yang sesuai dengan setiap digit:
Cobalah online!
sumber
DamerauLevenshteinDistance
bukanEditDistance
yang juga akan mencakup kesalahan transposisi.Python 2 , 89 byte
Cobalah online!
1 st dan 5 th karakter mungkin tidak ditampilkan di sini (browser tergantung), tapi string lengkap setara dengan
[21, 204, 1035, 62, 157, 2468, 359, 48, 579, 68]
sumber
05AB1E , 29 byte
Cobalah online!
sumber
R , 190 byte
Cobalah online!
Upaya kedua saya di CodeGolf! Cukup panjang, 190 byte, tetapi yang terbaik yang bisa saya kelola dengan R. Curious untuk melihat apakah orang lain memiliki umpan balik atau dapat melakukan lebih baik!
sumber
:
lebih dari*/+-
dapat mengurangi beberapa byte di baris pertama, menyingkirkando.call
, memperlakukana
sebagaimatrix
dan mentransposisi menyimpan sekitar 39 byte: Cobalah online!JavaScript (Firefox 30-57),
115109 byteSunting: Disimpan 6 byte berkat @ edc65 (meskipun disarankan
0
sekarang muncul setelah saran lainnya). Versi ES6,118112 byte:sumber
[...[12,240,1350,26,157,2468,359,48,579,78][c]+'']
[for(...)]
adalah salah satu dari beberapa proposal sintaks pemahaman array yang tidak pernah berhasil masuk ke dalam ECMAscript. Ini memungkinkan Anda untuk mengulangi iterator dan menyaring dan / atau memetakan hasilnya secara ringkas. (Saya menemukannya sangat berguna ketika melakukan iterasi ganda.)Java,
205177 byteSaya tahu ini sudah lama dibandingkan dengan jawaban lainnya. Alasan saya: ada di Jawa.
Oracle harus mengubah nama
toCharArray
menjadi sesuatu sepertigetCrs
.Kredit
-28 karakter oleh Kevin Cruijssen
sumber
(String b)->
bisa adilb->
, dan Anda bisa menghapus trailing;
. Adapun hal-hal aktual untuk golf: Anda hanya menggunakana
sekali, sehingga Anda dapat menghapusString[]a=...;
dan menggunakannya"12,024,0135,26,157,2468,359,48,579,68".split(",")[...]
secara langsung. JugaByte.parseByte
bisanew Byte
. Total: 177 byte .Ruby 97 byte
Cobalah online!
Atau, 94 karakter tetapi 100 byte
Cobalah online!
sumber
C (gcc) , 136 atau 114 byte
ASCII versi 136 byte
Cobalah online!
Unicode
114108 bytes (Sepertinya TiO menghitung aneh untuk ini)Terima kasih kepada @ceilingcat untuk versi ini.
Cobalah online!
sumber
Perl 5 ,
12085 + 2 (-F
) = 87 byteCobalah online!
Disimpan 35 byte dengan meminjam ide dari jawaban ruby @ AsoneTuhid.
sumber
Python 2 , 103 byte
terima kasih kepada @Lynn untuk -4 byte.
Cobalah online!
sumber
in`0x134cd9a07d1e58feab643f7db24102`[int(v)::10]
(Saya mencobaint('…',36)
juga tetapi satu byte lebih lama.)Julia 0,6 , 93 byte
Cobalah online!
0x502A044228550A21102B05406
adalahUInt128
di mana1+10j
bit th diatur jika iff dii
sebelahj
numpad.big(1)
adalah aBigInt
. Ini digunakan untuk mencegah overflow dan menggunakan lebih sedikit karakter daripadaInt128(1)
atauUInt128(1)
.sumber
SQL (SQLite), 533 byte
Tidak disatukan
Penjelasan
Input adalah satu baris teks pada tabel
t
dengan koloms
. Pemahaman saya adalah bahwa menurut jawaban meta ini adalah bentuk input yang dapat diterima. Input dapat dibuat seperti di bawah ini.Solusi beranotasi
sumber
Kotlin , 117 byte
Yg diperindahkan
Uji
TIO
TryItOnline
sumber
Jelly , 35 byte
Cobalah online!
-1 terima kasih kepada Jonathan Allan .
Penjelasan sedang diperbarui ...
sumber
Wẋ3
->ḷþ
T-SQL , 322 byte
Input diambil dari kolom
s
tabel baris tunggal bernamat
:Tidak Disatukan:
SQLFiddle
sumber