Wyzwanie Podjęte za zgodą mojego konkursu na University Code Challenge
Po ukończeniu studiów kilka miesięcy temu Marie otworzyła konto bankowe, aby zacząć otrzymywać wynagrodzenie za pierwszą pracę w mieście. Od tego czasu przeprowadzała z nim kilka transakcji. Jej pierwsza płatność wyniosła 1000 dolarów. Za te pieniądze zapłaciła za obiad, na który zaprosiła rodziców (obiad kosztował 150 USD), a następnie dokonała zakupu w znanym supermarkecie (80 USD) i rezerwacji hotelu na wakacje (200 USD). Pod koniec miesiąca ponownie otrzymała zapłatę (1040 dolarów, nieco więcej niż w poprzednim miesiącu), a następnego dnia wydała kolejne 70 dolarów w supermarkecie.
Dzisiaj zdała sobie sprawę, że jeśli po zapłaceniu pierwszych 80 dolarów w supermarkecie zostanie utworzone drugie konto, a pierwsze zamrożone, oba konta będą miały dokładnie takie samo saldo:
Wydarzenie było dla niej tak rzadkie, że chce dalej sprawdzać, czy ruchy jej konta i ruchy jej przyjaciół mają tę funkcję, czy nie.
Wyzwanie
Biorąc pod uwagę listę transakcji, podaj liczbę przypadków, w których właściciel konta bankowego mógł utworzyć drugie konto, aby oba miały takie samo saldo końcowe.
Przykład: [1000, -150, -80, -200, 1040, -70]
Przypadek testowy
- Wejście:
1000 -150 -80 -200 1040 -70
Wyjście:1
- Wejście:
100 -100
Wyjście:2
- Wejście:
1 2 3
Wyjście:1
- Wejście:
10 -20 15
Wyjście:0
- Wejście:
15 -15 15 -15
Wyjście:3
- Wejście:
1
Wyjście:0
Notatki
- Możesz założyć, że nie będzie żadnej transakcji o wartości 0 USD
- Możesz wziąć wkład w dowolny rozsądny sposób
Odpowiedzi:
C # (interaktywny kompilator Visual C #) , 63 bajty
Zaoszczędź 6 bajtów dzięki dana
Wypróbuj online!
źródło
Perl 6 , 25 bajtów
Wypróbuj online!
Wyjaśnienie
Po prostu wstawiamy zero do podanej listy (
0,|$_
), tworzymy sekwencję sum częściowych z[\+]
(tj. Sekwencję utworzoną przez pierwszy element, sumę pierwszych dwóch, sumę pierwszych trzech itd.) I szukamy (grep
) dowolnego elementy, które są dokładnie równe połowie stanu końcowego konta (suma podanej listy). Wreszcie, liczymy je za pomocą+
.źródło
05AB1E , 11 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Galaretka ,
116 bajtówWypróbuj online!
źródło
JavaScript (Node.js) , 45 bajtów
Wypróbuj online!
Zaoszczędź 4 bajty
-~o[s]
. Dzięki Shaggy.źródło
+
jest zmieniony na!
, aby mógł działać na wejściu[100]
.Perl 5
-p
,4241 bajtów@NahuelFouilleul zapisuje bajt
Wypróbuj online!
źródło
y/ /+/;
zapisuje 1 bajtJavaScript (ES6), 52 bajty
Wypróbuj online!
Skomentował
Wersja rekurencyjna,
5453 bajtówWypróbuj online!
źródło
APL (Dyalog Unicode) , 21 bajtów SBCS
Anonimowa ukryta funkcja prefiksu
Wypróbuj online!
⍳
ɩ ndices∘
z≢
tym zgadzają transakcji0,
dodać zero⊂(
…)¨⍨
Zastosuj następującą ukrytą funkcję dla każdego z nich jako lewego argumentu, a całą listę transakcji jako prawego argumentu (⍨
argument zamiany⊂
cała lista transakcji(
…)
jako lewy argument do poniższej funkcji¨
zastosowanej do każdego z indeksów⍨
z zamienionymi argumentami (tj. lista po prawej, indeksy po lewej:↓
upuść tyle z lewej1⊥
suma (lit. ocena w bazie-1)(
… Czy)=
to (0/1) jest równe…↑
weź tyle transakcji od lewej+/
zsumuj je+/
zsumuj tę listę logiczną, aby uzyskać liczbę prawdźródło
Partia, 84 bajtów
Pobiera dane wejściowe jako argumenty wiersza polecenia. Wyjaśnienie:
Połącz argumenty spacjami.
Zamień spacje na
+
s i oceń wynik. Wyczyść również liczbę.Dla każdej kwoty odejmij dwukrotnie od sumy. Jeśli wynik wynosi zero, to jest to prawidłowe dopasowanie, więc zwiększ liczbę. Dodatkowe zero na początku pozwala na dopasowanie przed dowolnymi kwotami.
Wydrukuj wynik.
źródło
Węgiel drzewny , 15 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Niestety w Charcoal
Sum([])
nie jest0
tak, więc muszę zapewnić, że zawsze będzie co najmniej jeden element do podsumowania.źródło
Python 3 ,
6758 bajtówWypróbuj online!
-9 bajtów dzięki @ Don't be x-triple dot
źródło
lambda l:sum(sum(l[:x])==sum(l[x:])for x in range(len(l)+1))
.sum(l[:x])*2==sum(l)
oszczędza kolejne 2 bajty.R ,
5037 bajtówWypróbuj online!
źródło
MATL , 9 bajtów
Wypróbuj online!
Takie samo podejście jak w przypadku innych odpowiedzi: wstaw zero i sprawdź, jak często połowa sumy jest równa sumie.
źródło
Japt
-x
,1411 bajtówSpróbuj
źródło
PowerShell ,
8882 bajtów-6 Bajtów dzięki mazzy
Wypróbuj online!
To wydaje się być bardzo niezdarną metodą, ale wykonało zadanie. Spróbuję to przerobić w przyszłości.
źródło
$i+=<predicate>
zamiast tego pisaćif(<predicate>){$i++}
PowerShell ,
494536 bajtówWypróbuj online!
źródło
Brachylog , 9 bajtów
Nie tak dobry jak dzień 1. Ten traci na galaretkę
Wyjaśnienie
Zestaw testowy: wypróbuj online!
źródło
bash, 52 bajty
TIO
Sztuczka: ustawienie
IFS=+
,"$*"
rozwija się do ciągu, w którym argumenty są ograniczone+
, w wyrażeniu arytmetycznym eval do sumyźródło
Haskell,
4635 bajtówWypróbuj online!
źródło
J , 19 bajtów
Wypróbuj online!
wyjaśnienie
źródło