Definisi
Mari kita sebut deret integer (tak terbatas) universal jika berisi setiap deret integer terbatas sebagai urutan berikutnya.
Dengan kata lain, urutan bilangan bulat (a 1 , a 2 , ...) bersifat universal jika dan hanya jika, untuk setiap urutan bilangan bulat terbatas (b 1 ,…, b n ) , ada offset k sedemikian rupa sehingga (a k + 1 ,…, A k + n ) = (b 1 ,…, b n ) .
Urutan bilangan prima positif, misalnya, tidak universal, antara lain karena alasan berikut.
Itu tidak mengandung bilangan bulat negatif, 1 , atau angka gabungan.
Meskipun mengandung 3 , itu tidak mengandung urutan yang berdekatan (3, 3, 3) .
Meskipun mengandung 2 dan 5 , itu tidak mengandung urutan yang berdekatan (2, 5) .
Meskipun mengandung urutan yang berdekatan (7, 11, 13) , itu tidak mengandung urutan yang berdekatan (13, 11, 7) .
Tugas
Pilih salah satu urutan bilangan bulat yang universal (a 1 , a 2 , ...) dan menerapkannya dalam bahasa pemrograman pilihan Anda, taat kepada aturan berikut.
Anda dapat mengirimkan program atau fungsi lengkap.
Anda memiliki tiga opsi untuk I / O:
Jangan masukan dan cetak atau kembalikan seluruh urutan.
Ambil indeks n sebagai masukan dan mencetak atau kembali sebuah n .
Ambil indeks n sebagai input dan cetak atau kembali (a 1 ,…, a n ) .
Untuk opsi I / O 2 dan 3 , Anda dapat menggunakan pengindeksan berbasis 0 jika Anda mau.
Kiriman Anda harus bersifat deterministik: jika dijalankan beberapa kali dengan input yang sama, ia harus menghasilkan output yang sama.
Selain itu, kecuali jika sudah jelas, harap buktikan bahwa urutan yang Anda pilih bersifat universal. Bukti Anda mungkin tidak bergantung pada dugaan yang tidak terbukti.
Aturan standar kode-golf berlaku. Semoga kode terpendek dalam byte menang!
Jawaban:
Sekam , 5 byte
Ini mencetak daftar yang tak terbatas
Cobalah online! atau cari indeks pertama dari urutan Anda . (Membutuhkan banyak memori untuk sebagian besar urutan)
Penjelasan:
Dalam Husk
Ṗ
berperilaku baik untuk daftar yang tak terbatas. Anda dapat melihat perilakunya di sinisumber
Q
kerjanya. (Saya pikir saya mengerti, tapi saya tidak yakin.)Ṗ
, bukanQ
Python 2 ,
494643 bytef(n)
kembali sebuah n saja. Ini menggunakan digit terkecil darin
basisd
untuk mengekstraksi salah satu digit yang lebih tinggi.Cobalah online! Skrip ini (milik Dennis) mengambil urutan berhingga apa pun dan memberi Anda tempat di
n
mana urutan itu dimulai.Penjelasan
Misalnya, untuk
n
dalam rentang3141592650
ke3141592659
,d=10
dan digit terakhirn
memilih salah satu dari digit lainnya. Kemudian kita tambahkan-d/2
untuk mendapatkan nilai negatif.Alternatif mandiri, juga 43 byte:
sumber
len(`n`)
bukanlen(str(n))
.n=2**63-1
sejak representasi mendapatL
ditambahkan (str(n)
akan membahas itu selama tiga byte jika perlu).Brachylog 2, 11 byte
Cobalah online!
Saya juga mencoba algoritma yang menggunakan partisi aditif pada daftar, tetapi tidak lebih pendek. Ini adalah generator yang menghasilkan aliran bilangan bulat tak terbatas sebagai keluaran; tautan TIO memiliki header untuk mencetak sepuluh ribu pertama darinya.
Penjelasan
Program dimulai dengan mencoba semua kemungkinan integer secara berurutan (
≜
mencoba semua kemungkinan yang tersisa, untuk integer secara default). Itu 0, 1, -1, 2, -2, dll. (Meskipun bilangan bulat negatif tidak mencapai akhir program). Ini adalah satu-satunya langkah "tak terbatas" dari program; semua yang lain terbatas.~×
kemudian menghasilkan semua faktorisasi yang mungkin dari bilangan bulat, memperlakukan pesanan yang berbeda sebagai berbeda, dan hanya menggunakan nilai dari 2 ke atas (sehingga hanya ada banyak yang terbatas); perhatikan bahwa bilangan komposit diizinkan dalam factorisation, bukan hanya bilangan prima. Ini berarti bahwa semua urutan kemungkinan bilangan bulat ≥ 2 akan dihasilkan oleh langkah ini di beberapa titik dalam pelaksanaan fungsi (karena urutan seperti itu pasti memiliki beberapa produk, dan produk tersebut akan dihasilkan di beberapa titik oleh awal≜
).Kita kemudian perlu memetakan himpunan sekuens tersebut ke himpunan semua sekuens integer, yang dilakukan dalam dua langkah: mengurangkan 2 (
-₂
) dari setiap elemen (ᵐ
), memberi kita sekumpulan semua sekuens integer nonnegatif, lalu mengambil plus atau minus (~ȧ
, yaitu "nilai yang memiliki nilai absolut") setiap elemen (ᵐ
). Langkah terakhir jelas-jelas tidak deterministik, sehingga Brachylog memperlakukannya sebagai generator, menghasilkan semua daftar yang mungkin yang elemennya plus atau minus elemen yang sesuai dari daftar input. Ini berarti bahwa kita sekarang memiliki generator untuk semua urutan bilangan bulat yang mungkin, dan itu menghasilkan mereka dalam urutan yang berarti mereka semua dihasilkan (khususnya, urutan yang Anda dapatkan jika Anda mengambil nilai absolut dari setiap elemen, tambahkan 2 untuk setiap elemen, dan kemudian memesan oleh produk dari elemen yang dihasilkan).Sayangnya, pertanyaannya menginginkan urutan tunggal, bukan urutan urutan, jadi kita perlu dua perintah lagi. Pertama,
≜
meminta Brachylog untuk secara eksplisit menghasilkan urutan sekuens secara ketat (sebagai lawan menghasilkan struktur data yang menggambarkan konsep sekuens yang dihasilkan melalui metode ini, dan tidak benar-benar menghasilkan sekuens sampai diperlukan); ini terjadi untuk membuat program lebih cepat dalam hal ini, dan memastikan bahwa output dihasilkan dalam urutan yang diminta. Akhirnya,∋
menyebabkan generator mengeluarkan elemen-elemen dari urutan individu satu per satu (pindah ke urutan berikutnya setelah itu mengeluarkan semua elemen dari urutan sebelumnya).Hasil akhirnya: setiap urutan bilangan bulat yang mungkin dihasilkan dan dihasilkan, satu elemen pada satu waktu, dan semua disatukan menjadi satu urutan universal tunggal.
sumber
Pyth - 11 byte
n
produk daya cartesian[-n, n]
, untuk semuan
.Cobalah online di sini (secara terbatas).
sumber
Python 2 ,
10099 byteitertools
built-in ke loop tanpa batas.Cobalah online!
Tanpa batas
n
waktu mencetak semua permutasi dari- kali rentang integer berulang[-n; n)
untuk semua integer non-negatifn
.Anda dapat mencari offset pertama
k
untuk setiap urutan menggunakan versi yang dimodifikasi ini .sumber
while~0:
. Heh heh ...itertools.count
Perl 6 , 91 byte
Cobalah online!
Ini menggunakan metode yang mirip dengan beberapa jawaban lainnya. Menggunakan produk Cartesian untuk mencetak elemen
(-1,0,1)
, lalu semua pasangan elemen yang(-2,-1,0,1,2)
dipesan, kemudian semua kembar tiga elemen yang dipesan(-3,-2,-1,0,1,2,3)
, dll.Saya baru mengenal Perl, jadi mungkin ada lebih banyak golf yang bisa dilakukan.
Versi yang lebih mudah dibaca:
sumber