pengantar (dapat diabaikan)
Menempatkan semua angka positif dalam urutan regulernya (1, 2, 3, ...) agak membosankan, bukan? Jadi di sini adalah serangkaian tantangan seputar permutasi (perombakan) dari semua bilangan positif. Ini adalah tantangan kelima dalam seri ini (tautan ke tantangan pertama , kedua , ketiga dan keempat ).
Dalam tantangan ini, kita akan bertemu dengan array Wythoff, yang merupakan longsoran terjalin dari urutan Fibonacci dan urutan Beatty!
The angka Fibonacci mungkin untuk sebagian besar dari Anda urutan terkenal. Diberi dua angka awal dan , berikut diberikan oleh: untuk .
The Beatty urut , mengingat parameter adalah: untuk . Salah satu sifat dari urutan Beatty adalah bahwa untuk setiap parameter , ada tepat satu parameter , sehingga urutan Beatty untuk parameter tersebut dipisahkan dan digabungkan bersama-sama, mereka merentang semua bilangan alami tidak termasuk 0 (mis: ).
Sekarang inilah bagian mindblowing: Anda dapat membuat array, di mana setiap baris adalah urutan Fibonacci dan setiap kolom adalah urutan Beatty. Array ini adalah array Wythoff . Bagian terbaiknya adalah: setiap angka positif muncul tepat sekali dalam array ini! Array terlihat seperti ini:
1 2 3 5 8 13 21 34 55 89 144 ...
4 7 11 18 29 47 76 123 199 322 521 ...
6 10 16 26 42 68 110 178 288 466 754 ...
9 15 24 39 63 102 165 267 432 699 1131 ...
12 20 32 52 84 136 220 356 576 932 1508 ...
14 23 37 60 97 157 254 411 665 1076 1741 ...
17 28 45 73 118 191 309 500 809 1309 2118 ...
19 31 50 81 131 212 343 555 898 1453 2351 ...
22 36 58 94 152 246 398 644 1042 1686 2728 ...
25 41 66 107 173 280 453 733 1186 1919 3105 ...
27 44 71 115 186 301 487 788 1275 2063 3338 ...
...
Elemen pada baris dan kolom didefinisikan sebagai:
dengan adalah rasio emas: .
Jika kita mengikuti anti-diagonal array ini, kita mendapatkan A035513 , yang merupakan urutan target untuk tantangan ini (perhatikan bahwa urutan ini ditambahkan ke OEIS oleh Neil Sloane sendiri!). Karena ini adalah tantangan "urutan murni", tugasnya adalah mengeluarkan untuk diberikan sebagai input, di mana adalah A035513 .
Ada strategi yang berbeda yang dapat Anda ikuti untuk sampai ke , yang membuat tantangan ini (menurut saya) benar-benar menarik.
Tugas
Diberikan input integer , output dalam format integer, di mana adalah A035513 .
Catatan: pengindeksan berbasis 1 diasumsikan di sini; Anda dapat menggunakan pengindeksan berbasis 0, jadi , dll. Sebutkan ini dalam jawaban Anda jika Anda memilih untuk menggunakan ini.
Uji kasus
Input | Output
---------------
1 | 1
5 | 7
20 | 20
50 | 136
78 | 30
123 | 3194
1234 | 8212236486
3000 | 814
9999 | 108240
29890 | 637
Mungkin menyenangkan untuk mengetahui bahwa terbesar untuk adalah
Aturan
- Input dan output adalah bilangan bulat
- Program Anda setidaknya harus mendukung input dalam kisaran 1 hingga 32767). Perhatikan bahwa naik ke 30 digit angka dalam kisaran ini ...
- Input yang tidak valid (0, float, string, nilai negatif, dll.) Dapat mengakibatkan output yang tidak terduga, kesalahan atau (tidak) perilaku yang didefinisikan.
- Standar I / O aturan berlaku.
- Celah default dilarang.
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang
999
tidak9999
Jawaban:
Jelly ,
2724 byteCobalah online!
Tautan monadik menggunakan pengindeksan berbasis 1. Terima kasih kepada @JonathanAllan untuk cara yang lebih baik untuk mendapatkan baris dan kolom dari
n
dan menghemat 3 byte. Dalam bentuk terpendek, ini terlalu lambat untuk n yang lebih besar di TIO, jadi yang berikut Coba online! mengurangi ukuran daftar awal baris dan kolom dengan biaya tiga byte.Penjelasan
Catatan ini didasarkan pada deskripsi kode Python pada halaman OEIS.
sumber
...×⁹r‘ÆḞ¤Sð/
simpan satu dalam versi penggabungan Anda ( TIO )R ,
143130124123 byteCobalah online!
splits
array di sepanjang antidiagonals.k
hanya ada untuk mencegah pemaksaandrop=F
argumen dalamm[-1:-2,]
kasus inin=1
.Terima kasih kepada Neil untuk menunjukkan golf 1 byte.
R ,
150138132 byteCobalah online!
Menerapkan formulaT( n , k ) = Fi b ( k + 1 ) ⋅ ⌊ n ⋅ ϕ ⌋ + Fi b ( k ) ⋅ ( n - 1 ) untuk mendapatkan menghasilkan array, lalu
splits
sepanjang antidiagonals dan mengekstraknth
elemen.Terima kasih kepada Robin Ryder untuk
T[2]=1
trik menghasilkan urutan Fibonacci.Both solutions are highly inefficient, creating an
nxn
matrix of (most likely)double
s, as R promotesinteger
(32-bit signed) todouble
automatically when overflowing, but the second one should be quite a lot faster. Takingn
as a bignum should work automatically, using the callgmp::as.bigz(n)
, should loss of precision underdouble
s be worrisome, and then the language would beR + gmp
.sumber
(1+5^.5)/2
instead of(.5+5^.5/2)
?Wolfram Language (Mathematica), 90 bytes
Try it online!
sumber
Jelly, 30 bytes
Try it online!
This is a little slow, but a huge improvement is made with a prefix of
Ḥ½Ċ
(double, square-root, ceiling) like in this test-suite.sumber
740496902
adalah hasil untuk999
Arang , 54 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Diindeks 0. Hanya menggunakan bilangan bulat aritmatika sehingga berfungsi untuk nilai besar yang arbitrer. Penjelasan:
Masukan
q
.Hitung antidiagonal dengan mengurangi angka yang semakin meningkat dari
q
, yang berakhir dengan nomor baris targetm
.Hitung
m+1
ketentuan pertama A019446 , meskipun kami hanya tertarik padam
th.Hitung
n+4
syarat pertama dari seri Fibonacci umum yang dimulai dengan[a(m), m]
. Ketentuan urutan ini adalahm
ketentuan th A019446 , A001477 , A000201 , A003622 , A035336 ; dua yang terakhir ini adalah dua kolom pertama dari array Wythoff, dan dengan demikian urutan ini berlanjut dengan sisam
baris th dari array.Keluarkan istilah yang diinginkan.
sumber