Tantangan Nomor Snaking
Saya bertanya-tanya berapa banyak angka yang ada antara 1 dan 50.000?
Snaking Numbers, dalam game ini, adalah angka yang dapat diketik pada papan angka tradisional (format di bawah) dengan menggerakkan satu tombol ke atas, bawah, kiri, atau kanan.
7 8 9
4 5 6
1 2 3
0
Misalnya, jika Anda mulai dengan angka 5, Anda dapat memilih 4, 6, 8, atau 2 sebagai langkah valid berikutnya - namun 7, 3, 9, dan 1 terlarang karena diposisikan secara diagonal ke kunci saat ini . Jadi, jika Anda memiliki 5, maka 2, pilihan kunci Anda berikutnya yang layak adalah 0, 1, 3, atau 5 lagi.
Dalam latihan Code Golf ini, Anda harus menampilkan daftar semua bilangan ular positif antara 1 dan 50k, bersama dengan penghitungan akhir dari semua angka yang memenuhi kriteria.
Aturan
- Angka tidak bisa dimulai dengan Nol.
- Bilangan harus berupa bilangan bulat positif.
- Setiap angka berurutan, baca dari kiri ke kanan, harus "ular" di sekitar panel angka.
- Ular tidak dapat berjalan secara diagonal melintasi kunci
- Angka 0 dapat diakses dari angka 1 dan 2
- Angka tidak dapat dipasangkan (mis .: 22)
Contoh Nomor Ular yang valid:
12369
45201
1254
10102
1
12
987
Contoh angka yang tidak valid
1238 - 8 is not connected
0001 - multiple leading 0s
0101 - leading 0
159 - snake cannot travel diagonally
4556 - duplicate 5
Seperti Golf Code normal, tujuannya adalah byte paling sedikit!
Menurut matematika dan aturan saya, Anda harus memiliki 670 angka snaking yang valid dalam daftar Anda, ditambah 670 itu sendiri dicetak sebagai angka terakhir.
Jawaban:
K (ngn / k) ,
6057 byteCobalah online!
!50000
daftar0
..49999
1+
tambahkan 1 ke semua{
}#
filter dengan fungsi dalam{
}
10\x
digit desimal dari argumen(
)@
gunakan sebagai indeks di ...!3 3
sepasang daftar:(0 0 0 1 1 1 2 2 2;0 1 2 0 1 2 0 1 2)
2*
kalikan semua dengan 20 1,'
tambahkan0
ke daftar pertama dan1
ke yang kedua+
transpose (pasangan daftar -> daftar pasangan). ini memberi kita tombol kira-kira coords.-':
kurangi dari masing-masing pasangan pasangan sebelumnya. gunakan0 0
sebagai elemen imajiner sebelum yang pertama.1_
jatuhkan dulu+
mengubah urutanx*x:
kuadrat (tetapkan kex
dan kalikan denganx
). di sinix
adalah sepasang daftar - ∆xs dan ∆ys+/
jumlah kedua daftar (elemen demi elemen)5&
min dengan 53!
mod 31=
daftar boolean di mana itu sama dengan 1*/
produk (boolean "dan")(x;#x:
)
buat pasangan hasil dan panjang (#
) dari hasilsumber
Jelly ,
2423 byteProgram lengkap yang mencetak daftar semua hasil dan kemudian jumlah hasil.
Cobalah online!
Bagaimana?
sumber
1.
mengevaluasi1.5
?Python 3 , 140 byte
Cobalah online!
Saya yakin seseorang akan dapat melakukan ini dengan ekspresi daripada string pencarian.
sumber
Python 2 , 101 byte
Cobalah online!
Nomor hex adalah desimal
10120214525632365878969854741
, yang menyandikan setiap pasangan angka yang terurut yang dapat tampak berdekatan satu sama lain.sumber
JavaScript (V8) ,
112 106104 byteDisimpan 2 byte berkat @NahuelFouilleul
Program lengkap.
Cobalah online!
Atau 96 byte jika kita dapat menampilkan angka dalam urutan terbalik:
Cobalah online!
sumber
3
mungkin karena36
sudah dalam string6589632145201478
satu byte lebih pendekStax ,
3735 byteJalankan dan debug di staxlang.xyz!
Itu sangat bagus dan pendek, sampai tidak.
Dibongkar (42 byte) dan penjelasan
2012365478963258741 menyandikan keypad. Lihatlah pasangan digit yang berdekatan. Mungkin jika saya bisa mendapatkan alternatif pendek yang layak yang berjalan di kedua arah untuk setiap pasangan, saya bisa memotong delapan byte
{{om
.Tanpa trailing 670 itu, filter sederhana akan cukup:
f..!
alih-alih{..C_Qf%p
. Mungkin ada cara yang lebih baik untuk menangani penyimpangan ini. Dalam kedua kasus, perilaku rentang filter ini tidak berdokumen.sumber
PHP , 145 byte
Cobalah online!
Untuk setiap angka dari 1 hingga 50.000, periksa setiap digit dari angka itu dari kiri ke kanan. Jika semua digit ada dalam daftar digit yang valid dari digit sebelumnya, angka itu dicetak. Pada akhirnya mencetak 670 kode keras karena itu membutuhkan lebih sedikit byte daripada benar-benar menghitungnya.
sumber
05AB1E , 23 byte
Cobalah online!
Port of Jonathan Jonathan menjawab Jelly .
sumber
₄50*
atau4°5*
ketika saya mencoba sebelumnya. Dan pada awalnya saya bingung mengapa Anda tidak€OP
hanya adilOP
, tetapi kemudian saya menyadari angka satu digit (menjadi daftar kosong setelahüα
) kemudian akan menjadi[] → 0 → 0
bukan[] → [] → 1
. :)4°5*
kapan Anda bisa5°;
? Saya suka ZAK lebih baik. Dan ya, kasing tepi untuk angka satu digit itu menyusahkan.Perl 5 (
-M5.01
),96, 92 byte-4 byte terima kasih kepada @Xcali
TIO
sumber
JavaScript (SpiderMonkey) ,
179173151129 byteCobalah online!
-22 byte terima kasih kepada Arnauld -22 byte terima kasih untuk dana
penjelasan:
@dana juga memberikan solusi 123 byte jika kita dapat mencetak 670 terlebih dahulu
sumber
Ruby , 99 byte
Cobalah online!
sumber
Stax ,
2826 byteJalankan dan debug itu
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
Saus rahasianya ada dalam string literal
"{<f:[/T8Z"
. Setelah menyatukan semua codepoint bersama, Anda dapatkan12360102589147845690
. Pasangan naik dalam string ini adalah gerakan ular yang valid.sumber
15JJ
bukannya219J
akan bekerja dengan baik, tapi saya tidak berpikir Anda bisa golf byte apa pun dari sana kecuali ada konstanta 1-byte untuk15
.Haskell , 118 byte
Cobalah online!
Lulus pertama; Saya tidak pandai kompresi.
Tidak
s=
masuk hitungan, karena kita sebenarnya tidak perlu mengikat hasilnya.Kode tidak dikunci .
sumber
Arang , 42 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Proses kisaran inklusif dari
1
ke50,000
pemain string.Saring yang memiliki pasangan angka yang tidak terkandung dalam string yang dikompresi
01478963202125458565236987410
.Keluarkan array yang tersisa dan panjangnya.
sumber
Japt , 34 byte
Cobalah
sumber
Perl 6 , 64 byte
Cobalah online!
Penjelasan
sumber
~>
belum diimplementasikan, jika tidak, Anda mungkin dapat melakukan ini hanya dengan operator string, dengan bidang bit menjadi stringPyth ,
686545 byteCobalah online!
Inspirasi untuk proses pencarian yang direvisi datang dari jawaban Stax Khuldraeseth na'Barya , pergi beri mereka dukungan!
Sunting 2: Menulis ulang untuk menyimpan banyak byte, versi sebelumnya:
Sunting: Golf 3 byte dengan menggunakan pencarian string, versi sebelumnya:
sumber