Wir alle wissen, dass viele Übungen nur eine Körperhälfte betreffen. Sie müssen sie also zweimal machen, einmal für jede Seite. Solche Übungen haben zwei Gegenstücke, eines für die linke und eines für die rechte Seite. Es ist jedoch nicht erforderlich, die beiden Gegenstücke nacheinander auszuführen, solange die Übungen für beide Seiten in derselben Reihenfolge ausgeführt werden. Sie können in Ihrem Übungsprogramm auch zwischen den Seiten wechseln, aber es wäre nicht sinnvoll, einige Übungen mit der einen Seite und einige mit der anderen Seite zu beginnen.
Herausforderung
Ein Übungsteil ist eine Liste von Ganzzahlen ungleich Null, wobei die zweite Hälfte aus den Ganzzahlen der ersten Hälfte besteht, die in derselben Reihenfolge negiert wurden und die Vorzeichen der Ganzzahlen in jeder Hälfte gleich sind. Das Vorzeichen der ersten Hälfte eines Übungsteils ist dessen führende Seite .
Ein Übungssatz besteht aus null oder mehr Übungsteilen, bei denen dieselbe führende Seite miteinander verknüpft ist.
Bestimmen Sie anhand einer Liste von Ganzzahlen ungleich Null als Eingabe, ob es sich um einen Übungssatz handelt. Die ganzen Zahlen sind nicht unbedingt eindeutig. Die Länge der Liste ist nicht unbedingt gerade.
Ihre Lösung verwendet möglicherweise keine der Standardlücken . Sie können zwei verschiedene konsistente Werte für die Ausgabe verwenden. Das ist Code-Golf , also gewinnt die kürzeste Lösung.
Beispiele
[-5, -1, -7, -6, -5, 5, 1, 7, 6, 5]
ist ein Beispiel für einen Übungsteil. Die erste Hälfte ist [-5, -1, -7, -6, -5]
und die letzte Hälfte ist [5, 1, 7, 6, 5]
, die jeweils eine ganze Zahl in der ersten Hälfte negiert. Außerdem haben die Ganzzahlen der ersten Hälfte alle dasselbe Vorzeichen. Die führende Seite dieses Übungsteils ist -1
.
[3, 6, 5, -3, -6, -5, 1, 6, 4, 3, -1, -6, -4, -3]
ist ein Beispiel für ein Übungsset. Die einzelnen Übungsteile sind [3, 6, 5, -3, -6, -5]
und [1, 6, 4, 3, -1, -6, -4, -3]
und beide haben eine führende Seite 1
.
[4, -4, -5, 5]
Obwohl es nur aus gültigen Übungsteilen besteht, handelt es sich nicht um ein Übungsset, da der erste Teil [4, -4]
eine führende Seite hat 1
, während der zweite Teil [-5, 5]
eine führende Seite hat -1
.
Testfälle
Gültige Testfälle:
[]
[1, -1]
[1, -1, 1, -1]
[-6, 6, -5, -4, -3, 5, 4, 3]
[-1, -5, -8, 1, 5, 8, -7, -6, -5, -3, 7, 6, 5, 3]
[-1, -5, -8, 1, 5, 8, -1, 1]
Ungültige Testfälle:
[1]
[1, -2]
[1, 2, -3, -1, -2, 3]
[1, 2, 3, -3, -1, -2]
[-1, -5, -8, 1, 5, 8, 7, 6, 5, 3, -7, -6, -5, -3]
[1, 2, 3, 5, 1, 2, 3, 5]
[1, 2, -5, 4, -6, 5, 5, -6]
[1, 2, -1, 3, -2, -3]
[1, -2, 1]
[-1, -1, 1]
[1, -1, 1]
quelle
Antworten:
Python 2 ,
6967 BytesProbieren Sie es online!
quelle
Gelee , 10 Bytes
Probieren Sie es online!
quelle
Java 8,
186183185 Bytes+2 Bytes aufgrund eines Bugfixes für Testfälle der Größe 3 (fast alle Permutationen von
1
und-1
am Ende meines TIO-Links).Kann auf jeden Fall golfen werden. Die Herausforderung scheint auf den Punkt zu kommen, ist aber ziemlich schwer umzusetzen. Vor allem der Testfall
[4,-4,-5,5]
war nervig zu beheben .. Aber es funktioniert jetzt. Wird es von hier aus Golf spielen.Probieren Sie es online aus.
Erläuterung:
quelle
R , 91 Bytes
Gibt einen durch Leerzeichen getrennten Vektor von Zahlen ein. Ausgänge
FALSE
für gültig undTRUE
ungültig.rle
gibt die Lauflängencodierung an, in diesem Fall aus der Folge positiver und negativer Werte.Der völlig und total unfaire Leerkantenkoffer;) fügt satte 15 Bytes hinzu.
Viele Bytes wurden von @ Giuseppe abgeschabt.
Hier ist eine 92-Byte-Version, die als eine Funktion ausgedrückt wird, die zum Testen besser ist:
Probieren Sie es online!
quelle
JavaScript (ES6), 54 Byte
Optimierte Version, inspiriert von Dennis 'Python-Antwort .
Gibt 0 oder 1 zurück .
Probieren Sie es online!
Originalversion, 74 Bytes
Probieren Sie es online!
Wie?
Wir speichern die ersten Hälften aller Übungsteile in b [0] und die zweiten Hälften in b [1] und wechseln bei jedem Vorzeichenwechsel zwischen b [0] und b [1] . Die Einträge sind quadratisch, um das Zeichen zu entfernen. Wir stellen jedem Eintrag ein Komma voran und fügen jedem Teil eine 0 hinzu .
Es gibt eine zusätzliche Logik, um den Randfall "leere Eingabe" im Grunde kostenlos zu behandeln (siehe den Kommentar am Ende des Quellcodes).
quelle
Python 2 ,
147130113112106 BytesProbieren Sie es online!
Gerettet:
quelle
lambda n:cmp(n,0)
werden kann0 .__cmp__
.all(a==b for a,b in zip(l[::2],l[1::2]))
werden kannl[:-1:2]==l[1::2]
.Retina 0.8.2 , 57 Bytes
Probieren Sie es online! Übernimmt kommagetrennte Eingaben, aber der Link enthält einen Header, der Testfälle verarbeitet. Erläuterung:
Fügen Sie vor jeder positiven Ganzzahl einen Marker ein.
Ändern Sie die Kommas zwischen ganzen Zahlen desselben Zeichens in Unterstriche.
Löschen Sie die restlichen Zeichen.
Fügen Sie ein Komma hinzu, wenn die Eingabe nicht leer ist.
Stellen Sie sicher, dass die Zeichenfolge aus Laufpaaren derselben ganzen Zahlen besteht.
quelle
Python 2 , 111 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 155 Byte
Probieren Sie es online!
Inspiration war die Antwort von @ KevinCruijssen
Danke auch an ihn für die Korrektur von 2 meiner Testfälle
quelle
r=0<i
zur=i%2
, da die Testfälle[1,-1,1]
und[-1,1,-1]
im Moment versagen. Die Anzahl der Bytes bleibt jedoch für JS gleich.Stax , 13 Bytes
Führen Sie es aus und debuggen Sie es
quelle
Brachylog ,
1814 BytesProbieren Sie es online!
4 Bytes gespart dank @ErikTheOutgolfer.
Erläuterung
quelle
APL (Dyalog Classic) , 48 Byte
Probieren Sie es online!
quelle