ABC
Betrachten Sie beginnend mit der Zeichenfolge das Ergebnis des wiederholten Anhängens der letzten Hälfte an sich selbst (verwenden Sie die größere Hälfte, wenn die Länge ungerade ist).
Wir bekommen den Fortschritt:
ABC
ABCBC
ABCBCCBC
ABCBCCBCCCBC
ABCBCCBCCCBCBCCCBC
etc...
Stellen Sie S
die resultierende unendliche Zeichenfolge (oder Sequenz) dar, die sich ergibt, wenn dieser Vorgang für immer wiederholt wird.
Tor
Das Ziel dieser Code-Abfrage ist es, den Index des ersten Auftretens von Läufen von C
's in zu finden S
.
Zuerst ist es einfach: C
tritt zuerst am Index 2
, CC
am 4
, CCC
am 7
, CCCC
am auf 26
, aber CCCCC
ist vollständig am Index 27308
! Danach geht mir das Gedächtnis aus.
Der Gewinner ist der Beitrag, der die meisten Laufindizes korrekt generiert (in der Reihenfolge beginnend mit C
). Sie können einen beliebigen Algorithmus verwenden, müssen ihn jedoch erklären, wenn Sie keine grundlegende Brute-Force-Methode verwenden. Die Ein- und Ausgabe kann in jedem leicht verständlichen Format erfolgen.
Wichtiger Hinweis: Ich weiß offiziell nicht, ob S
tatsächlich alle Läufe von C
's enthalten sind. Diese Frage leitet sich von dieser an der Mathematics Stack Exchange ab , in der der Autor auch nichts gefunden hat CCCCCC
. Ich bin gespannt, ob hier jemand kann. (Diese Frage basiert wiederum auf meiner ursprünglichen Frage zum Thema .)
Wenn Sie nachweisen können, dass nicht alle Läufe von in C
auftreten S
, gewinnen Sie automatisch, da diese Frage nicht mehr gültig ist. Wenn niemand dies beweisen oder finden kann, CCCCCC
ist der Gewinner die Person, die die höchste Untergrenze für den Index von CCCCCC
(oder was auch immer der größte ungelöste Lauf ist, wenn CCCCCC
gefunden wird) erhalten kann.
Update: Ein großes Lob an Isaacs und Res , die CCCCCC
bei dem astronomischen Index von 2,124 * 10 ^ 519 gefunden haben. Bei dieser Geschwindigkeit kann ich mir nicht vorstellen, CCCCCCC
mit einer Methode zu finden, die auf roher Gewalt beruht. Gute Arbeit Jungs!
quelle
CCCCC
bei Index 27308 gefunden, aber später hört es sich so an, als ob Sie nicht wissen, wo es zuerst auftritt. Meinten SieCCCCCC
?Antworten:
Gefunden bei 2.124 * 10 ^ 519.
Präzises Index ist 2124002227156710537549582070283786072301315855169987260450819829164756027922998360364044010386660076550764749849261595395734745608255162468143483136030403857241667604197146133343367628903022619551535534430377929831860918493875279894519909944379122620704864579366098015086419629439009415947634870592393974557860358412680068086381231577773140182376767811142988329838752964017382641454691037714240414750501535213021638601291385412206075763857490254382670426605045419312312880204888045665938646319068208885093114686859061215
Nach 3,5-stündiger Suche von res mit dem unten stehenden (alten) Code gefunden.
Um diesen Index herum lautet die Zeichenfolge:
...BCCBCBCCCBCCCCCCBCCB...
Ändern Sie zur Überprüfung die angezeigte Zeile im folgenden Code so, dass sie bei 2946 anstatt bei 5 beginnt. Die Überprüfung dauert 20 Sekunden.
Update: Verbessertes Programm. Das alte Programm hat ~ 10x mehr Stellen als nötig durchsucht.
Neue Version findet das
CCCCCC
in nur 33 Minuten.So funktioniert der Code: Grundsätzlich betrachte ich nur die Bereiche, die den Enden inkrementeller Zeichenfolgen entsprechen, und berechne die Buchstaben, indem ich rekursiv auf die ursprüngliche Zeichenfolge zurückblicke. Beachten Sie, dass eine Memo-Tabelle verwendet wird, die Ihren Speicher füllen kann. Setzen Sie bei Bedarf eine Kappe auf die Länge des Memotisches.
Aktuell max. Gesucht nach: 4000 Iterationen
CCCCCC
gefunden bei Iteration (en): 2946quelle
sys.setrecursionlimit(4000)
undULIMIT=4000
(in ungefähr 3,5 Stunden auf meinem System) das erste Vorkommen von CCCCCC bei index = 2.124 * 10 ^ 519 gefunden. Der genaue Index steht im nächsten Kommentar ...Gefunden bei 2.124 * 10 ^ 519.
Der folgende Ruby-Code wurde für die Suche verwendet
CCCCCC
.Der Index ist der gleiche wie in der Antwort von @isaacg .
Die Laufzeit des obigen Codes für 6 liegt auf meinem Computer in der Größenordnung von zehn Sekunden. Trotzdem ist es immer noch auf der Suche nach einer Antwort
CCCCCCC
(wenn du es selbst ausprobieren willst, setze die KonstanteSEARCH
auf7
).Sie können
getc
das Zeichen an einer bestimmten Position suchen,i
wie dies in der letzten Zeile der Fall ist, in der die Zeichenfolge um den Index gedruckt wird.quelle
(Keine Antwort, aber zu lang für einen Kommentar.)
Das Folgende ist eine Python-Übersetzung von @ Howards Ruby-Programm (beschleunigt um einen Faktor nahe 3, indem nur einer
getc
in der Suchschleife vorhanden ist). Auf meinem System findet dies das erste C ^ 6 in 3 Sekunden. In 93 Stunden wird in 231.000 Iterationen kein C ^ 7 gefunden, daher muss das erste C ^ 7 (falls vorhanden) nach den am weitesten links stehenden 10 ^ 40677-Positionen in der unendlichen Zeichenfolge auftreten.quelle