Einführung
Betrachten Sie eine nicht leere Liste L von ganzen Zahlen. Eine Nullsummenscheibe von L ist eine zusammenhängende Untersequenz von L, deren Summe gleich 0 ist. Beispielsweise ist [1, -3, 2] eine Nullsummenscheibe von [-2, 4, 1, -3, 2, 2 , -1, -1] , aber [2, 2] ist nicht (weil es nicht 0 ergibt) und auch nicht [4, -3, -1] (weil es nicht zusammenhängend ist).
Eine Sammlung von Nullsummenschnitten von L ist eine Nullsummenabdeckung von L, wenn jedes Element zu mindestens einem der Abschnitte gehört. Beispielsweise:
L = [-2, 4, 1, -3, 2, 2, -1, -1]
A = [-2, 4, 1, -3]
B = [1, -3, 2]
C = [2, -1, -1]
Die drei Nullsummen Scheiben A , B und C ein Nullsumme mit Vordruck L . In einem Nullsummen-Cover können mehrere Kopien desselben Slices wie folgt angezeigt werden:
L = [2, -1, -1, -1, 2, -1, -1]
A = [2, -1, -1]
B = [-1, -1, 2]
C = [2, -1, -1]
Natürlich haben nicht alle Listen eine Nullsummendeckung; Einige Beispiele sind [2, -1] (jede Schicht hat eine Summe ungleich Null) und [2, 2, -1, -1, 0, 1] (die äußerste linke 2 ist kein Teil einer Nullsummenschicht).
Die Aufgabe
Ihre Eingabe ist eine nicht leere Ganzzahl-Liste L , die in einem beliebigen vernünftigen Format erstellt wurde. Ihre Ausgabe ist ein wahrer Wert, wenn L eine Nullsummendeckung hat, und ein falscher Wert, wenn nicht.
Sie können ein vollständiges Programm oder eine Funktion schreiben, und die niedrigste Byteanzahl gewinnt.
Testfälle
[-1] -> False
[2,-1] -> False
[2,2,-1,-1,0,1] -> False
[2,-2,1,2,-2,-2,4] -> False
[3,-5,-2,0,-3,-2,-1,-2,0,-2] -> False
[-2,6,3,-3,-3,-3,1,2,2,-2,-5,1] -> False
[5,-8,2,-1,-7,-4,4,1,-8,2,-1,-3,-3,-3,5,1] -> False
[-8,-8,4,1,3,10,9,-11,4,4,10,-2,-3,4,-10,-3,-5,0,6,9,7,-5,-3,-3] -> False
[10,8,6,-4,-2,-10,1,1,-5,-11,-3,4,11,6,-3,-4,-3,-9,-11,-12,-4,7,-10,-4] -> False
[0] -> True
[4,-2,-2] -> True
[2,2,-3,1,-2,3,1] -> True
[5,-3,-1,-2,1,5,-4] -> True
[2,-1,-1,-1,2,-1,-1] -> True
[-2,4,1,-3,2,2,-1,-1] -> True
[-4,-1,-1,6,3,6,-5,1,-5,-4,5,3] -> True
[-11,8,-2,-6,2,-12,5,3,-7,4,-7,7,12,-1,-1,6,-7,-4,-5,-12,9,5,6,-3] -> True
[4,-9,12,12,-11,-11,9,-4,8,5,-10,-6,2,-9,10,-11,-9,-2,8,4,-11,7,12,-5] -> True
[2,2,-1,-1,0,1] -> False
nicht wahr sein, da beide Slices[2,-1,-1]
und die[-1,0,1]
Addition zu Null und alle ihre Elemente in der ursprünglichen Liste enthalten sind?Antworten:
Jelly ,
13-12BytesProbieren Sie es online!
Wie es funktioniert
quelle
Mathematica,
6665 Bytes1 Byte gespart und dank Genisis hoffentlich einen neuen Trick für die Zukunft gelernt!
Zwei gleich lange Alternativen, bei denen es sich um unbenannte Funktionen handelt, die eine Liste von Ganzzahlen als Eingabe und Rückgabe verwenden,
True
oderFalse
:Tr@#[[i;;j]]
Berechnet in beiden Fällen die Summe des Slice der Eingabe von Positioni
zu Positionj
(1-indiziert).Product[...,{i,k},{j,k,l}]
Multipliziert alle diese Slice-Summen alsi
Bereiche über Indizes, die höchstens sind,k
undj
Bereiche über Indizes, die mindestens sindk
. (Beachten Sie, dassl=Tr[1^#]
definiertl
die Summe sein ,1
um alle Kräfte in der Eingabeliste, die einfach die Länge der Liste ist.) Mit anderen Worten, dieses Produkt ist gleich 0 , wenn und nur wenn dask
te Element gehört zu einer Nullsumme Scheibe .In der ersten Version, jedes dieser Produkte ist im Vergleich zu
0
undAnd@@
kehrtTrue
genau dann , wenn jedes einzelne Produkt entspricht0
. In der zweiten Version wird die Liste der Produkte von der FunktionNorm
(der Länge desl
eindimensionalen Vektors) bearbeitet, die0
genau dann gleich ist, wenn jeder Eintrag gleich ist0
.quelle
Tr[1^#]
Speichert1
Byte vonLength@#
.0^
arbeiten statt0==
? Ich bin mir nicht sicher, wie Mathematica damit umgeht. (Sie würden1
/0
anstelle vontrue
/ zurückkehrenfalse
)Indeterminate
für0^0
. Auch1
/0
sind nicht wirklich truthy / falsy in Mathematica-it auch dringend zu machen Golfer getippt glücklich :)Mathematica,
6564 BytesDank an ngenisis für das Speichern von 1 Byte.
Ich würde lieber eine reine Mustervergleichslösung finden, aber es erweist sich als schwierig (und Dinge wie
{___,a__,___}
sind immer sehr langwierig).quelle
Haskell, 94 Bytes
Anwendungsbeispiel:
g [-11,8,-2,-6,2,-12,5,3,-7,4,-7,7,12,-1,-1,6,-7,-4,-5,-12,9,5,6,-3]
->True
.Wie es funktioniert (verwenden wir
[-1,1,5,-5]
für die Eingabe):quelle
powerslice
ist so ein toller Funktionsname.Ruby, 81 Bytes
Probieren Sie es online aus
Einfache Brute-Force-Lösung; Versuchen Sie, für jedes Element des Arrays einen Nullsummen-Slice zu finden, der es enthält.
quelle
J,
36-35BytesFür jede Subsumme füge ich die Indizes des Elements hinzu und behalte die Indizes, wenn f subsum ist,
0
und überprüfe dann, ob jeder Index vorhanden ist.Trick: 1-basierte Indizes einer Liste können mit der
#\
Länge jedes Präfixes erzeugt werden.Verwendung:
Probieren Sie es hier online aus.
quelle
#\*/@e.&,]({:*0=1#.{.)@|:\.\@,.#\
JavaScript (ES6), 109 Byte
Testschnipsel
Code-Snippet anzeigen
quelle
Python,
123120 Bytes-3 Bytes dank @Zgarb
Füllt eine Liste mit der gleichen Größe wie die Eingabe mit Nullsummenschnitten und überschreibt sie gemäß den Indizes, wobei am Ende die Gleichheit mit dem Original wiederhergestellt wird.
quelle
0
anstelle von als Platzhalter verwendenNone
. Es wird keine Fehlalarme geben, da jeder0
in der Eingabe immer ein Teil oder eine Nullsumme ist.Scala, 49 Bytes
Probiere es bei ideone aus
Verwendung:
Ungolfed:
Erläuterung:
quelle
%
als Parameternamen verwenden? Cool!.,;:()[]{}\"'
. Ziemlich nützlich zum Golfen, da sie durch das Parsen von Buchstaben getrennt werden, sodass Sie Leerzeichen sparen können.true
gäbe es einen zweiten falschen Fall.Python, 86 Bytes
Wahrheit = 1 Falsch = Keine
quelle
1
für den dritten Testfall zurückgegeben.1
für alle Testfälle mit Ausnahme der ersten beiden falschen zurückgegeben.Clojure, 109 Bytes
Erzeugt alle Partitionen, deren Summe Null ist, und prüft, ob sie unterschiedliche Indizes für die Länge des Eingabevektors haben.
quelle
PHP, 104 Bytes
Brute Force und immer noch über 99 Bytes. :-(
1
Nimmt Eingaben von Kommandozeilenargumenten entgegen, für wahr, für falsch leer. Laufen Sie mit-r
.Nervenzusammenbruch
$argv[0]
enthält den Dateinamen; Wenn Sie mit ausführen-r
, wird dies für numerische Operationen ausgeführt-
und ausgewertet0
.quelle
JavaScript (ES6), 102 Byte
Berechnet die Teilsummen für alle Elemente
i..j
einschließlich und setzt die relevanten Elementeb
von1
bis zurück,0
wenn eine Nullsumme gefunden wird, und überprüft schließlich, ob keine1
s mehr vorhanden sind.quelle