Wierzcie lub nie, Sex Bob-ombs stały się światowej sławy zespołem i są obecnie na światowej trasie koncertowej! Jako księgowy musisz nadzorować ich codzienne finanse i regularnie przedstawiać raporty.
Co kilka tygodni zestawiasz listę ich wydatków (w pełnych USD ) w kolejności, w jakiej zostały poniesione.
Na przykład lista
378
-95
2234
oznacza, że 378 USD zostało zdeponowane na ich rachunku, a następnie 95 USD zostało wypłacone, a następnie 2234 USD zostało zdeponowane.
Chcesz, aby upewnić się, że działa suma tych wartości, nigdy nie spada poniżej pewnej wartości progowej T . Postanawiasz napisać program, który zrobi to za Ciebie.
Wyzwanie
Napisz program lub funkcję, która przyjmuje jedną liczbę całkowitą T i listę liczb całkowitych. Jeśli bieżąca suma listy liczb całkowitych jest zawsze mniejsza niż T , wydrukuj lub zwróć wartość fałszowania , w przeciwnym razie wydrukuj lub zwróć wartość prawdy.
Możesz użyć dowolnych zwykłych metod wprowadzania danych (stdin, z pliku, wiersza poleceń, argumentów do funkcji).
- Na początku listy bieżąca suma wynosi 0. Więc dodatnia T oznacza, że wynik jest zawsze fałszywy.
+
nigdy nie będzie przed dodatnimi liczbami całkowitymi.- Lista może zawierać 0.
- Lista może być pusta.
Przypadki testowe
T wynosi w nich wszystkich -5.
Falsy:
-6
1
2
3
-20
200
-300
1000
Prawda:
[empty list]
-5
4
-3
-6
Punktacja
Zgłoszenie z najmniejszą liczbą bajtów wygrywa. Tiebreaker przechodzi do najwcześniej opublikowanego zgłoszenia.
źródło
Odpowiedzi:
gs2 - 6 bajtów
Załóżmy, że lista znajduje się na górze stosu, a próg znajduje się w rejestrze A. W mnemonice:
W kodzie bajtowym:
źródło
inits
jest jak w Haskell:"abcd" inits
→["" "a" "ab" "abc" "abcd"]
pobiera nam wszystkie prefiksy. Następnie filtrujemy za pomocą „lambda” trzech poleceń, które znajdują się__ __ __ F2
w kodzie bajtowym: szukamy wszystkich prefiksów, których suma jest mniejsza niż cokolwiek jestA
. Następnienot
określa, czy lista jest pusta.Haskell, 22 bajty
Zastosowanie:
f (-5) [4,-3,-6]
które wyjściaTrue
.Zrób listę sum częściowych i sprawdź, czy wszystkie elementy są> = t.
Edycja: Poprawka dla pustej listy i pozytywnych
t
sźródło
0
nie ma na liście, ponieważscanl1
zwraca pustą listę, jeśli zostanie podana z pustą listą, aleall
przechwytuje tę sprawę.f (-5) []
zwracaTrue
.Python 2, 41
Pierwszym argumentem jest tablica; drugi to minimalna suma bieżąca.
źródło
J, 11 bajtów
Testy
1-bajtowa poprawa dzięki FUZxxl .
Objaśnienie oryginalnej wersji
(*/@(<:0,+/\))
+/\
tworzy sumę bieżącą (suma+/
prefiksów\
)0,+/\
dodaje 0 do bieżącej sumy(<:0,+/\)
wejście po lewej stronie mniejsze lub równe<:
(elementy) wyniku0,+/\
po prawej stronie@
z poprzednim wynikiem*/
iloczyn wszystkich elementów (1, jeśli wszystkie elementy mają wartość 1, 0, jeśli element ma wartość 0)źródło
*/@:<:0,+/\
Myślę, że możesz zrobić dla jednej postaci.APL,
810Jest to funkcja, która przyjmuje
T
za lewy argument, a lista za prawy argument.0,+\
: działająca suma poprawnego argumentu, dołączona do 0∧.≤
: lewy argument mniejszy lub równy (≤) niż wszystkie (∧) pozycje w prawym argumencieźródło
Mathematica, 34 bajty
Definiuje to nienazwaną funkcję variadic, która przyjmuje
T
jako pierwszy parametr, a transakcje jako pozostałe parametry i zwraca wartość logiczną:Podoba mi się to, ponieważ mogłem skorzystać z dość rzadkiej opcji,
##2
która „rozdziela” wszystkie argumenty z drugiego na listę. Aby uzyskać więcej informacji, zobacz ostatnią część tego poradnika golfowego .źródło
k, 8 znaków
Czasownik dynamiczny przyjmujący próg jako pierwszy argument, a listę jako drugi. Co zadziwiające, działa to w każdej wersji k, w tym Kona open-source.
W k składanie funkcji odbywa się po prostu przez napisanie jednej, a potem drugiej, dzięki czemu możemy podzielić je na funkcje. Z prawej do lewej:
-\,
pobiera kolejne sumy bieżące i odejmuje je od progu. (Jeślif
jest dynamiczne, tof\ (a; b; c; ...)
rozwija się do(a; a f b; (a f b) f c; ...)
. Po,
prostu łączy listy razem.) Łamanie występuje nawet wtedy, gdy coś jest równe 0, a przesadzanie daje wartości ściśle dodatnie.~0<
nie jest równy 0. k tak naprawdę nie ma wartości większej niż lub równej<=
operatora , więc musimy wyrzucić wartość logiczną NIE na mniej niż, ale sprawdza to, czy wynik nie jest dodatni. Automatycznie stosuje się do każdego atomu na liście.&/
jest foldem logicznym AND na liście. (Dlaf
dyadic) Więc to sprawdza, czy każdy boolean na liście ma wartość True.Przykłady:
źródło
~|/>+\,
>
to „malejąca permutacja sortowania”, więc~|/>+\,
daje prawdę tylko wtedy, gdy lista wejściowa jest pusta ...CJam, 17 bajtów
Pobiera dane wejściowe jako liczbę całkowitą i tablicę w stylu CJam na STDIN:
Sprawdź to tutaj.
źródło
Pyth
1615Spróbuj online z danymi wejściowymi
Wyjaśnienie:
I znowu głupi
s
funkcja marnuje dwa bajty. Myślę, że zgłoszę to jako błąd do repozytorium Pyth.edycja: 13 (niepoprawna)
Dzięki isaacg za jednobajtowe zapisywanie (
>1
do!
) i za zmianę implementacjis
w repozytorium Pyth. Teraz możliwy jest następujący kod (ale oczywiście nie jest ważny dla tego wyzwania).źródło
!
zamiast>1
.#sY
. I dziękuję za zaoszczędzenie 1 bajtu.R, 35
Wypróbuj tutaj
źródło
Julia, 33 bajty
To tworzy nienazwaną funkcję, która akceptuje dwa parametry,
T
al
i zwraca wartość logiczną.Ta
all()
funkcja wykonuje wszystkie ciężkie podnoszenie tutaj. Wymaga dwóch argumentów: predykatu i iterowalnego. W przypadku predykatu mówimy, żei
reprezentuje on bieżącą wartość iterowalności przy użyciu funkcji bez nazwy, określonej przezi->
. Następnie w każdej iteracji możemy porównaći
doT
użyciai>=T
.Aby upewnić się, że Julia nie przestraszy się używania
cumsum()
na pustej liście, możemy ustawić zero przy użyciu[0, l]
.źródło
Preludium ,
144136 bajtówTo było ... trudne ...
Myślę, że 6 głosów to dla mnie nowy rekord, chociaż jestem pewien, że istnieje sposób na zmniejszenie tego i pozbycie się wielu irytujących białych znaków. Sprawdzanie znaku wartości (a zatem sprawdzanie, czy jedna wartość jest większa od drugiej) jest dość trudne w Preludium.
Dane wejściowe i wyjściowe są podawane jako wartości bajtów.Kiedy używasz interpretera Pythona , możesz ustawić
NUMERIC_OUTPUT = True
tak, aby faktycznie uzyskać ASCII0
lub1
. Aby wprowadzić dane liczbowe, musisz dodać kolejnyNUMERIC_INPUT
flagę (prawdopodobnie powinienem opublikować mój ulepszony interpreter w pewnym momencie).Zauważ też, że Preludium nie może tak naprawdę odróżnić końca listy od
0
listy na liście. Aby umożliwić zerowe transakcje, czytamT
, potem długośćL
listy, a potemL
transakcje.źródło
CJam, 18 bajtów
Inne podejście w tych samych bajtach, co drugi.
Pobiera dane wejściowe za pośrednictwem STDIN w postaci
<threshold> <array of transactions>
Wypróbuj online tutaj
źródło
f>:|!
zamiast:)f<:&
JavaScript (ES6) 38
33Edytować Naprawiono błąd początkowego salda. Thx @ Martin i @rainbolt
Przetestuj w konsoli Firefox / FireBug
źródło
Python 2.7 - 55 bajtów
Zadzwoń jak
print f(-5,[1,2,3,-20])
. Sprawdź to tutaj .Dzięki Jakube za pomoc.
źródło
> <>, 29 + 3 = 32 bajty
Biegnij jak
gdzie próg jest pierwszą liczbą.
źródło
Oktawa, 27
źródło
Perl 6 (21 bajtów)
Jest to funkcja pobierająca początkowy argument i listę elementów. Działa poprzez sprawdzenie, czy żaden ( przy użyciu skrzyżowań ) elementów nie jest poniżej progu.
[\+]
służy do generowania bieżącej sumy, na przykład[\+] 1, 2, 3
daje1, 3, 6
.0,
dołączyć0
na początku listy jest konieczne ze względu na wymóg, aby dodatni próg zawsze zawodził.Prawie to samo, co rozwiązanie Haskell, tylko w składni Perla 6 (Perl 6 miał tak wiele schludnych funkcji programowania od Haskella).
źródło
Perl - 20
Zapoznaj się z listą numerów na
STDIN
oddzielone znakami nowej linii i wziąćT
z-i
flagą.+2 za
-i
i-n
flagi. Wartość wyjściowa dotyczy255
awarii i0
powodzenia.Biegnij z:
źródło
Clojure, 45 lat
Na przykład
Lub milej;
źródło
Java 8 - 153 znaków
Funkcja gry w golfa:
Nie golfowany:
Program sterownika:
}
Wynik:
źródło