Ob Sie es glauben oder nicht, die Sex Bob-Ombs sind zu einer weltberühmten Band geworden und befinden sich derzeit auf Welttournee! Als ihr Buchhalter müssen Sie ihre täglichen Finanzen überwachen und regelmäßige Berichte vorlegen.
Alle paar Wochen erstellen Sie eine Liste ihrer Ausgaben (in ganzen USD ) in der Reihenfolge, in der sie angefallen sind.
Zum Beispiel die Liste
378
-95
2234
bedeutet, dass 378 $ auf ihr Konto eingezahlt wurden und danach 95 $ abgehoben wurden und danach 2234 $ eingezahlt wurden.
Sie möchten sicherstellen, dass die laufende Summe dieser Werte niemals einen Schwellenwert T unterschreitet . Sie beschließen, ein Programm zu schreiben, das dies für Sie erledigt.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine einzelne Ganzzahl T und eine Liste von Ganzzahlen enthält. Wenn die laufende Summe der Liste der ganzen Zahlen immer kleiner als T ist , dann drucken Sie einen falschen Wert oder geben Sie ihn zurück , andernfalls drucken Sie einen wahren Wert oder geben Sie ihn zurück.
Sie können alle üblichen Eingabemethoden verwenden (stdin, from file, command line, arguments to function).
- Am Anfang der Liste ist die laufende Summe 0. Ein positives T bedeutet also, dass das Ergebnis immer falsch ist.
+
wird niemals vor positiven ganzen Zahlen stehen.- Die Liste kann 0 enthalten.
- Die Liste ist möglicherweise leer.
Testfälle
T ist in all diesen -5.
Falsch:
-6
1
2
3
-20
200
-300
1000
Wahrheit:
[empty list]
-5
4
-3
-6
Wertung
Die Einsendung mit den wenigsten Bytes gewinnt. Tiebreaker geht zum frühesten geposteten Beitrag.
quelle
Antworten:
gs2 - 6 bytes
Angenommen, die Liste befindet sich oben auf dem Stapel und der Schwellenwert befindet sich in Register A. In mnemonics:
In Bytecode:
quelle
inits
ist wie in Haskell:"abcd" inits
→["" "a" "ab" "abc" "abcd"]
holt uns alle Präfixe. Dann filtern wir mit einem "Lambda" aus drei Befehlen, das sich__ __ __ F2
im Bytecode befindet: Wir suchen nach allen Präfixen, deren Summe kleiner ist als das, was auch immer enthalten istA
. Dann wirdnot
festgestellt, ob die Liste leer ist.Haskell, 22 Bytes
Verwendung:
f (-5) [4,-3,-6]
welche AusgängeTrue
.Machen Sie eine Liste von Zwischensummen und prüfen Sie, ob alle Elemente> = t sind.
Edit: Bugfix für leere Liste und positive
t
squelle
0
ist nicht in der Liste, da siescanl1
die leere Liste zurückgibt, wenn sie mit der leeren Liste gespeist wird , aberall
diesen Fall abfängt .f (-5) []
kehrt zurückTrue
.Python 2, 41
Das erste Argument ist das Array; Die zweite ist die minimale laufende Summe.
quelle
J, 11 Bytes
Tests
1-Byte-Verbesserung dank FUZxxl .
Erklärung zur Originalversion
(*/@(<:0,+/\))
+/\
erstellt eine laufende Summe (Summe+/
der Präfixe\
)0,+/\
hängt eine 0 an die laufende Summe an(<:0,+/\)
linksseitige Eingabe kleiner oder gleich<:
(Elemente des) Ergebnisses von0,+/\
rechtsseitige Eingabe@
mit dem vorherigen Ergebnis*/
Produkt aller Elemente (1, wenn alle Elemente 1 sind, 0, wenn ein Element 0 ist)quelle
*/@:<:0,+/\
für einen Charakter tun, denke ich.APL,
810Dies ist eine Funktion, die
T
als linkes Argument und die Liste als rechtes Argument verwendet.0,+\
: laufende Summe des rechten Arguments, angehängt an eine 0∧.≤
: linkes Argument kleiner oder gleich (≤) als alle (∧) Elemente im rechten Argumentquelle
Mathematica, 34 Bytes
Dies definiert eine unbenannte variadische Funktion, die
T
als ersten Parameter und die Transaktionen als verbleibende Parameter verwendet und einen Booleschen Wert zurückgibt:Mir gefällt das, weil ich das eher seltene nutzen konnte, das
##2
alle Argumente von der zweiten in die Liste "splattet". Weitere Details finden Sie im letzten Abschnitt dieses Golftipps .quelle
k, 8 Zeichen
Ein dyadisches Verb, bei dem der Schwellenwert als erstes Argument und die Liste als zweites Argument verwendet wird. Bemerkenswerterweise funktioniert dies in jeder Version von k, einschließlich der Open-Source-Version von Kona.
In k wird die Komposition von Funktionen nur durch Schreiben der einen und der anderen ausgeführt, sodass wir diese nach Funktionen aufteilen können. Von rechts nach links:
-\,
Nimmt aufeinanderfolgende laufende Summen und subtrahiert sie von der Schwelle. (Wennf
dyadisch ist, dannf\ (a; b; c; ...)
erweitert sich zu(a; a f b; (a f b) f c; ...)
. Verbindet,
nur Listen.) Breaking Even tritt auf, wenn etwas gleich 0 ist, und Overdrawing ergibt streng positive Werte.~0<
ist nicht 0 kleiner als. k hat nicht wirklich einen Größer-als-oder-Gleich-<=
Operator, also müssen wir Boolesche NICHT auf ein Kleiner-als werfen, aber dies prüft, ob das Ergebnis nicht positiv ist. Es gilt automatisch für jedes Atom in der Liste.&/
ist die Falte des logischen UND über einer Liste. (Fürf
dyadisch) Damit wird geprüft, ob jeder Boolesche Wert in der Liste wahr ist.Beispiele:
quelle
~|/>+\,
>
ist "absteigende Sortierpermutation",~|/>+\,
gibt also nur wahr, wenn die Eingabeliste leer ist ...CJam, 17 Bytes
Übernimmt die Eingabe als Ganzzahl und als Array im CJam-Stil in STDIN:
Teste es hier.
quelle
Pyth,
1615Probieren Sie es online mit der Eingabe
Erläuterung:
Und wieder
s
verschwendet die dumme Funktion zwei Bytes. Ich glaube, ich melde das dem Pyth-Repo als Bug.Bearbeiten: 13 (ungültig)
Dank an isaacg für das Speichern (
>1
bis!
) eines Bytes und für das Ändern der Implementierungs
im Pyth-Repo. Jetzt ist der folgende Code möglich (aber natürlich nicht gültig für diese Herausforderung).quelle
!
anstelle von verwenden>1
.#sY
. Und danke für die 1-Byte-Speicherung.R 35
Probieren Sie es hier aus
quelle
Julia, 33 Bytes
Dadurch wird eine unbenannte Funktion erstellt, die zwei Parameter
T
und akzeptiertl
und einen Booleschen Wert zurückgibt.Die
all()
Funktion erledigt hier das ganze schwere Heben. Es sind zwei Argumente erforderlich: ein Prädikat und ein iterierbares. Für das Prädikat teilen wir ihm mit, dass esi
den aktuellen Wert der Iteration darstellt, indem eine unbenannte Funktion verwendet wird, die durch angegeben wirdi->
. Dann vergleichen wir bei jeder Iterationi
mitT
usingi>=T
.Um sicherzustellen, dass Julia nicht davon ausgeht,
cumsum()
eine leere Liste zu verwenden, können wir dort eine Null setzen[0, l]
.quelle
Vorspiel ,
144136 BytesDas war ... schwer ...
Ich denke, 6 Stimmen sind ein neuer Rekord für mich, obwohl ich mir sicher bin, dass es einen Weg gibt, das zu reduzieren und viele dieser nervigen Leerzeichen loszuwerden. Das Überprüfen des Vorzeichens eines Werts (und daher das Überprüfen, ob ein Wert größer als ein anderer ist) ist im Prelude recht schwierig.
Ein- und Ausgabe erfolgt als Bytewert. Wenn Sie verwenden den Python-Interpreter verwenden , können Sie festlegen
NUMERIC_OUTPUT = True
, dass Sie tatsächlich ein ASCII-0
oder ein1
. Für die numerische EingabeNUMERIC_INPUT
müssten Sie ein weiteres Flag hinzufügen (ich sollte wahrscheinlich irgendwann meinen optimierten Interpreter veröffentlichen).Beachten Sie auch, dass Prelude das Ende einer Liste nicht wirklich von einem
0
innerhalb der Liste unterscheiden kann. Um also keine Transaktionen zuzulassen, lese ichT
, dann die LängeL
der Liste und dannL
Transaktionen.quelle
CJam, 18 Bytes
Ein anderer Ansatz in den gleichen Bytes wie der andere.
Übernimmt die Eingabe über STDIN in Form von
<threshold> <array of transactions>
Probieren Sie es hier online aus
quelle
f>:|!
anstelle von:)f<:&
JavaScript (ES6) 38
33Bearbeiten Feste Anfangssaldo Fehler. Danke @martin & @rainbolt
Test In der Firefox / FireBug-Konsole
quelle
Python 2.7 - 55 Bytes
Rufen Sie gerne an
print f(-5,[1,2,3,-20])
. Teste es hier .Vielen Dank an Jakube für die Hilfe.
quelle
> <>, 29 + 3 = 32 Bytes
Laufen wie
wobei der Schwellenwert die erste Zahl ist.
quelle
Oktave, 27
quelle
Perl 6 (21 Bytes)
Es ist eine Funktion, die ein erstes Argument und eine Liste von Elementen verwendet. Es funktioniert, indem überprüft wird, ob keine ( mithilfe von Übergängen ) der Elemente unter dem Schwellenwert liegen.
[\+]
wird zum Erzeugen einer laufenden Summe verwendet, beispielsweise[\+] 1, 2, 3
gibt1, 3, 6
.0,
Anhängen0
am Anfang der Liste ist erforderlich, da der positive Schwellenwert immer ausfallen muss.Ziemlich dasselbe wie die Haskell-Lösung, nur in Perl 6-Syntax (Perl 6 hat so viele nette Programmierfunktionen von Haskell übernommen).
quelle
Perl - 20
Nehmen Sie die Nummernliste
STDIN
durch Zeilenumbrüche getrennt auf und nehmen SieT
mit der-i
Fahne.+2 für
-i
und-n
Flags. Der Ausgangswert gilt255
für Fehler und0
bei Erfolg.Laufen mit:
quelle
Clojure, 45
Z.B
Oder ein bisschen netter;
quelle
Java 8 - 153 Zeichen
Golf Funktion:
Ungolfed:
Treiberprogramm:
}
Ausgabe:
quelle