Schreiben Sie ein Programm, um zu bestimmen, ob eine periodische Folge von positiven ganzen Zahlen die Eigenschaft hat, dass für jede n
in der Folge vorkommende ganze Zahl n
zwischen zwei aufeinanderfolgenden Vorkommen von nie mehr als andere ganze Zahlen liegen n
.
Hat beispielsweise 2, 3, 5, 2, 3, 6, 2, 3, 5, 2, 3, 6, ...
diese Eigenschaft: Jedes Paar aufeinanderfolgender Vorkommen von 2
darf höchstens zwei Ganzzahlen zwischen sich haben (z. B. 2, 3, 5, 2
und2, 3, 6, 2
; jedes Paar aufeinanderfolgender Vorkommen von 3
hat höchstens drei Ganzzahlen dazwischen; und dasselbe für 5
und 6
.
Jedoch, 2, 3, 5, 2, 3, 4, 2, 3, 5, 2, 3, 4, ...
Eigenschaft besitzt jedoch nicht: Zwei aufeinanderfolgende Vorkommen von 4
haben nämlich 4, 2, 3, 5, 2, 3, 4
mehr als vier Ganzzahlen zwischen sich.
Eingang : Eine sinnvolle Darstellung einer periodischen Folge von positiven ganzen Zahlen. Zum Beispiel kann eine endliche Liste, wie oben {2, 3, 5, 2, 3, 6}
die erste unendliche Folge darstellen 2, 3, 5, 2, 3, 6, 2, 3, 5, 2, 3, 6, ...
. (Diesbezüglich könnte das Problem für endliche Listen angegeben werden, die sich umlaufen, anstatt für unendliche periodische Listen.)
Ausgabe : ein wahrer / falscher Wert.
Wahrheitsbeispiele:
{1}
{8, 9}
{2, 3, 4}
{5, 5, 3, 3, 6}
{2, 3, 5, 2, 3, 6}
{6, 7, 3, 5, 3, 7}
{9, 4, 6, 7, 4, 5}
{1, 1, 1, 1, 1, 100, 1}
{1, 9, 1, 8, 1, 7, 1, 11}
Falsche Beispiele:
{1, 2, 3}
{2, 3, 9, 5}
{3, 5, 4, 4, 6}
{2, 3, 5, 2, 3, 4}
{3, 5, 7, 5, 9, 3, 7}
{5, 6, 7, 8, 9, 10, 11}
{1, 9, 1, 8, 1, 6, 1, 11}
Das ist Codegolf , also gewinnt der kürzeste Code. Antworten in allen Sprachen sind erwünscht.
quelle
Antworten:
Haskell,
60575655 BytesAngenommen, die Eingabeliste enthält mindestens ein Element.
Anwendungsbeispiel:
g [1]
->True
. Probieren Sie es online!Sei
a
der Kopf der Liste undb
der Schwanz. Das Ergebnis ist,True
wennb
leer ist oder die Anzahl der Elemente am Anfangb
, die nicht gleicha
ist, nicht größer ist alsa
und der rekursive Aufruf vonf b
ist auchTrue
sonstFalse
. Beginnen Sie mit der doppelten Eingabeliste.Edit: @Leo hat 3 Bytes gespeichert. Vielen Dank!
Edit 2: @Laikoni hat 1 Byte gespeichert. Vielen Dank!
quelle
span
kürzer als die VerwendungtakeWhile
, deshalb habe ich sie überhaupt nicht angeschaut.takeWhile
kann so ziemlich immer auffst$span
oder gekürzt werdenfst.span
, was ein weiteres Byte spart.Python ,
5756 Bytes-1 Byte dank Dennis (Ersetzen
i+1:i+v+2
durchi:i-~v
mit einemi
Versatz von 1 vonenumerate
)Probieren Sie es online!
Unnamed Funktion nimmt eine Liste,
a
und die Bedingung , dass die Prüfung jeder Wert,v
erscheintin
die entsprechende Scheibe zu ihrem Recht in einer Verkettunga
mit mir selbst(a+a)[i:i-~v]
, wobei der 1-basierten Indexv
ina
,i
, vorgesehen ist , durchenumerate(a,1)
.quelle
JavaScript (ES6),
67 65 55 54 5149 Byte3B dank @ETHproductions und 2B dank @Arnauld gespeichert
Erläuterung
Dies definiert eine Funktion, die ein Array
a
als Eingabe verwendet. Anschließend.some
durchläuft die Methode dieses Array und führt für jedes Element eine andere Funktion aus.Diese innere Funktion akzeptiert zwei Argumente,
b
und zwarc
den aktuellen Wert und seinen Index. Die Funktion findet den Index des aktuellen Wertes, beginnend mit dem Indexc + 1
. Anschließend wird geprüft, ob dieser Index größer als der aktuelle Wert plus der aktuelle Index ist (die Differenz zwischen zwei Vorkommen desselben Werts ist größer alsb
). Beachten Sie, dass dies genau das Gegenteil von dem ergibt, was wir wollen.Wenn einer dieser Rückgabewerte ist
true
,.some
kehrt die Funktion ebenfalls zurücktrue
. Wenn keiner der Schecks zurückkehrttrue
, wird der.some
kehrt Funktion zurückfalse
. Wieder das Gegenteil des Werts, den wir zurückgeben möchten, sodass dieses Ergebnis negiert und dann zurückgegeben wird.Probier es aus
Probieren Sie alle Testfälle hier aus:
quelle
.shift()
damit das Slice speichern:a=>!a.some(b=>z.indexOf(z.shift())>b,z=a.concat(a))
a=>!a.some((n,i)=>a.concat(a).indexOf(n,++i)>n+i)
funktionierenJelly , 11 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Gelee , 8 Bytes
Beeindruckt von @ JonathanAllans Python-Antwort .
Probieren Sie es online!
Wie es funktioniert
quelle
SWI-Prolog, 83 Bytes
Die Liste sollte zweimal eingegeben werden:
Wenn dies nicht als akzeptabel angesehen wird, können Sie das Prädikat hinzufügen
Das fügt zusätzliche 14 Bytes hinzu.
Probieren Sie es online aus
nb: Sie können auf verschiedene falsche Fälle gleichzeitig testen, indem Sie Ihre Anfragen mit ';' trennen. (oder) und auf verschiedene wahre Fälle prüfen, indem mit ',' (und) getrennt wird
dh unter Verwendung der OP-Beispiele:
und
quelle
PHP, 52 Bytes
Nimmt die Reihenfolge der Befehlszeilenargumente an. Ausgänge mit Code
1
für falsch,0
für wahr.Laufen Sie mit
-nr
.$n
durch Argumente:war, nichts tun, andernfalls mit Code beenden
1
$$n
( variable Variablen )0
(implizit)quelle
Netzhaut , 50 Bytes
Eingabe als Liste von durch Kommas getrennten unären Zahlen.
Probieren Sie es online!
Erläuterung
Duplizieren Sie die Eingabe, um die am Ende umlaufenden Schritte zu überprüfen.
Ordnen Sie jedem (kürzesten) Abschnitt zwei identische Werte zu und geben Sie sie zurück, z
11,111,1,11
.Entfernen Sie wiederholt eine Ziffer von der ersten Ziffer zusammen mit einer ganzen Zahl danach. Wenn die Lücke klein genug ist, wird die erste Zahl vollständig entfernt. Andernfalls bleibt mindestens eine Ziffer übrig.
Zählen Sie, wie oft
1,
in allen Zeilen angezeigt wird. Wenn es irgendwo auftaucht, war eine der Stufen zu breit.Versuchen Sie, eine Zahl zu finden, die mit
0
(dh nur sich0
selbst) beginnt . Dies ist praktisch eine logische Negation der Ausgabe.quelle
JavaScript (ES6), 47 Byte
Wie es funktioniert
Wir verwenden das Eingabearray erneut
a
, um die Position des letzten Vorkommens jeder Ganzzahl in zu speicherna
. Wir verwenden den Schlüssel-n
, um diese Position zu speichern, damit sie nicht mit den ursprünglichen Indizes von interferierta
.Wenn
a[-n]
vorhanden, wird der eigentliche Test durchgeführt. Wenna[-n]
nicht vorhanden, ist der Ausdrucka[-n] - (a[-n] = i)
gleichundefined - i == NaN
und der Vergleich mit~n
ist immer falsch, was das erwartete Ergebnis ist.Testfälle
Code-Snippet anzeigen
quelle
Retina ,
41 bis39 Bytes2 Bytes Golf dank Martin Ender, der mich übrigens mit seinem fantastischen Guide über SO in die Bilanzgruppe einführte
Die Eingabe ist eine durch Kommas getrennte Liste von unären Zahlen. Die Ausgabe erfolgt
0
für falsch und1
für wahr.Probieren Sie es online! (Testsuite, die automatisch von dezimal konvertiert)
Ich habe kürzlich etwas über Bilanzkreise gelernt und wollte sie ausprobieren. Sie gehören nicht zu den am einfachsten zu verwendenden Werkzeugen, sind aber sicher leistungsstark.
Erläuterung
Wie bei vielen anderen Einsendungen duplizieren wir die Liste, um den Zeilenumbruch zu behandeln. Wir fügen am Ende auch ein Komma hinzu, sodass auf jede Zahl ein Komma folgt (dies erleichtert die Sache später ein bisschen).
Hier wird es interessant. Dies ist eine Ersetzungsphase. Wir ersetzen alles, was mit der ersten Zeile übereinstimmt, durch die zweite Zeile. In diesem Fall möchten wir alle Zahlen entfernen, denen
n
keinen+1
anderen Zahlen folgen .Dazu stimmen wir zuerst mit der Nummer überein und erfassen jede
1
in einer Gruppe (in diesem Fall mit der Gruppennummer 2). Bei einem positiven Ausblick versuchen wir dann wiederholt, eine Übereinstimmung in einer Bilanzgruppe zu erzielen-2
, die nicht mehr als die Anzahl der von der Gruppe durchgeführten Erfassungen erreicht2
, gefolgt von einem Komma, erreicht. Nach dieser Zahlenfolge sind wir zufrieden, wenn wir wieder die erste Zahl oder das Zeilenende erreichen.Hinweis: Dieser Ausdruck kann nur mit dem letzten Teil einer Zahl übereinstimmen, wenn es nicht gelingt, eine Übereinstimmung mit der vollständigen Zahl zu finden. Dies ist kein Problem, da dann der erste Teil der Zahl in der Zeichenfolge verbleibt und wir wissen, dass die Ersetzung nicht vollständig erfolgreich war.
Schließlich sollte das Ergebnis wahr sein, wenn wir alle Zahlen vollständig aus der Liste entfernt haben. Wir versuchen, die leere Zeichenfolge abzugleichen und die Anzahl der gefundenen Übereinstimmungen zurückzugeben.
quelle
\b
. Das Entfernen dieser Zeichenfolge führt zu fehlgeschlagenen Übereinstimmungen, die gesamte Zahl wird jedoch nicht entfernt, sodass Sie ohnehin keine leere Zeichenfolge erhalten.Jelly , 11 Bytes
Probieren Sie es online!
quelle
Python 3 , 101 Bytes
Probieren Sie es online!
quelle
Röda , 50 Bytes
Probieren Sie es online!
Endlich! Ich habe gewartet für diese Herausforderung ...
Es ist eine Funktion, die einen wahren oder falschen Wert zurückgibt. Es braucht ein Argument, das Array.
Es durchläuft einen Strom von Indizes und prüft für jeden Index,
_1
ob der Abstand zwischen dem aktuellen Index und dem nächsten Indexa[_1]
nicht größer als ista[_1]
.quelle
_1
?_
, bezieht sich aber auf den ersten gezogenen Wert. Wenn ich mehrere_
s verwendet hätte, hätte jeder einen eigenen Wert gezogen. Zum Beispiel wird[1, 2, 3] | print(_, _, _)
gedruckt123
, aber[1,2,3] | print(_, _1, _1)
gedruckt111 222 333
(in separaten Zeilen).05AB1E , 13 Bytes
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle