Hintergrund
Eine ex-zunehmende Mengenfolge der Ordnung ist definiert als eine Folge von ganzzahligen Mengen S 1 , S 2 , ⋯ , S n, die die folgenden Bedingungen erfüllt:
- Jedes ist eine nicht leere Teilmenge von { 1 , 2 , ⋯ , N } .
- Für ist S i ∩ S i + 1 = ∅ , dh zwei aufeinanderfolgende Sätze haben keine gemeinsamen Elemente.
- Für ist der Mittelwert (Mittelwert) von S i streng kleiner als der von S i + 1 .
Herausforderung
Geben Sie bei einer positiven Ganzzahl N
die Länge der längsten ex-zunehmenden Satzreihenfolge aus N
.
Testfälle
Diese basieren auf den Ergebnissen des Project Euler-Benutzers 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
Regeln
Es gelten die Standardregeln für Code-Golf . Die kürzeste gültige Übermittlung in Bytes gewinnt.
Kopfgeld
Dieses Problem wurde hier im Project Euler-Forum vor ungefähr 4 Jahren diskutiert , aber wir konnten keinen nachweisbaren Polynom-Zeit-Algorithmus (in Bezug auf N
) entwickeln. Daher werde ich der ersten Einreichung, die dies erreicht, +200 Kopfgeld gewähren oder ihre Unmöglichkeit beweisen.
Antworten:
Brachylog , 28 Bytes
Probieren Sie es online aus!
Das ist verdammt langsam. Dauert ungefähr 30 Sekunden
N = 3
und wurde nach 12 Minuten für nicht abgeschlossenN = 4
.Erläuterung
Schnellere Version, 39 Bytes
Dies dauert auf meinem Computer ungefähr 50 Sekunden
N = 4
.Dies ist das gleiche Programm, außer dass wir die Teilmenge der Teilmengen nach Durchschnitt sortieren, anstatt eine zufällige Permutation vorzunehmen. Also verwenden wir
{⟨+/l⟩/₁/₁}ᵒ
stattp
.Wir müssen einen Float-Durchschnitt ermitteln, da ich gerade einen lächerlichen Fehler entdeckt habe, bei dem Floats und Ganzzahlen nicht nach Wert, sondern nach Typ mit Ordnungsprädikaten verglichen werden (dies ist auch der Grund, warum ich beide Durchschnittswerte verwende
<ᵈ
und nicht<₁
vergleiche; letzteres würde dies erfordern doppelter Inversionstrick zur Arbeit).quelle
CJam (81 Bytes)
Online-Demo . Es sollte für die Eingabe
4
in einer angemessenen Zeit ausgeführt werden, aber ich würde es nicht mit höheren Eingaben versuchen.Präparation
quelle
JavaScript (ES6), 175 Byte
Eine naive und eher langsame rekursive Suche. Es dauert ungefähr 15 Sekunden, um die 7 ersten Terme auf TIO zu berechnen.
Probieren Sie es online aus!
oder testen Sie diese modifizierte Version , die die längste ex-zunehmende Set-Sequenz ausgibt.
Wie?
Rekursiver Teil:
quelle
Python 3 ,
205197184182 Bytesachteinundzwanzig Bytes dank ovs .Probieren Sie es online aus!
quelle
sum
anstelle vonchain.from_iterable
.