Herausforderung Mit freundlicher Genehmigung meines University Code Challenge Contest
Nachdem Marie vor ein paar Monaten ihr Studium beendet hatte, eröffnete sie ein Bankkonto, um die Zahlung ihres ersten Jobs in der Stadt zu erhalten. Seitdem hat sie einige Transaktionen damit durchgeführt. Ihre erste Zahlung war 1000 Dollar. Mit diesem Geld bezahlte sie ein Abendessen, zu dem sie ihre Eltern einlud (das Abendessen kostete 150 Dollar), dann kaufte sie in einem bekannten Supermarkt ein (80 Dollar) und reservierte ein Hotel für ihren Urlaub (200 Dollar). Am Ende des Monats erhielt sie ihre Zahlung erneut (1040 Dollar, etwas mehr als im Vormonat) und am Tag danach gab sie weitere 70 Dollar im Supermarkt aus.
Heute stellte sie fest, dass, wenn nach der Zahlung der ersten 80 Dollar im Supermarkt ein zweites Konto erstellt und das erste eingefroren worden wäre, beide Konten genau den gleichen Kontostand hätten:
Das Ereignis war für sie so selten, dass sie weiterhin feststellen möchte, ob die Bewegungen ihres Kontos und die ihrer Freunde auch diese Funktion haben oder nicht.
Herausforderung
Geben Sie anhand einer Liste von Transaktionen die Anzahl der Zeitpunkte aus, in denen der Inhaber des Bankkontos ein zweites Konto hätte erstellen können, sodass beide den gleichen endgültigen Kontostand hatten.
Beispiel: [1000, -150, -80, -200, 1040, -70]
Testfall
- Eingabe:
1000 -150 -80 -200 1040 -70
Ausgabe:1
- Eingabe:
100 -100
Ausgabe:2
- Eingabe:
1 2 3
Ausgabe:1
- Eingabe:
10 -20 15
Ausgabe:0
- Eingabe:
15 -15 15 -15
Ausgabe:3
- Eingabe:
1
Ausgabe:0
Anmerkungen
- Sie können davon ausgehen, dass es keine Transaktion von 0 US-Dollar gibt
- Sie können auf jede vernünftige Weise Eingaben vornehmen
Antworten:
C # (Visual C # Interactive Compiler) , 63 Byte
6 Bytes dank Dana gespeichert
Probieren Sie es online aus!
quelle
Perl 6 , 25 Bytes
Probieren Sie es online aus!
Erläuterung
Wir stellen der gegebenen Liste (
0,|$_
) einfach eine Null voran , machen eine Folge von Teilsummen mit[\+]
(dh der Folge, die durch das erste Element gebildet wird, die Summe der ersten zwei, die Summe der ersten drei usw.) und suchen (grep
) nach einer beliebigen Elemente, die genau der Hälfte des endgültigen Kontostatus entsprechen (Summe der angegebenen Liste). Schließlich zählen wir sie mit a+
.quelle
05AB1E , 11 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Gelee ,
116 BytesProbieren Sie es online aus!
quelle
JavaScript (Node.js) , 45 Byte
Probieren Sie es online aus!
Speichern Sie 4 Bytes mit
-~o[s]
. Danke an Shaggy.quelle
+
wird in geändert!
, sodass es für Eingaben funktionieren kann[100]
.Perl 5
-p
,4241 Bytes@NahuelFouilleul speichert ein Byte
Probieren Sie es online aus!
quelle
y/ /+/;
spart 1 ByteJavaScript (ES6), 52 Byte
Probieren Sie es online aus!
Kommentiert
Rekursive Version,
5453 BytesProbieren Sie es online aus!
quelle
APL (Dyalog Unicode) , 21 Byte SBCS
Anonyme stillschweigende Präfixfunktion
Probieren Sie es online aus!
⍳
ɩ ndices∘
von≢
der Bilanz von Transaktionen0,
Null voranstellen⊂(
…)¨⍨
Wenden die folgende implizite Funktion mit jedem dieser als linkes Argument und der gesamten Liste der Transaktionen als rechtes Argument an (⍨
Swaps-Argument)⊂
die gesamte Liste der Transaktionen(
…)
als linkes Argument für die folgende Funktion,¨
die auf jeden der Indizes⍨
mit vertauschten Argumenten angewendet wird (dh Liste rechts, Indizes links:↓
Lass so viele von links fallen1⊥
Summe (lit. in Basis-1 auswerten)(
…)=
Ist es (0/1) gleich…↑
Nehmen Sie so viele Transaktionen von links+/
summiere sie+/
Summiere diese Boolesche Liste, um die Anzahl der Wahrheiten zu erhaltenquelle
Stapel, 84 Bytes
Nimmt Eingaben als Befehlszeilenargumente entgegen. Erläuterung:
Verbinden Sie die Argumente mit Leerzeichen.
Ersetzen Sie die Leerzeichen durch
+
s und bewerten Sie das Ergebnis. Löschen Sie auch die Zählung.Subtrahieren Sie für jeden Betrag das Doppelte von der Summe. Wenn das Ergebnis Null ist, ist dies eine gültige Übereinstimmung. Erhöhen Sie daher die Anzahl. Die zusätzliche Null am Anfang ermöglicht eine Übereinstimmung vor irgendwelchen Beträgen.
Drucken Sie das Ergebnis.
quelle
Holzkohle , 15 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Leider ist in Charcoal
Sum([])
nicht0
so, dass ich sicherstellen muss, dass es immer mindestens ein Element zu summieren gibt.quelle
Python 3 ,
6758 BytesProbieren Sie es online aus!
-9 Bytes dank @ Sei kein x-dreifacher Punkt
quelle
lambda l:sum(sum(l[:x])==sum(l[x:])for x in range(len(l)+1))
.sum(l[:x])*2==sum(l)
spart Ihnen weitere 2 Bytes.R ,
5037 BytesProbieren Sie es online aus!
quelle
MATL , 9 Bytes
Probieren Sie es online aus!
Gleicher Ansatz wie bei einigen anderen Antworten: Stellen Sie eine Null voran und prüfen Sie, wie oft die Hälfte der kumulierten Summe der Gesamtsumme entspricht.
quelle
Japt
-x
,1411 BytesVersuch es
quelle
PowerShell ,
8882 Byte-6 Bytes dank mazzy
Probieren Sie es online aus!
Dies scheint eine sehr ungeschickte Methode zu sein, aber sie hat den Job erledigt. Ich werde versuchen, es in Zukunft zu überarbeiten.
quelle
$i+=<predicate>
stattdessen schreibenif(<predicate>){$i++}
PowerShell ,
494536 ByteProbieren Sie es online aus!
quelle
Brachylog , 9 Bytes
Nicht so gut wie Tag 1. Dieser verliert gegen Jelly
Erläuterung
Testsuite: Probieren Sie es online aus!
quelle
Bash, 52 Bytes
TIO
Der Trick: Setting
IFS=+
wird"$*"
zu einer Zeichenfolge erweitert, in der Argumente durch einen+
arithmetischen Ausdruck begrenzt sind, der sich aus der Summe ergibtquelle
Haskell,
4635 BytesProbieren Sie es online aus!
quelle
J , 19 Bytes
Probieren Sie es online aus!
Erläuterung
quelle