Wechselnde Arrays
Ein alternierendes Array ist eine Liste beliebiger Länge, in der sich zwei (nicht unbedingt unterschiedliche) Werte abwechseln. Das heißt, alle geradzahligen Elemente sind gleich und alle ungeradzahligen Elemente sind gleich.
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die bei Angabe einer Liste positiver Ganzzahlen truthy
abwechselnd oder auf falsy
andere Weise ausgegeben / zurückgegeben wird .
Das ist Code-Golf , also gewinnt der kürzeste Code (in Bytes)!
Edge Cases:
[] -> True
[1] -> True
[1,1] -> True
[1,2,1] -> True
Andere Testfälle:
[1,2,1,2] -> True
[3,4,3] -> True
[10,5,10,5,10] -> True
[10,11] -> True
[9,9,9,9,9] -> True
[5,4,3,5,4,3] -> False
[3,2,1,2,1,2] -> False
[1,2,1,2,1,1,2] -> False
[2,2,3,3] -> False
[2,3,3,2] -> False
Beispiel
Hier ist ein Beispiel, gegen das Sie Ihre Lösung testen können, geschrieben in Python 3 (nicht Golf):
def is_alternating(array):
for i in range(len(array)):
if array[i] != array[i%2]:
return False
return True
Antworten:
Gelee , 4 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
2
auf andere Zahlen verallgemeinert sofort die Herausforderung!Ɲ
nicht vorhanden, als die Herausforderung veröffentlicht wurde.Brainfuck, 34 Bytes
Nimmt das Array als Byte-Werte in eine Zeichenfolge und gibt
\x00
für false und\x01
für true aus.Probieren Sie es online aus.
Dadurch bleibt die Struktur erhalten
a b 1 c
Auf dem Band
c
ist das aktuelle Zeichenb
das vorherige Zeichen unda
das vorherige vorherige Zeichen, solange sich das Array abwechselt. Wenn eine Nichtübereinstimmung festgestellt wird, wird der Zeiger nach links verschoben, sodassa
,b
und das1
Flag alle Null werden. Diese Situation wird fortgesetzt, bis alle Eingaben verbraucht sind.quelle
R,
2423 BytesLiest einen Vektor in STDIN, nimmt die ersten beiden Elemente dieses Vektors und überprüft die Gleichheit. Wenn die Längen von
a[1:2]
und a nicht übereinstimmen, durchläuft R die Schleifea[1:2]
, um der Länge von a zu entsprechen. Es wird eine Warnung dazu geben, aber es wird funktionieren.Überraschenderweise funktioniert dies sogar für leere Eingaben, ich weiß nicht warum, aber ich werde damit rollen.
1 Byte dank @MickyT gespeichert
quelle
all((a=scan())==a[1:2])
MATL ,
76 BytesFür alternierende Arrays gibt dies eine nicht leere Matrix von Einsen aus, was wahr ist. Bei nicht alternierenden Arrays enthält die Matrix mindestens eine Null und ist daher falsch (siehe hier ).
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Nehmen wir
[1 2 1 2]
als Beispiel die Eingabe.quelle
JavaScript (ES6), 27 Byte
Testfälle
Code-Snippet anzeigen
quelle
Retina , 25 Bytes
Probieren Sie es online!
Anstatt eine Eingabe mit abwechselnden Werten abzugleichen (was in einem regulären Ausdruck zu störenden Kanteneffekten führt), stimme ich Eingaben zu, die nicht gültig sind, und negiere das Ergebnis anschließend.
Der Vorteil des Abgleichs einer ungültigen Eingabe besteht darin, dass diese Eigenschaft lokal überprüft werden kann und leere oder kurze Eingaben nicht speziell behandelt werden müssen: Jede Eingabe ist ungültig, wenn sie zwei unterschiedliche Werte enthält, die um eine Position voneinander entfernt sind.
Die erste Stufe zählt also die Anzahl der Übereinstimmungen, von
\b(\d+),\d+,(?!\1\b)
denen ein Wert übereinstimmt und erfasst wird, und stellt dann fest, dass der dritte Wert in Folge unterschiedlich ist. Dies ergibt Null für gültige Eingaben und etwas Positives für ungültige Werte.Die zweite Stufe zählt einfach die Anzahl der Spiele von
^0
denen ist ,1
wenn die erste Stufe zurückgeführt0
und auf1
andere Weise.quelle
Mathematica, 29 Bytes
Ein Port des MATL-Algorithmus von Luis Mendo. Unbenannte Funktion, die eine Liste von Zahlen (oder sogar allgemeineren Objekten) aufnimmt und
True
oder zurückgibtFalse
. Prüft, ob die Summen aufeinanderfolgender Elemente alle gleich sind. LeiderMost
undRest
ersticken auf der leeren Liste, so dass das separat getestet werden muss.Mathematica, 33 Bytes
Unbenannte Funktion, die eine Liste von Zahlen (oder sogar allgemeineren Objekten) aufnimmt und
True
oder zurückgibtFalse
. Die FunktionDifferences[#,1,2]
nimmt die Differenzen nicht aufeinanderfolgender Paare von ganzen Zahlen, sondern Paare von ganzen Zahlen im Abstand von zwei voneinander. Dann prüfen wir nur, ob die resultierende Liste nichts anderes als Nullen enthält.Als Bonus erhalten wir für ein weiteres Byte (ändern Sie das
2
in#2
) eine Funktion, die eine Liste von ganzen Zahlen und eine andere positive ganze Zahl eingibt#2
und prüft, ob die Eingabeliste das Ergebnis der#2
periodischen Verschachtelung konstanter Sequenzen miteinander ist. Zum Beispiel,bewertet zu
True
.quelle
Haskell,
2726 BytesDies wird zu einer anonymen Funktion ausgewertet, die die Herausforderung löst. Die Idee ist, die ersten beiden Zahlen aus der Liste zu entfernen, mit der ursprünglichen Liste mit Gleichheit zu zippen und zu überprüfen, ob das Ergebnis nur
True
s enthält . Probieren Sie es online!Danke an nimi für 1 Byte!
quelle
and.(zipWith(==)=<<drop 2)
Speichert ein Byte.Netzhaut ,
393228 BytesProbieren Sie es online!
7 Bytes gespart dank Martin ! 3 weitere dank Kobi gerettet ! Und zu Kritixi für eine Idee für eine andere 1.
Optional passen wir eine Zahl an, die die gesamte Eingabe belegt, ein beliebiges Zahlenpaar oder ein beliebiges Zahlenpaar, gefolgt von demselben Zahlenpaar, und optional wird die zweite Zahl ganz am Ende nicht eingeschlossen. Konnte 2 Bytes speichern, wenn die Eingabe unär war.
quelle
^(\d+)?(.\d+)?(.\1\2)*(.\1)?$
29-Byte-Alternative. Das passt nicht zusammen,1,,1
.Pyth, 9 Bytes
Erläuterung
quelle
Q
dem Code implizit s hinzu . Ich habe sie in der Erklärung hinzugefügt, um klarer zu machen, was vor sich geht, aber sie sind nicht wirklich im Code enthalten.Brachylog , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
APL, 7 Bytes
Erläuterung:
2⍴⊢
: Verändern Sie das Eingabearray um 2⍴⍴
: Verändern Sie das Ergebnis um die ursprüngliche Größe der Eingabe, indem Sie Elemente wiederholen⊢≡
: Überprüfen Sie, ob das Ergebnis der ursprünglichen Eingabe entsprichtTestfälle:
quelle
Java 8, 63 Bytes
Dies ist ein Lambda-Ausdruck für a
Predicate< int[ ] >
Erläuterung: Initialisieren Sie das Ergebnis auf 0. Für jedes Element gibt Biteise ODER das Ergebnis mit der Differenz zwischen dem aktuellen Element und dem Element 2 früher an. return
true
wenn das Ergebnis gleich 0 ist. Andernfalls returnfalse
quelle
Perl 6 ,
49 4342 BytesVersuch es
Versuch es
Versuch es
Erweitert:
quelle
$_[1]
kann ein Byte kürzer sein als.[1]
. Der Körper des inneren Lambda kann um ein Byte kürzer sein als{.[0]!=a||.[1]!=b}
..[1]
. Scheint!=
auch nicht zu funktionieren, wenn kein Leerzeichen folgt. Ich denke, so etwas$_!=3
wird analysiert, als ob es geschrieben wurde als!( $_ = 3 )
Python 2 , 35 Bytes
Probieren Sie es online!
quelle
J, 8 Bytes
Erläuterung
Testfälle
quelle
{.
Take mit$
Shape zu ersetzen .Haskell ,
3332 BytesProbieren Sie es online! oder Überprüfen Sie die Testfälle. -1 Byte dank Zgarb.
quelle
[]
, aber aus irgendeinem Grund kann ghc nicht auf den richtigen Typ schließen[]
. Es funktioniert, wenn es zusammen mit dem anderen Testfall getestet wird (siehe Überprüfen der Testfälle).f(a:x@(_:b:_))=a==b&&f x
Bash,
565438 BytesSpeichern Sie dies als Skript und übergeben Sie die Liste der Zahlen als Argumente (bei einer Liste mit n Elementen übergeben Sie n Argumente). Die Ausgabe ist der Exit-Code: 0 (für true), wenn sich die Liste abwechselt, und 1 (für false), wenn sich die Liste abwechselt.
(Die Rückgabe von Ausgaben im Exit-Code ist in den PPCG-Standard-E / A-Methoden zulässig.)
Das funktioniert rekursiv:
quelle
Python 2.7, 38 Bytes
Testfälle:
quelle
Pyke, 6 Bytes, nicht konkurrierend
Probieren Sie es hier aus!
Ermöglichen Sie dem Umformknoten, eine Liste sowie eine Zeichenfolge aufzunehmen
quelle
Shenzen IO (Assembler),
8376 Bytes, nicht konkurrierendShenzen io ist ein Puzzlespiel, bei dem Sie Ihren Code in einer speziellen Assemblersprache codieren können.
Leider können Sie nur Ganzzahlen zwischen -999 und 999 als Ein- oder Ausgänge verwenden, und Sie können nicht feststellen, ob ein Array beendet wurde. Also nahm ich an, dass das Array auf einem ROM geschrieben wurde, der sich nach dem Lesen der letzten Zelle umläuft. Dies bedeutet, dass nur gerade Arrays verwendet werden können, weshalb keine Konkurrenz besteht.
Code:
Erläuterung:
Tut mir leid, wenn dies verwirrend ist, ist dies meine erste Code-Golf-Antwort.
BEARBEITEN: 7 Bytes wurden entfernt, indem Schleifen durch einmaligen Code ersetzt wurden
quelle
Ruby, 23 Bytes
quelle
Rubin,
131119 BytesLambda
a
erwartet ein Arrayx
und gibt true zurück, wenn 0 oder 1 eindeutige Werte für die ungeraden indizierten Elemente und 0 oder 1 eindeutige Werte für die geraden indizierten Elemente im Array vorhanden sind.Bemerkenswerte Byte-Safer
def
!arr[1]
gegenarr.length < 2
&
vs&&
Testfälle
quelle
Dart, 46 Bytes
Laufen mit:
quelle
C #, 54 Bytes
Filterarray, um Werte anzuzeigen, die nicht mit dem ersten Wert für "Evens" und dem zweiten Wert für "Odds" übereinstimmen. Wenn keine Ergebnisse vorliegen, geben Sie true zurück.
quelle
Japt,
76 BytesProbieren Sie es aus oder führen Sie alle Testfälle aus
quelle
C #, 66 Bytes
Anonyme Funktion, die ein ganzzahliges Array empfängt und 1 zurückgibt, wenn sich das Array abwechselt, andernfalls 0.
Volles Programm mit ungolfed Funktion und Testfällen:
quelle
Oktave, 51 Bytes
Die Eingabe ist ein Zellenarray positiver Ganzzahlen.
Probieren Sie es online!
quelle
Clojure, 70 Bytes
Überprüft, ob die eindeutige Anzahl jedes zweiten Elements 1 beträgt, und behandelt leere Sammlungen als Sonderfall. Habe auch viele Ansätze ausprobiert
reduce
und dagroup-by
aber nicht viel Glück gehabt.quelle
Eine weitere Option mit R: 36 Bytes.
Und ich denke, ich habe eine viel kürzere Version gefunden: 15 Bytes
quelle