Terinspirasi oleh Generate Keyboard Friendly Numbers .
Latar Belakang
Banyak bantalan nomor memiliki tata letak berikut:
789
456
123
0
Kami mendefinisikan lingkungan angka sebagai himpunan sel yang berdekatan secara orthogonal pada numpad yang ditunjukkan, termasuk dirinya sendiri. Misalnya, lingkungan 2 adalah {1,5,3,0,2}
dan lingkungan 0 adalah {1,2,0}
. Ada daftar lingkungan masing-masing angka di bawah ini, di atas kasus uji.
Kami mendefinisikan nomor ramah numpad sebagai bilangan bulat positif di mana, ketika ditulis dalam desimal tanpa memimpin nol, setiap digit kecuali yang pertama berada di lingkungan digit sebelumnya.
Sebagai contoh,
- 7856 adalah nomor ramah numpad karena 8 ada di lingkungan 7, 5 ada di tetangga 8, dan 6 ada di lingkungan 5.
- 1201 adalah nomor ramah numpad karena 2 ada di lingkungan 1, 0 di lingkungan 2, dan 1 di lingkungan 0.
- 82 bukan nomor ramah numpad karena 2 tidak di lingkungan 8.
- 802 bukan nomor ramah numpad karena 0 tidak di lingkungan 8 (lingkungan tidak membungkus).
Urutan OEIS terkait . Perhatikan bahwa urutan terkait ini berbeda karena urutannya 0berbatasan dengan 7bukan 1dan 2.
Tantangan
Diberikan bilangan bulat positif n
, kembalikan nomor n
-th atau n
nomor ramah numpad pertama , di mana yang pertama adalah 1. Anda dapat menggunakan pengindeksan berbasis 0, di mana nomor ramah ke-0 numpad adalah 1.
Lingkungan sekitar
Lingkungan masing-masing digit tercantum di sini:
0:{0,1,2}
1:{0,1,2,4}
2:{0,1,2,3,5}
3:{2,3,6}
4:{1,4,5,7}
5:{2,4,5,6,8}
6:{3,5,6,9}
7:{4,7,8}
8:{5,7,8,9}
9:{6,8,9}
Uji Kasus / Urutan
Ini adalah 100 istilah pertama
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 20, 21, 22, 23, 25, 32, 33, 36, 41, 44, 45, 47, 52, 54, 55, 56, 58, 63, 65, 66, 69, 74, 77, 78, 85, 87, 88, 89, 96, 98, 99, 100, 101, 102, 110, 111, 112, 114, 120, 121, 122, 123, 125, 141, 144, 145, 147, 200, 201, 202, 210, 211, 212, 214, 220, 221, 222, 223, 225, 232, 233, 236, 252, 254, 255, 256, 258, 320, 321, 322, 323, 325, 332, 333, 336, 363, 365, 366, 369, 410, 411, 412, 414, 441, 444, 445, 447]
sumber
Jawaban:
JavaScript (ES6),
104938988 byteMengembalikan istilah N-th dari urutan, 1-diindeks.
Demo
Tampilkan cuplikan kode
sumber
k=(n,a=1)=>n?k(n-([...(x=a+[]).slice(0,-1)].reduce((a,c)=>a*!!~"012 0124 01235 236 1457 24568 3569 478 5789 689".split` `[c].indexOf(x[i++]),i=1)),a+1):a-1
mungkin sesuatu yang bisa membantu, tes saya mungkin terlalu lamaPerl 5 , 123 +1 (-p) = 124 byte
Cobalah online!
sumber
Jelly ,
2724 byteMengembalikan N syarat pertama urutan.
Cobalah online!
Ini adalah port jawaban JS saya .
sumber
05AB1E ,
2423 byteCobalah online!
Mengembalikan nomor ke-n dalam urutan.
Penjelasan:
Gagasan utamanya adalah bahwa, terlepas dari
0
kunci, setiap digit yang dikurangi dan dikonversi ke basis 3 memiliki properti berikut:Tentu saja kita membutuhkan
if
pernyataan untuk menangani0
kunci numpad.sumber
MATL ,
2927 byteMenghasilkan
n
angka ramah numpad pertama .Cobalah online!
Penjelasan
Setiap digit dari
1
ke9
dikodekan sebagai bilangan kompleks yang mewakili posisinya di numpad, menggunakan dalam langkah-2 kisi, di mana bagian nyata mewakili posisi vertikal dan bagian imajiner mewakili posisi horizontal. Jadi1
adalah0+0j
,2
adalah0+2j
,3
adalah0+4j
,4
adalah2+0j
, ...,9
adalah4+4j
.Digit
0
dikodekan sebagai0+1j
, yaitu seolah-olah ditempatkan tepat di antara1
dan2
.Untuk setiap nomor yang ramah numpad kandidat, sebuah "desimal" konversi dasar yang diterapkan menggunakan di atas bilangan kompleks bukan angka
0
,1
, ...,9
. Ini memberikan array, di mana perbedaan absolut berturut-turut dihitung. Nomor kandidat ramah numpad jika dan hanya jika semua perbedaan absolut paling banyak2
(yaitu langkah kisi). Jika itu masalahnya, angkanya tertinggal di tumpukan.Kode menggunakan loop
do
...while
, yang keluar ketika jumlah angka dalam tumpukan sama dengan inputn
.Grid unit akan menjadi pilihan yang lebih alami. Digit
1
,2
dan0
kemudian akan sesuai0+0j
,1+0j
dan0.5+0j
masing-masing. Tapi golfier menggunakan grid langkah-2, karena mengalikan dengan2
(fungsiE
) dan mendorong0+1j
(fungsiJ
) adalah satu byte lebih pendek daripada mendorong0+0.5j
(J2/
atau.5j
)sumber
Jelly , 26 byte
Cobalah online!
-2 byte berkat caird coinheringaahing
-2 bytes berkat Erik the Outgolfer
Penjelasan
sumber
[]
untuk 2 bytePython 2 , 134 byte
Cobalah online!
sumber
f
dan kemudian menggunakannya sekali , Anda bisa memasukkannya dan menyimpan dua byte .Mathematica,
249234202 byteCobalah online!
terima kasih user202729 untuk mengompresi data (-32 bytes)
Hasil saya:
sumber
IntegerDigits
:,IntegerDigits/@{210,4210,53210,632,7541,86542,9653,874,9875,986}
dan menggunakanFreeQ
,,Tr
gunakanDo
alih-alihFor
, gunakan notasi infiks untukAppendTo
dan gunakanDo
alih-alihWhile
untuk mengulangiTr[1^s]
kali, juga menghilangkan variabelp
. Anda juga belum membuktikan bahwa algoritme itu benar, yaitu, jumlah yang dihasilkan selalu kurang dari kuadrat indeksnya, yang diperlukan untuk membuat jawaban valid.PHP, 124 +1 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
Java 8,
192190 byteMengembalikan nomor ke (1-diindeks)
n
dalam urutan.Ini ternyata lebih sulit daripada yang saya kira .. Mungkin hanya memiliki beberapa kentut otak sore ini ..
Penjelasan:
Coba di sini.
sumber