Zainspirowany tą rozmową na czacie.
Twoim celem w tym wyzwaniu jest naśladowanie ninja i policzenie liczby jego śmierci.
Okular
Twój ninja zaczyna się od 9 śmierci. Otrzymuje również integralne zdrowie początkowe jako wkład.
Następnie pobiera jako dane wejściowe listę wydarzeń w swoim życiu, które wpływają na jego zdrowie. Mogą to być liczby całkowite ujemne, dodatnie lub zerowe.
W dowolnym momencie, jeśli jego zdrowie osiągnie zero lub mniej, zero życia traci, a jego zdrowie wraca do zdrowia początkowego.
Twój program powinien zgłaszać liczbę śmierci, które pozostawił. Jeśli pozostało mu zero lub mniej, powinieneś wyjść dead
.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach !
Przypadki testowe
3, [] -> 9
100, [-20, 5, -50, 15, -30, -30, 10] -> 8
10, [-10, -10, -10, -10] -> 5
10, [-10, -10, -10, -10, -10, -10, -10, -10, -10] -> dead
0, [] -> dead
0, [1] -> dead
100, [10, -100] -> 9
code-golf
number
simulation
Maltysen
źródło
źródło
Odpowiedzi:
Galaretka ,
302826 bajtówWypróbuj online!
Jak to działa
źródło
Japt,
403932 bajtyWypróbuj online!
Jak to działa
Starając się golf tej ostatniej nocy (z dala od komputera, nie mniej), natknąłem się na ciekawą wymianę
>0
:¬
. W przypadku liczb przyjmuje się pierwiastek kwadratowy, który zwracaNaN
liczby ujemne.NaN
jest fałszem, więc zwraca dokładnie to samo zgodnie z prawdą / fałszem>0
.Rozszerzenie tej sztuczki trochę dalej, możemy przywrócić do T U wtw to
>=0
w ciągu zaledwie pięciu bajtów:T¬²ªU
. Jak to działa? Spójrzmy:Jak widać,
T¬²
zwraca,NaN
jeśliT
jest ujemne; w przeciwnym razie zwracaT
. PonieważNaN
i0
oba są fałszywe, zapewnia to łatwy sposób na zresetowanie zdrowia ninjaªU
. Ta sztuczka służy również do przywrócenia życia ninja, jeśli liczba ta jest dodatnia lub"dead"
ujemna.Składając to wszystko razem:
Jeśli wejściowe jest gwarantowane jako nieujemne, a nawet dodatnie, możemy zagrać w golfa o 1 lub 4 bajtach:
źródło
JavaScript ES6,
62 6058 bajtówZaoszczędź 4 bajty dzięki @ETHproductions
Wypróbuj online (działają wszystkie przeglądarki)
Wyjaśnienie
źródło
d--&&a
zadziała, czyb.reduce(...)&&d<1?"dead":d
?map
bijereduce
w większości scenariuszy:(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i)&&d<1?"dead":d
jest 57..reduce(...)&&
by działało ze względu na.reduce
zwroty0
, nie zadziała.(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i,a)|d<1?"dead":d
zamiast tego zadziałałoby?CJam, 35 bajtów
Wypróbuj online!
źródło
Haskell,
817775 bajtówPrzykład użycia:
p 10 0 100 [-20, 5, -50, 15, -30, -30, 10]
->"8"
źródło
Pyth, 32
Zauważ, że jest wiodąca przestrzeń. To prawdopodobnie nie jest najlepsze podejście, ale była to pierwsza rzecz, jaka przyszła mi do głowy. Zmniejsza nadwyżkę danych wejściowych, dodając wartości do zdrowia ninja, zwiększając licznik i resetując zdrowie, gdy spadnie poniżej zera. Dodajemy zero na końcu listy, aby policzyć, czy ostatnia zmiana zabije ninja, a następnie po prostu sprawdź, czy ninja nie żyje. Zerowy przypadek zdrowia jest zakodowany na stałe.
Pakiet testowy
źródło
MATL, 32
Wyjaśnienie
Stos wygląda teraz tak (dla danych wejściowych
100, [-20, 5, -50, 15, -30, -30, 10]
):Pop tablicę i pętlę
Jeśli zdrowie wynosi zero, ustaw licznik śmierci na zero. Specjalna obsługa skrzynek dla
initial health = 0
.Usuń wartość przeładowania ze stosu
Jeśli licznik śmierci wynosi zero lub mniej, usuń go i wydrukuj „martwy”.
źródło
TeaScript ,
36 3431 bajtówPodobna do mojej odpowiedzi JavaScript. ostatnie 4 znaki to dekompresja ciągu „martwy”.
Internetowy interpreter TeaScript nie obsługuje wprowadzania danych z tablicy, więc musisz otworzyć konsolę i uruchomić ją, wpisując:
Wyjaśnienie
źródło
Python 2.7,
826655106 bajtówDzięki @RikerW za -16 bajtów.:(Dzięki @Maltysen za -11 bajtów.:(Najpierw wpisz zdrowie, następnie wpisz, a następnie zdarzenia w formie listy.
źródło
C # 207
Pobiera dane wejściowe za pośrednictwem strumienia argumentów. Pierwszym argumentem jest ilość zdrowia, a cała reszta to lista zdarzeń.
Wersja do odczytu / bez golfa
Przykłady:
CSharp.exe 3 => 9
CSharp.exe 100-20 5-50 15-30-30 30 => 8
(Psst.) CSharp.exe to nazwa użyta jako przykład. W rzeczywistości musisz wywoływać takie argumenty: [nazwa_programu.exe] bez kwadratowych nawiasów.
źródło