Latar Belakang
Sebuah mantan peningkatan set urutan urutan didefinisikan sebagai urutan bilangan bulat set yang memenuhi berikut:S 1 , S 2 , ⋯ , S n
- Setiap adalah bagian yang tidak kosong dari . { 1 , 2 , ⋯ , N }
- Untuk , , yaitu setiap dua set berturut-turut tidak memiliki elemen yang sama.S i ∩ S i + 1 = ∅
- Untuk , rata-rata (nilai rata-rata) benar-benar kurang dari .S i S i + 1
Tantangan
Diberikan bilangan bulat positif N
, menampilkan panjang urutan urutan peningkatan terlama yang terlama N
.
Uji kasus
Ini didasarkan pada hasil oleh Project Euler pengguna thundre .
1 => 1 // {1}
2 => 2 // {1} {2}
3 => 3 // {1} {2} {3}
4 => 5 // {1} {2} {1,4} {3} {4}
5 => 7 // {1} {2} {1,4} {3} {2,5} {4} {5}
6 => 10 // {1} {2} {1,4} {3} {1,4,5} {2,3,6} {4} {3,6} {5} {6}
7 => 15 // {1} {2} {1,4} {3} {1,2,7} {3,4} {1,2,5,7} {4} {1,3,6,7} {4,5} {1,6,7} {5} {4,7} {6} {7}
8 => 21
9 => 29
10 => 39
11 => 49
12 => 63
13 => 79
14 => 99
15 => 121
16 => 145
17 => 171
18 => 203
19 => 237
20 => 277
21 => 321
22 => 369
23 => 419
24 => 477
25 => 537
Aturan
Aturan standar kode-golf berlaku. Pengajuan terpendek yang valid dalam byte menang.
Karunia
Masalah ini telah dibahas di sini di forum Project Euler sekitar 4 tahun yang lalu, tetapi kami gagal menghasilkan algoritma waktu polinomial yang dapat dibuktikan (dalam hal N
). Oleh karena itu, saya akan memberikan hadiah +200 kepada kiriman pertama yang mencapai ini, atau membuktikan ketidakmungkinannya.
Jawaban:
Brachylog , 28 byte
Cobalah online!
Ini sangat lambat. Butuh sekitar 30 detik untuk
N = 3
, dan itu tidak selesai setelah 12 menitN = 4
.Penjelasan
Versi lebih cepat, 39 byte
Ini membutuhkan sekitar 50 detik di komputer saya untuk
N = 4
.Ini adalah program yang sama kecuali kami mengurutkan subset dari subset dengan rata-rata alih-alih mengambil permutasi acak. Jadi, kami menggunakan
{⟨+/l⟩/₁/₁}ᵒ
bukanp
.Kita perlu mendapatkan rata-rata float karena saya baru saja menemukan bug konyol di mana float dan integer tidak membandingkan berdasarkan nilai tetapi dengan tipe dengan predikat pemesanan (ini juga mengapa saya menggunakan
<ᵈ
dan tidak<₁
membandingkan kedua rata-rata; yang terakhir akan mengharuskan trik inversi ganda untuk bekerja).sumber
CJam (81 byte)
Demo online . Seharusnya mengeksekusi untuk input
4
dalam waktu yang wajar, tetapi saya tidak akan mencobanya dengan input yang lebih tinggi.Pembedahan
sumber
JavaScript (ES6), 175 byte
Pencarian rekursif yang naif dan agak lambat. Membutuhkan waktu sekitar 15 detik untuk menghitung 7 persyaratan pertama pada TIO.
Cobalah online!
atau uji versi modifikasi ini yang menghasilkan urutan rangkaian peningkatan terlama yang terlama.
Bagaimana?
Bagian rekursif:
sumber
Python 3 ,
205197184182 bytedelapandua puluh satu byte berkat ovs .Cobalah online!
sumber
sum
sebagai gantinyachain.from_iterable
.