Angenommen, eine Teilzeichenfolge ist ein zusammenhängender Abschnitt einer ursprünglichen Zeichenfolge. Zum Beispiel cat
ist ein Teilstring von concatenate
. Wir werden sagen, dass eine richtige Teilzeichenfolge eine Teilzeichenfolge ist, die nicht der ursprünglichen Zeichenfolge entspricht. Zum Beispiel concatenate
ist eine Teilzeichenfolge concatenate
eine richtige Teilzeichenfolge, aber nicht. (Einzelzeichenfolgen haben keine richtigen Teilzeichenfolgen)
Wir werden nun eine Sequenz mit diesen Begriffen definieren. Der n- te Term in dieser Sequenz ist die kleinste Zahl, sodass es einen geeigneten Teilstring seiner Binärdarstellung gibt, der kein Teilstring eines früheren Terms in der Sequenz ist. Der erste Begriff ist 10
.
Als Übung erzeugen wir die ersten 5 Terme. Ich werde in Binärform arbeiten, um die Dinge einfacher zu machen.
Der erste Begriff ist 10
. Da 11
die nächstkleinere Zahl nur eine richtige Teilzeichenfolge hat, 1
die auch eine Teilzeichenfolge von ist 10
, 11
ist sie nicht in der Sequenz. 100
Enthält jedoch die richtige Teilzeichenfolge, 00
die keine Teilzeichenfolge ist, 10
so 100
ist unser nächster Begriff. Als nächstes wird 101
die eindeutige richtige Teilzeichenfolge 01
angezeigt, die der Sequenz hinzugefügt wird. Anschließend wird 110
die richtige Teilzeichenfolge angezeigt, 11
die der Sequenz neu hinzugefügt wird.
Jetzt haben wir
10, 100, 101, 110
111
ist weiter oben, aber es enthält nur die Teilzeichenfolgen 1
und 11
macht es nicht zu einem Begriff. 1000
Enthält jedoch das 000
Hinzufügen zur Sequenz.
Hier sind die ersten paar Begriffe in Dezimalzahl
2, 4, 5, 6, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 54, 56, 58
Aufgabe
Entweder
Nehmen Sie n als Eingabe und generieren Sie den n- ten Term in dieser Reihenfolge (entweder 0 oder 1 indiziert)
Kontinuierliche Ausgabe von Begriffen der Sequenz
Dies ist Code-Golf- Antworten werden in Bytes bewertet, wobei weniger Bytes besser sind.
n
) hinzufügen ?a(36)
ist 47 (1 indiziert).Antworten:
Python 3 ,
88807875 Bytes-6 Bytes dank Wheat Wizard
-2 Bytes dank RootTwo
-3 Bytes dank notjagan
Probieren Sie es online!
quelle
bin(n)[2:]
mitf"{n:b}"
.Jelly , 22 Bytes
Probieren Sie es online!
quelle
Mathematica,
116110 BytesGibt unendlich viele Terme der Sequenz aus.
Erläuterung
x
ist die Liste der Begriffe der Sequenz bis jetzt.f
ist einFunction
Wert, der eine Ganzzahl annimmt und die gesamteSubsequences
Basisdarstellung2
(einschließlich der leeren Liste{}
und der vollständigen Liste von sichIntegerDigits
selbst) zurückgibt ....
Wert vonn
von2
bis auswerten∞
.Wenn
...
jaFalse
, wird das zweite Argument vonAnd
(&&
) niemals ausgewertet. Wenn...
jaTrue
, dannEcho@n
druckt und gibt das ausn
, was wir dann inAppendTo
der Liste habenx
.Wir möchten überprüfen, ob eine richtige Teilzeichenfolge von
n
keine Teilzeichenfolge eines vorherigen Terms in der Sequenz ist.Most@f@n
die Liste der richtigen Strings istn
, überprüfen wir dann , ob es irgendwelche Teile sind ,s_
die eine istMemberQ
von dieser Liste , so dass die Listef/@x
der Listen von Teil früherer Glieder der Folge istFreeQ
dies
auf Stufe2
.quelle
Mathematica,
10994 BytesKontinuierliche Ausgabe von Begriffen der Sequenz
Spezieller Dank an @ngenisis für -15 Bytes
Mathematica, 123 Bytes
Nehmen Sie n als Eingabe und generieren Sie den n-ten Term in dieser Reihenfolge (1 indiziert)
Eingang
Ausgabe
quelle
15
Bytes aus, die gehen können:SubsetQ
ist kürzer als und äquivalent zuContainsAll
, Sie könnenAnd
anstelle von verwendenIf
, dasUnion
ist unnötig undDo
ist fast immer kürzer alsFor
:s={};Do[!SubsetQ[s,(t=Subsequences@IntegerDigits[i,2])[[2;;-2]]]&&(s=s~Join~t;Echo@i),{i,∞}]
3
Weitere Bytes mitMost
:s={};Do[!SubsetQ[s,Most[t=Subsequences@IntegerDigits[i,2]]]&&(s=s~Join~t;Echo@i),{i,2,∞}]
Pyth , 20 Bytes
Dies gibt die Sequenz unendlich aus. Sie kann daher nur offline verwendet werden.
Erklärung (Das Leerzeichen ist ein Zeilenumbruch):
quelle
Pyth , 20 Bytes
Probieren Sie es online!
quelle
Haskell,
172 BytesProbieren Sie es online aus.
Erläuterung
Der Code generiert die Sequenz kontinuierlich.
b
gibt die binäre Darstellung von aInt
als zurückString
s
Gibt alle Teilzeichenfolgen einer Zeichenfolge zurückp
Gibt alle richtigen Teilzeichenfolgen einer Zeichenfolge zurückn
ist eine Funktion, die iterativ angewendet wird und ein Tupel zurückgibt, das Folgendes enthält:scanl
wird verwendet , um rufenn
immer und immer wieder , und sein Ausgang gefiltert wird , um nur die Elemente enthalten , größer als 1 istHier ist eine etwas besser lesbare Version vor dem Golfen:
quelle
JavaScript, 57 Bytes
Code-Snippet anzeigen
Lassen Sie uns die gegebene Zahl n in binärer Form schreiben , dann:
10
, muss n in der Reihenfolge sein:1
darin, die verbleibende Binärzeichenfolge muss nicht gesehen werden, da n die kleinste Zahl ist, die eine solche Zeichenfolge enthalten kann11
:1
darin, die verbleibende Binärzeichenfolge (lassen Sie uns es spenden, wie gesehen werden1x
muss, da:1x
ist in der Reihenfolge, oder1x0
ist in der Sequenz, da sie eine eindeutige Unterzeichenfolge enthält1x
Fazit:
die binäre Form der Zahl beginnt mit
10
oder endet mit,1
gefolgt von einer ungeraden Zahl von0
. Oder beschreiben Sie in Regex: x match/^10|10(00)*$/
.quelle