Geben Sie diese Binärsequenz der Länge 1160 aus:
-++-+--++-++-+--+--++-+--+--++-+--++-++-+-++--++-+---+-++-+--+--++++--+--++-+--++-++----++-++-+-++--++-+-+---++-+--++-++-+--++-+--+---+-++-+--++-++-+--+--++-++-+--++-+--+++-+-+----+++-+--+--+++---++-++-+--+--+++--+-+-+--+-+++-++-+--+--++-+--++-++-+--+--++--+++---+++-+---++-+--++--+-+--+-+++-+--++-++-+--++-+--+--++-+--++--+-++-+-+--+-+-++-+--++-+--+--++-+-+-++-+-+-++---+-+--++++--+---++-+-++-+--++-+--+--++-+--++++--+---+-++++--+--++-++-+--++-+--+--++-+--++-++-+--++-+--+--++-++-+----+++-+--++--+++---+-++-+--+-++---+-++-++-+--+--++--++++-+--+--+--++++--+--+++---++-++-+--++--+-+--+--++-++-+--+--+-+++-++-+--+--++--+-++-++-+--+--+--++-++-+--+++---++-+--++-++---+++---++-++----+++--+-++-+--+--++-+--++-++-+-++--++--++----+++-++--++----++-+++--++---+++----+-+-++-++-++-+-+----+++--++-+--++-++-+--+--+--++-+--++-++-+--++--+-+--+-+-+-++++---+-+-++--+--+-+-+-++-+-+++--+-+--+--+-+++--+-+++---++-+--+--++-++--++---++-+-++--++-+---+-++-+--+-++--++-+--++-+--+-+++-+--++--+-+-+++--+-+--++-++-+--+--+-++---+-++-+-++--++-+--+++-+----++--+-++-+-++--++-+--++-+-++--++-+---+-++-+--+++----+-+-++--++-+--++-++-++-+--+--+--++++---++---+-+-++-+-+++--+-++--+-+--+-+-++---+++-++
Die Sequenz
Diese endliche Sequenz ist eng strukturiert, was hoffentlich zu einzigartigen Komprimierungsmethoden führt. Es ergibt sich aus dem Diskrepanzproblem von Erdős, das in einer früheren Herausforderung aufgezeigt wurde .
Wenn die Terme als +1 und -1 behandelt werden, handelt es sich um eine Sequenz mit maximaler Länge der Diskrepanz 2, was bedeutet, dass:
d
Wenn Sie für jede positive Schrittgröße jedend
Term (beginnend mit demd
dritten Term) nehmen, bleibt die laufende Summe der resultierenden Sequenz zwischen -2 und 2 einschließlich.
Wenn Sie davon ausgehen, dass jedes +
einen Schritt nach rechts und -
einen Schritt nach links bedeutet, bedeutet dies, dass der Schritt jeder d
Anweisung niemals mehr als 2 Schritte von der Startposition entfernt ist.
Wenn Sie zum Beispiel d=3
jeden dritten Term nehmen, erhalten Sie die Sequenz +-++--+--+-...
, deren laufende Summe [1,0,1,2,1,0,1,0,-1,0,1,...]
niemals -3 oder 3 ergibt .
-++-+--++-++-+--+--++-+--+--++-+--+...
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
+ - + + - - + - - + -
1 0 1 2 1 0 1 0 -1 0 -1 ...
Diese Sequenz wurde 2014 über eine Computersuche gefunden. Siehe dieses Dokument , in dem die Sequenz in Anhang B wiedergegeben ist. Die Suche beweist, dass 1160 die maximale Länge einer Diskrepanz-2-Sequenz ist, obwohl es mehr als eine Sequenz dieser Länge gibt. Das 2015 nachgewiesene Erdős-Diskrepanzproblem besagt, dass eine solche Sequenz eine endliche Länge haben muss, um eine maximale Diskrepanz c
anstelle von 2 zu erreichen.
Zeitbedarf
Ihr Code sollte innerhalb von 5 Sekunden fertig sein . Dies soll das brachiale Erzwingen einschränken.
Ausgabeformat
Sie können zwei festgelegte unterschiedliche Zeichen oder Werte für +
und -
in einem beliebigen listen- oder zeichenfolgenähnlichen Format verwenden. Das Format sollte eines sein, bei dem die 1160-Bit-Werte direkt abgelesen werden können, und nicht beispielsweise als Zahl über ihre Binärdarstellung oder als Zeichenfolge über Zeichenwerte codiert werden. Für die Ausgabe von Zeichenfolgen ist eine nachgestellte Newline zulässig.
Bestenliste
Antworten:
Jelly , 149 Bytes
Es gibt ein Muster, zum Beispiel sind nur 81 der 8 binären Zeichenfolgen mit 256 Längen vorhanden, wenn man die Sequenz in acht zerlegt, aber ich habe (zumindest noch) keine Möglichkeit bemerkt, irgendeine zu verwenden, um die Byteanzahl von dieser direkten Basis zu reduzieren 250 Komprimierung in eine Binärliste umgewandelt.
Probieren Sie es online! (Die Fußzeile formatiert die Binärliste zu einer Zeichenfolge, um den direkten Vergleich zu erleichtern.)
quelle
Python 2 ,
269259256247245243 BytesProbieren Sie es online!
quelle
JavaScript (ES6),
263253252 ByteIch habe versucht, so wenig Nutzdaten wie möglich zu verwenden. Leider - aber nicht überraschend - erfordert dies ziemlich viel Dekomprimierungscode.
Nervenzusammenbruch:
163153152 BytesUnten ist eine formatierte Version ohne die Daten. Der Rohcode befindet sich im Demo-Snippet.
Wie?
Wir verfolgen die laufenden Summen eines [i] jedes i- ten Terms. Jedes Mal, wenn eine dieser Summen die Untergrenze -2 erreicht , wissen wir, dass der nächste Term ein + sein muss . Die gleiche Logik gilt für die obere Grenze. Dies ist bis zu i = 264 hilfreich und speichert darüber hinaus kein zusätzliches Byte.
Dies lässt uns mit 599 Begriffen, die nicht erraten werden können. Wir speichern sie als ⌈599 / 8 75 = 75 Bytes, codiert in einer 100- stelligen Base64-Zeichenfolge.
Demo
Code-Snippet anzeigen
quelle
Jelly ,
110109107 BytesDies dauert bei TIO zu lange, dauert aber auf meinem Desktop-Computer weniger als 3 Sekunden.
Probieren Sie es online!
quelle
Jelly ,
135133130129105104 BytesBasierend auf den vorherigen Elementen der Sequenz erstellt der Algorithmus eine fundierte Vermutung, was das nächste Element sein könnte. Dies funktioniert mit Ausnahme von 99 Elementen, deren Indizes fest codiert sind, damit die entsprechenden Elemente ausgetauscht werden können.
Probieren Sie es online!
quelle
MATL , 224 Bytes
Die Ausgabe hat die Form
1 0 0 1 0 ...
, wobei1
entspricht'-'
und0
entspricht'+'
.Probieren Sie es online!
Erläuterung
Die Sequenz wurde lauflängencodiert. Alle 720 Läufe haben die Längen 1, 2, 3 oder 4, wobei 3 oder 4 weniger häufig sind. Also wurde jede 3 durch 2, 0, 1 ersetzt (ein Lauf von 2, dann ein Lauf von 0 des anderen Symbols, dann wieder ein Lauf von 1) und in ähnlicher Weise wurde jede 4 durch 2, 0, 2 ersetzt ergibt ein ternäres Array der Länge 862.
Dieses Array wird in Base-94-Codierung konvertiert und ist die lange Zeichenfolge, die im code (
'$Te...kG'
) angezeigt wird . Die Base 94-Codierung verwendet alle 95 druckbaren ASCII-Zeichen mit Ausnahme des einfachen Anführungszeichens (das maskiert werden müsste).Der Code konvertiert diese Zeichenfolge von der Basis 94 zur Basis 3 und verwendet das Ergebnis, um die Symbole
[1 0 1 0 ... 0]
(Array mit der Länge 862) mit der Lauflänge zu decodieren .quelle
Jelly , 95 Bytes
Ein Mittelpunkt zwischen meinen beiden vorherigen Ansätzen.
Der Code versucht, 842 Elemente der Sequenz zu erraten und die verbleibenden 318 fest zu codieren. 19 der Vermutungen sind falsch und müssen über eine Liste fest codierter Indizes zurückgesetzt werden.
Probieren Sie es online!
Wie es funktioniert
©
B
Ḥ
C
⁽¡ɠ
Ḋ
quelle
Holzkohle , 150 Bytes
Probieren Sie es online!
Verwendet die eingebaute String-Komprimierung von Charcoal. Verwendet
.
für-
und!
für+
.quelle
CJam, 153 Bytes
Verwendet
1
für-
und0
für+
.Enthält nicht druckbare Dateien. Probieren Sie es online!
Das ist ziemlich einfach. Konvertiert eine lange Sequenz von Base 256 nach Base 2.
quelle
Python 3 ,
236232 BytesVielen Dank an Mego für das Speichern von 4 Bytes
Probieren Sie es online!
Verwendet die CP-437-Codierung. Vielen Dank an Dennis für den Hinweis auf einen Fehler.
quelle
437
ist ein Alias fürcp437
, so dass Sie 4 Bytes abschneiden können, indem Sie diecp
Bits bei jedem Auftreten entfernen.Python 2 ,
364250 BytesVielen Dank an Jonathan Allan für das Speichern von 114 Bytes.
Probieren Sie es online!
quelle
C # , 385 Bytes
Daten
String
Das vorgetäuschte Ergebnis.Golf gespielt
Ungolfed
Vollständiger Code
Releases
385 bytes
- Anfangslösung.Anmerkungen
quelle
05AB1E , 149 Bytes
Super langweilig. Nur eine komprimierte Zahl. Verwendet
1
für-
und0
für+
.Probieren Sie es online!
quelle
PHP, 276 Bytes
Probieren Sie es online!
quelle
Ruby , 245 Bytes
Ausgang 0 für + und 1 für -.
Probieren Sie es online!
quelle
Perl, 164 Bytes
Hexdump:
Die naheliegende, langweilige Lösung: Setzen Sie einfach alle Bits in eine Binärzeichenfolge, 8 Bits pro Byte. Verwendet 0 für - und 1 für +. Ich werde versuchen, dies etwas mehr zu golfen.
quelle
Retina , 333 Bytes
Probieren Sie es online!
quelle