Die Idee hier ist, ein sich fast wiederholendes Muster zu erzeugen . Das heißt, die zu konstruierende Sequenz ändert sich im letzten Moment, um eine Wiederholung einer Teilsequenz zu vermeiden. Folgen vom Typ AA und ABA sind zu vermeiden (wobei B nicht länger als A ist).
Beispiele:
Ich werde zunächst alle kleinen Beispiele auflisten, um meine Beschreibung klarer zu machen. Beginnen wir mit 0.
Gültig: 0 Ungültig: 00 (AA-Muster) Gültig: 01 Ungültig: 010 (ABA-Muster) Ungültig: 011 (AA-Muster) Gültig: 012 Gültig: 0120 Ungültig: 0121 (ABA-Muster) Ungültig: 0122 (AA-Muster) Ungültig: 01200 (AA-Muster) Ungültig: 01201 (ABA-Muster; 01-2-01) Ungültig: 01202 (ABA-Muster) Gültig: 01203
Jetzt glaube ich fest daran, dass a 4
niemals benötigt wird, obwohl ich keinen Beweis habe, weil ich leicht Sequenzen mit Hunderten von Zeichen gefunden habe, die nur verwendet werden 0123
. (Es hängt wahrscheinlich eng damit zusammen, wie nur drei Zeichen benötigt werden, um unendliche Zeichenfolgen zu haben, die keine AA-Muster haben. Es gibt eine Wikipedia-Seite dazu.)
Input-Output
Die Eingabe ist eine einzelne positive Ganzzahl ungleich Null n
. Sie können das annehmen n <= 1000
.
Die Ausgabe ist eine n
Zeichenfolge ohne Teilsequenzen, die mit einem der verbotenen Muster (AA oder ABA) übereinstimmen.
Beispiel für Ein- und Ausgänge
>>> 1 0 >>> 2 01 >>> 3 012 >>> 4 0120 >>> 5 01203 >>> 50 01203102130123103201302103120132102301203102132012
Regeln
- Nur die Zeichen
0123
sind erlaubt. - B ist nicht länger als A. Dies dient dazu, die Situation zu vermeiden, in der
012345
gefolgt werden muss,6
weil0123451
dies :1-2345-1
. Mit anderen Worten, die Sequenz wäre trivial und uninteressant. n
kann durch jedes gewünschte Verfahren eingegeben werden, außer durch Hardcodierung.- Die Ausgabe kann entweder eine Liste oder eine Zeichenfolge sein, je nachdem, was einfacher ist.
- Keine rohe Gewalt ; Die Laufzeit sollte in der Größenordnung von Minuten liegen, höchstens eine Stunde auf einer sehr langsamen Maschine, z
n=1000
. (Dies soll Lösungen disqualifizieren, die nur allen
Permutationen von Länge durchlaufen{0,1,2,3}
, so dass Tricks und ähnliche Tricks nicht erlaubt sind.) - Standardschlupflöcher sind wie üblich nicht zulässig.
- Die Bewertung erfolgt in Bytes. Dies ist Code-Golf , also gewinnt der kürzeste Eintrag (wahrscheinlich - siehe Bonus).
- Bonus: Wählen Sie bei jedem Schritt die niedrigste zulässige Ziffer. Wenn
1
und3
für die nächste Ziffer in der Sequenz eine Auswahl möglich ist, wählen Sie1
. Subtrahieren Sie 5 Bytes von Ihrer Punktzahl. Beachten Sie jedoch den folgenden Hinweis.
Hinweis!
Sackgassen sind möglich. Ihr Programm oder Ihre Funktion muss diese vermeiden. Hier ist ein Beispiel:
Stumpf: 0120310213012310320130210312013210230120310213201230210312013023103201230213203102301203210231201302103123013203102130120321023013203123021032012310213012012 Stumpf: 0120310213012310320130210312013210230120310213201230210312013023103201230213203102301203210231201302103123013203102130120321023013203123021032012330212012 Stumpf: 01203102130123103201302103120132102301203102132012302103120130231032012302132031023012032102312013021031230132031021301203210230132031230210320123103303203 Stumpf: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103201233021203103
Jede dieser Sequenzen kann nicht weiter erweitert werden (ohne Verwendung von a 4
). Beachten Sie aber auch, dass es einen entscheidenden Unterschied zwischen den ersten beiden und den zweiten beiden gibt. Ich werde die gemeinsame anfängliche Teilsequenz durch eine ersetzen X
, um dies klarer zu machen.
Stumpf: X2130120 Stumpf: X2130123 Stumpf: X320 Stumpf: X321301203102130
Die letzten beiden Ziffern von X
sind 10
, daher sind und die einzig mögliche Auswahl für die nächste Ziffer 2
und 3
. Die Auswahl 2
führt zu einer Situation, in der die Sequenz beendet werden muss . Der Greedy - Algorithmus wird nicht hier arbeiten. (Jedenfalls nicht ohne Rückverfolgung.)
n
, aber da die Stümpfe, die mein Programm findet, jedes Mal um durchschnittlich 10 Stellen länger werden, bin ich mir sehr sicher, dass es eine unendliche Folge gibt. Ich bin mir nicht sicher, wie ein semi-gieriger Algorithmus für beliebig große Sequenzen getestet werden könnte. Ich könnte die Anforderung auf n
= 1000 beschränken und mir keine Sorgen um höhere machen n
.
AA
ist wirklich Typ, ABA
wo B
leer ist. Dies könnte möglicherweise dazu beitragen, einige Lösungen zu optimieren.
n
? Wenn jemand einen heuristischen semi-gierigen Algorithmus gibt, wie können Sie dann überprüfen, ob er über eine sehr große Länge nicht auf Probleme stößt? Das allgemeine Problem ist interessant, und ich konnte nichts zur Vermeidung von Mustern finden, bei dem wir die Länge eines Teils des Musters einschränken. Wenn jemand ein allgemeines Rezept erstellen kann, erwarte ich, dass dies der beste Ansatz ist.