pengantar
Tentu saja, kita punya banyak tantangan urutan , jadi ini satu lagi.
Urutan Kimberling ( A007063 ) berlaku sebagai berikut:
1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28, 22, ...
Ini diproduksi dengan mengocok iterasi normal:
[1] 2 3 4 5 6 7 8
Istilah pertama dari urutan tersebut adalah 1
. Setelah itu, kami merombak urutan sampai semua istilah di sebelah kiri digunakan. Pengocokan memiliki pola right - left - right - left - ...
. Karena tidak ada istilah di sebelah kiri 1
, tidak ada pengocokan. Kami mendapatkan yang berikut ini:
2 [3] 4 5 6 7 8 9
Pada iterasi ke- i , kami membuang item ke- i dan meletakkannya di urutan kami. Ini adalah iterasi ke - 2 , jadi kami membuang item ke - 2 . Urutan menjadi: 1, 3
. Untuk iterasi kami berikutnya, kami akan mengocok iterasi saat ini dengan pola di atas. Kami mengambil item yang tidak digunakan pertama di sebelah kanan item ke- i . Ini terjadi 4
. Kami akan menambahkan ini ke iterasi baru kami:
4
Sekarang kita akan mengambil item yang tidak digunakan pertama di sebelah kiri item ke- i . Ini 2
. Kami akan menambahkan ini ke iterasi baru kami:
4 2
Karena tidak ada item yang tersisa di sebelah kiri item ke- i , kami hanya akan menambahkan sisa urutan ke iterasi baru:
4 2 [5] 6 7 8 9 10 11 ...
Ini adalah iterasi ke - 3 kami , jadi kami akan membuang item ke - 3 , yaitu 5
. Ini adalah item ketiga dalam urutan kami:
1, 3, 5
Untuk mendapatkan iterasi berikutnya, ulangi saja prosesnya. Saya sudah membuat gif jika tidak jelas:
Gif itu membuat saya lebih lama daripada menulis posting sebenarnya
Tugas
- Dengan bilangan bulat n -negatif , hasilkan n syarat pertama dari urutan
- Anda dapat menyediakan fungsi atau program
- Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Kasus uji:
Input: 4
Output: 1, 3, 5, 4
Input: 8
Output: 1, 3, 5, 4, 10, 7, 15, 8
Input: 15
Output: 1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28
Catatan: Koma dalam output tidak perlu. Misalnya, Anda dapat menggunakan baris baru, atau menampilkan daftar, dll.
Jawaban:
Pyth, 22 byte
Cobalah online: Demonstrasi
Cukup lakukan teknik pengocokan yang dijelaskan dalam OP.
Penjelasan:
sumber
Julia,
7871 byteIni adalah fungsi tanpa nama yang menerima integer dan mengembalikan array integer. Untuk menyebutnya, tetapkan ke variabel.
Pendekatan di sini sama dengan yang dijelaskan pada OEIS.
Tidak Disatukan:
Disimpan 7 byte berkat Mauris!
sumber
Mathematica 130 byte
Kita mulai dengan daftar yang terdiri dari rentang dari
1
ke3x
, di manax
jumlah istilah urutan Kimberling yang diinginkan.Pada setiap langkah,
n
,TakeDrop
istirahat daftar saat menjadi daftar depan2n+1
istilah (di mana pekerjaan dilakukan) dan daftar belakang (yang akan kemudian bergabung dengan ulang daftar depan). Daftar depan dicocokkan dengan pola berikut, di{t___,z,r___}
mana z adalah istilah Kimberling di tengah daftar depan.r
adalahRiffle
dengan kebalikan darit
dan kemudian daftar belakang ditambahkan.z
dihapus dan ditambahkan ke (AppendTo
) urutan Kimberling yang tumbuh.n
ditambahkan oleh1
dan daftar saat ini diproses oleh fungsi yang sama viaNest.
Contoh
sumber
Python 2, 76 byte
Penjelasan
Ini adalah formula OEIS setelah banyak transformasi golf-y! Itu bekerja dengan indah . Kode aslinya adalah
Saya pertama kali menyingkirkan
i
, menggantinya dengana+1
mana - mana dan memperluas ekspresi:Kemudian, menulis ulang
b<2*a-1
sebagai-~b<2*a
untuk menyimpan byte spasi, dan memindahkan+1
ke seleksi, pembagian dengan 2, dan negasi:Lalu,
-b-1
adil~b
, jadi kita bisa menulis(b,~b)[b%2]
. Ini sama denganb^0 if b%2 else b^-1
menggunakan operator XOR, atau sebagai alternatifb^b%-2
,.sumber
Pyth,
2925 byteJakube menyimpan 4 byte, tetapi saya tidak tahu cara membaca kode lagi.
Ini solusi lama:
Terjemahan dari jawaban Python saya. Saya tidak pandai Pyth, jadi mungkin masih ada cara untuk mempersingkat ini.
sumber
.W
untuk golf off 4 bytes:VQ+.W<hHyN-~tN/x%Z_2Z2hNN
..W
memiliki bentuk:.W<condition><apply><start-value>
. Saya menggunakan nilai awalhN
, seperti yang Anda lakukan diKhN
..W
mengubah nilai ini selama<condition>
itu benar. Saya menggunakan kondisi yang sama seperti Anda<hHyN
. Kondisi ini adalah fungsi lambda dengan parameterH
, sehingga nilai saat ini (dalam kode AndaK
) adalahH
. Dan saya juga menggunakan<apply>
pernyataan yang sama seperti Anda, saya hanya digantiK
denganZ
, karena<apply>
pernyataan itu adalah fungsi lambda dengan parameterZ
. Kita bisa mengabaikan=K
,.W
menangani ini. Ini menggantikan nilai lama dengan yang dihitung. Pada akhirnya cetak+...N
APL,
5644 byteIni adalah kereta monadik tanpa nama yang menerima bilangan bulat di sebelah kanan dan mengembalikan array. Ini kira-kira pendekatan yang sama dengan jawaban Julia saya .
Fungsi terdalam adalah fungsi diad rekursif yang mengembalikan istilah ke- n dalam urutan Kimberling, diberikan n sebagai argumen kiri dan kanan yang identik.
Dengan itu di tangan, kami bisa mendapatkan ketentuan individual dari urutan. Namun, masalahnya kemudian menjadi bahwa ini adalah fungsi diadik , yang berarti membutuhkan argumen di kedua sisi. Masukkan
⍨
operator! Diberi fungsif
dan inputx
,f⍨x
sama denganx f x
. Jadi dalam kasus kami, merujuk pada fungsi yang disebutkan di atasf
, kita dapat membangun kereta monadik berikut:Kami berlaku
f
untuk setiap integer dari 1 ke input, menghasilkan array.Disimpan 12 byte berkat Dennis!
sumber