Manchmal, wenn mir wirklich langweilig ist, nehme ich gerne die Summe einer Reihe von nicht negativen ganzen Zahlen. Ich nehme nur die Summe der Längenfelder, die Zweierpotenzen sind. Leider mache ich oft Fehler. Glücklicherweise verfolge ich meine Arbeit auf folgende Weise:
Ich füge Paare benachbarter Zahlen hinzu, bis nur noch eine übrig ist. Beispielsweise:
6 + 18 + 9 + 6 + 6 + 3 + 8 + 10
= 24 + 15 + 9 + 18
= 39 + 27
= 66
Sie müssen feststellen, ob ich irgendwo einen Fehler gemacht habe. Sie können entweder Eingaben an Ihre Funktion übergeben oder Standardeingaben einlesen. Die Ausgabe kann gedruckt oder zurückgegeben werden.
Eingabe: Ein Array / Liste / etc. von nicht-negativen ganzen Zahlen, und möglicherweise auch die Länge dieses Arrays, wenn Ihre Sprache es erfordert. In diesem Array werden alle Zahlen von links nach rechts und dann von oben nach unten gelesen. Zum Beispiel würde das Array oben lauten:
[[6, 18, 9, 6, 6, 3, 8, 10], [24, 15, 9, 18], [39, 27], [66]]
oder
[6, 18, 9, 6, 6, 3, 8, 10, 24, 15, 9, 18, 39, 27, 66]
wenn Sie es vorziehen.
Ausgabe: Ein einzelner Boolescher Wert, der angibt, ob ein Fehler gemacht wurde oder nicht. Der Boolesche Wert kann unter Verwendung einer beliebigen Zuordnung dargestellt werden, vorausgesetzt, dass alle Eingaben, bei denen ein Fehler gemacht wurde, ein identisches Ergebnis zurückgeben / ausgeben und alle Eingaben, die keine Fehler enthalten, ein identisches Ergebnis zurückgeben / ausgeben. Dies sollte selbstverständlich sein, aber diese beiden Ausgänge können nicht gleich sein.
Einige Beispiele für korrekte Summierungen:
6
5+6
=11
3 + 2 + 4 + 5
= 5 + 9
= 14
[0, 1, 2, 3, 1, 5, 6]
[[1, 2, 4, 8], [3, 12], [15]]
Einige Beispiele für eine falsche Summierung:
5+4
=8
4 + 4 + 4 + 4
= 9 + 7
= 16
[[1, 2, 3, 4], [7, 3], [10]]
[3, 4, 5, 6, 7, 8, 9]
Denken Sie daran, dass ich Fehler machen und trotzdem die richtige Antwort bekommen kann. Wenn ich einen Fehler mache, führt dies nie zu einer zusätzlichen Nummer oder einer fehlenden Nummer im endgültigen Array, sondern nur zu einer falschen Nummer.
Standardlücken sind verboten. Die kürzeste Antwort in jeder Sprache ist ein Gewinner. Die ältere Antwort gewinnt im Falle eines Gleichstands. Ich behalte mir das Recht zu entscheiden, was die "gleiche Sprache" ist, aber ich sage im Voraus, dass ein Punkt in Python 2 und Python 3 nicht verdient werden kann.
[0,1,2,3,1,5,6]
ist ungültig, weil "Eingabe: Ein Array / eine Liste / usw. Positiver Ganzzahlen".Antworten:
Gelee , 6 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2 , 51 Bytes
Probieren Sie es online! Vielen Dank an Rod für die Testfälle.
Nimmt die gesamte Liste als Eingabe. Gruppiert Elemente in benachbarte Paare mit zip / iter-Trick berechnet die Summe der Paare und prüft, ob das Ergebnis der zweiten Hälfte der Liste entspricht.
Eine rekursive Methode kam 55 Bytes nahe:
Dies verwendete, dass Eingabe-Ganzzahlen positiv sind, was sich seitdem in der Spezifikation geändert hat.
quelle
[0,0,1,1,1,1,1]
.Röda , 40 Bytes
Probieren Sie es online!
Es ist eine anonyme Funktion, die zurückgibt,
0
wenn keine Fehler vorliegen, und nichts, wenn Fehler vorliegen.Erläuterung:
Hier ist eine Version, die kürzer ist (35 Bytes), aber gegen die Regeln verstößt (glaube ich):
Probieren Sie es online!
Es ist eine anonyme Funktion, die Werte aus dem Stream liest und
TRUE
oderFALSE
für jede richtige Zeile pusht.Ich bin nicht sicher, ob dies (mehrere Rückgabewerte) in den Regeln akzeptiert wird. Hier ist meine Verteidigung: In Röda sind Bedingungen
if
undwhile
Blöcke keine booleschen Werte, sondern Streams. Ein "wahrer" Stream ist entweder leer oder enthält nurTRUE
s, und ein "falscher" Stream enthält ein oder mehrereFALSE
s. Auf diese Weise gibt diese Funktion einen "booleschen" Wert zurück. Und kann als Bedingung für eineif
Anweisung ohne Reduktionsoperationen usw. verwendet werden.quelle
0
. Ich bin mir nicht sicher, wie Röda damit umgeht, aber es ist nicht ungewöhnlich.if
Bedingung tun würde . Wenn Röda so funktioniert, entspricht es unseren Regeln, es sei denn, die Herausforderungsspezifikation überschreibt die Standardeinstellungen ausdrücklich.Python 2 ,
6965 BytesProbieren Sie es online!
Rückgabe:
Leere Liste als
Falsy
Gesamtsumme als
Truthy
quelle
Mathematica, 36 Bytes
Reine Funktion, die eine verschachtelte Liste als Eingabe verwendet und
True
oder zurückgibtFalse
. Die Funktion berechnetTr/@#~Partition~2&
die paarweisen Summen einer Liste, die dann/@#
auf jede Unterliste der Eingabeliste angewendet wird ( ). Die ersten, zweiten, ... Unterlisten in der resultierenden Liste sollen den zweiten, dritten, ... Unterlisten in der ursprünglichen Eingabe entsprechen;Most[...]==Rest@#
Tests für diese Eigenschaft.quelle
Python 2 , 80 Bytes
Probieren Sie es online!
Nicht ganz so gut wie die andere Python-Antwort, aber ich wollte sie trotzdem posten. Dies zeigt nur, warum ich nicht so gut in regulären Sprachen Golf spielen kann.
quelle
JavaScript (ES6), 54 Byte
Nimmt ein abgeflachtes Array auf.
quelle
05AB1E ,
1512 BytesProbieren Sie es online!
Erläuterung
quelle
Haskell ,
827965 Bytes-14 bytes dank nimi!
Vergleichen Sie die Summe jedes Elementpaars mit dem entsprechenden Element in der nächsten Zeile. Einige Bytes können wahrscheinlich abgegolft werden
f
, aber ich kann nicht herausfinden, wo.quelle
p
: hinzufügenp(x:y:z)=x+y:p z
und dannzipWith(==)
anstelle von verwendenzip
und die Liste vonBool
mitand
: kombinierenf x=and.zipWith(==)(drop(length x`div`2+1)x)$p x
.Python 3 ,
6968 BytesIch weiß, dass es bereits zwei andere Python-Antworten gibt ... aber diese ist in Python 3, es ist also exotisch.
Dies funktioniert bei einer abgeflachten Eingabe.
Ausgabe :
False
Wenn es keinen Fehler gibt,True
wenn es einen Fehler gibt.quelle
Ruby, 50 Bytes
Um das Array umzukehren, muss jedes Element der ersten Hälfte (Position n) die Summe der Elemente in Position n * 2 und n * 2 + 1 sein.
quelle
Brachylog ,
16 bis13 BytesProbieren Sie es online!
Das ist einfach furchtbar lang! Es muss eine Möglichkeit geben, Inline-Prädikate hier nicht zu verschachteln.
Das Prädikat ist erfolgreich (Drucken
true.
als Programm), wenn keine Fehler gemacht wurden, und schlägt fehl (Druckenfalse.
als Programm), wenn keine Fehler gemacht wurden .quelle
Python 2 , 64 Bytes
Probieren Sie es online!
Eine unbenannte Funktion, die eine Liste von Listen annimmt (eine pro Arbeitszeile) und True zurückgibt, wenn keine Fehler gemacht wurden, andernfalls False.
Es funktioniert, indem die Eingabe ohne den letzten Eintrag verwendet wird
a[:-1]
, um zu bilden, was die Eingabe ohne den ersten Eintrag sein soll, und zu überprüfen, ob dies die Eingabe ist==a[1:]
.Diese Bildung wird erreicht, indem die Additionsfunktion des Integer-Typs
int.__add__
auf die Zahlenpaare abgebildet wird , die aus zwei "Schichten" resultieren, wobei eine Schicht jedes zweite Element ist, das mit dem 0. Index beginnt,x[::2]
und die andere Schicht jedes zweite Element ist, das mit dem 1. beginnt Indexx[1::2]
.quelle
Pip ,
20 bis19 BytesDies ist eine anonyme Funktion, die ein Argument akzeptiert, eine Liste von Listen (z
[[1 2 3 4] [3 7] [10]]
. B. ). Überprüfen Sie alle Testfälle: Probieren Sie es online!Erläuterung
In einer PIP - Funktion werden die ersten beiden Argumente zugewiesen
a
undb
.Beispielsweise:
quelle
PHP,
96 bis95 Bytes:mit eingebauten:
rekursive Funktionen kehren zurück
true
oder zurückfalse
.Nervenzusammenbruch für die erste Funktion:
ältere Lösungen (jeweils 96 Byte) mit Schleifen:
Nervenzusammenbruch für letzte Funktion:
iterative Ausschnitte, 81 Bytes
Nehmen Sie an, dass das Array in vordefiniert ist
$a
. Beendet mit Fehler, wenn es falsch ist.quelle
C, 54 Bytes:
Ungolfed:
Testen Sie mit
Wie du siehst,
f()
bei ungültigen Eingaben true und bei gültigen Eingaben false (= 0) zurückgegeben.Wie immer ist die Rekursion weniger Bytes als die Iteration
f()
ist auch rekursiv, obwohl zwei Iteratoren als Argumente verwendet werden. Dies funktioniert, indem wiederholt die Summe zweier Ganzzahlens
mit einer Ganzzahl verglichen wird, die Ebenengrenzene
ignoriert werden und so lange fortgefahren wird, bis sich die beiden Iteratoren treffen. Ich habe auch einige boolesche Zen-Werte zusammen mit der Tatsache verwendet, dass ein ganzzahliger Wert ungleich Null in C als wahr angesehen wird, um den Code weiter zu verkürzen.quelle
R,
9277 BytesAnonyme Funktion, die eine flache Folge von Zahlen als Eingabe verwendet. Rückgabe
TRUE
oderFALSE
entsprechend. Verwendet konzeptionell den gleichen Ansatz wie die Python-Antwort von xnor.Vorherige Lösung, die die
rollapply
Funktion aus demzoo
Paket verwendet und Eingaben als Liste aufnimmt, zlist(c(6, 18, 9, 6, 6, 3, 8, 10), c(24, 15, 9, 18), c(39, 27), c(66))
.quelle
JavaScript (ES6),
4644 BytesÜbernimmt die Eingabe als abgeflachtes Array. Rückgabe
NaN
für gültig oder0
ungültig.Prüfung
Code-Snippet anzeigen
quelle
PHP, 102 Bytes
Die Eingabe als URL-Parameter in diesem Format
?0=[1,2,3]&1=[3,3]&2=[6]
verwendet diese Eingabe[[int,int],[int]]
Nervenzusammenbruch
quelle
Japt, 10 Bytes
Übernimmt die Eingabe als 2D-Array.
Versuch es
quelle