Cel:
Biorąc pod uwagę dwa stworzenia z opcjonalnymi zdolnościami bojowymi, zwracaj unikalne, ale spójne wartości, które reprezentują, które stworzenia zginęły, jeśli w ogóle.
Wejście:
#Longest form:
[[P,T, "<abilities>"], [P,T, "<abilities>"]]
#Shortest form:
[[P,T], [P,T]]
Każde stworzenie otrzyma w formie [P,T,"<abilities>"]
. Będzie w formie [P,T]
, [P,T,""]
lub [P,T,0]
jeśli nie ma zdolności, twój wybór w formie. P jest liczbą całkowitą> = 0, T jest liczbą całkowitą> = 1. <abilities>
jest podzbiorem "DFI"
lub może być reprezentowany przez jeden numer / ciąg bitów, jeśli chcesz. Kolejność flag zależy również od Ciebie.
Mechanika walki:
Każde stworzenie ma dwie statystyki, Moc i Wytrzymałość w tej kolejności oraz opcjonalne umiejętności. Moc stworzenia wynosi> = 0. Wytrzymałość stworzenia wynosi> = 1.
Każde stworzenie wyrządzi jednocześnie obrażenia równe swojej sile przeciwnemu stworzeniu (chyba, że ktoś zadaje pierwsze ciosy). Jeśli wartość jest większa lub równa wytrzymałości przeciwnika, umrze (chyba że jest niezniszczalny).
Przykład: Alice jest a 2/2
, Bob jest 3/4
oboje bez umiejętności. Alice zada 2 obrażenia Bobowi i w zamian otrzyma 3 obrażenia. Wytrzymałość Alicji wynosi 2, więc umrze, wytrzymałość Boba wynosi 4, więc będzie żyć.
Istnieją tylko 3 opcjonalne zdolności, które rozważymy w tym celu (chociaż w grze jest ich więcej). Będą to flagi jednego znaku:
- [D] eathtouch: Każda ilość obrażeń (X> 0) jest uważana za śmiertelną.
- [F] pierwsze uderzenie: Najpierw zada obrażenia, zdolne zabić drugie stworzenie, zanim będzie mogło zaatakować. Jeśli oba stworzenia mają Pierwsze Uderzenie, rozstrzygnij walkę jak zwykle.
- [I] niezniszczalny: Żadna ilość obrażeń nie jest uważana za śmiertelną, w tym Deathtouch.
Wynik:
Dowolna spójna wartość dla każdego z następujących czterech przypadków. Proszę podać cztery wartości w swojej odpowiedzi. Przykładowa wartość zwracana w parens:
- Żadne stworzenie nie umarło (0)
- 1. istota zmarła (1)
- 2. istota zmarła (2)
- Oba stworzenia umarły (3)
Zasady:
- Wejście ma zagwarantowane dwa poprawnie sformatowane stworzenia.
- Jeśli używasz postaci do umiejętności, możesz założyć, że są one uporządkowane tak, jak chcesz, ale w razie potrzeby opublikuj kolejność ich użycia.
- Jeśli używasz liczby / ciągu bitowego dla umiejętności, opublikuj kodowanie, którego używasz. np .:
111
jestD/F/I
,7
jestD/F/I
itp. - Jeśli stwór nie ma umiejętności, można go również przyjąć jako
[P,T, ""]
ekwiwalent liczbowy lub ekwiwalent - Standardowe luki zabronione
- To jest golf golfowy, więc wygrywa najkrótszy kod.
Przykłady:
Input: [[2,2], [1,1]]
Output: 2nd Dies
Input: [[0,2], [0,1]] #0/2 vs 0/1
Output: Neither Die
Input: [[2,1], [2,1]] #2/1 vs 2/1
Output: Both Die
Input: [[1,1, "D"], [2,2]] #1/1 Deathtoucher vs 2/2
Output: Both Die
Input: [[2,2], [0,1, "D"]] #2/2 vs 0/1 Deathtoucher
Output: 2nd Dies
Input: [[2,2], [1,1, "DF"]] #2/2 vs 1/1 Deathtouch First-striker
Output: 1st Dies
Input: [[0,2, "D"], [0,1, "DF"]] #0/2 Deathtoucher vs 0/1 Deathtouch First-striker
Output: Neither Die
Input: [[2,2], [2,2, "F"]] #2/2 vs 2/2 First-striker
Output: 1st Dies
Input: [[2,2, "I"], [1,1, "DF"]] #2/2 Indestructible vs 1/1 Deathtouch First-striker
Output: 2nd Dies
Input: [[9999,9999], [1,1, "I"]] #9999/9999 vs 1/1 Indestructible
Output: Neither Die
Input: [[2,2, "F"], [1,1, "F"]] #2/2 First-Striker vs 1/1 First-Striker
Output: 2nd Dies
#9/9 Deathtouch, Indestructible First-Striker vs 9/9 Deathtouch, Indestructible First-Striker
Input: [[9,9, "DFI"], [9,9, "DFI"]]
Output: Neither Die
źródło
D => 0, F => 1, I => 2
Odpowiedzi:
Perl 5 , 248 bajtów
... bez spacji i znaków nowej linii:
Wypróbuj online!
Moja nie golfowa wersja z dziesięcioma testami z @Veskah (OP), testy przechodzą:
źródło
JavaScript,
137125120111 bajtówUżywam liczb bitmapowych dla zdolności D = 4 F = 2 I = 1
"DFI"
byłoby7
. Mój dorobek to Ani umarł0
, 1. umarł1
, 2. umarł2
, oboje zmarli3
.Testy z:
To był mój pierwszy działający kod
Które zredukowałem do tego półproduktu:
źródło
JavaScript (ES6),
8376 bajtówPrzyjmuje dane wejściowe jako 6 różnych argumentów: 2 x (Moc, Wytrzymałość, Zdolności). Zdolności są oczekiwane jako maski bitowe z:
Wypróbuj online!
Skomentował
źródło
C (gcc) ,
11411395 bajtówDużo gry w golfa dzięki CeCatcat i Logern.
Kompiluj z
-DZ=P,T,F,p,t,f)
.Wypróbuj online!
Sprawdzamy (niezależnie, z powodu symetrii mechaniki walki), czy każde ze stworzeń przetrwa walkę, co dzieje się, jeśli jedno z nich jest prawdziwe:
(Poprzednie warunki są ważniejsze).
Dane wejściowe to moc i wytrzymałość jako liczby całkowite oraz umiejętności jako pole bitowe (1 = Niezniszczalny, 2 = Śmierć, 4 = Pierwsze uderzenie), wyjście to także pole bitowe (1 = Pierwsze stworzenie przeżyje, 2 = Drugie stworzenie przeżyje).
źródło
-DZ=P,T,F,p,t,f)
96 bajtów - wypróbuj online!P=…
zamiastreturn …
i usuwanie nowej linii prowadzi do 85 bajtów.&&
,||
z bitowe&
,|
Retina 0.8.2 , 123 bajtów
Wypróbuj online! Link obejmuje przypadków testowych, chociaż mam podstawione
9
za99999
prędkość. Wejście używa liter,DFI
chociażD
musi poprzedzaćI
. Wyjście ma format1
przetrwania i0
śmierci. Wyjaśnienie:Konwertuj statystyki na unary.
Tymczasowo wymień statystyki.
Dwa
F
s anulowane.Death Touch obniża Wytrzymałość przeciwnika do 1.
Niezniszczalny obniża Moc przeciwnika do 0.
Cofnij Wytrzymałość z powrotem, teraz masz P2, T1, F1; P1, T2, F2
Jeśli Wytrzymałość jest wyższa niż Moc przeciwnika, wówczas przetrwa.
Jeśli oboje zginą, przetrwa ten z Pierwszym Uderzeniem.
W przeciwnym razie First Strike nie ma znaczenia.
źródło
C ++,
177131127121 bajtówOto moje nie tak krótkie rozwiązanie w C ++. Zdolności to 3 bity dla każdego stworzenia:
I po prostu zwraca 0 : jeśli nikt nie umiera, 1 : jeśli pierwsze stworzenia umierają, 2 : jeśli drugie stworzenie umiera, i 3 : jeśli oba stworzenia umierają.
Wypróbuj online!
C ++,
8581 bajtów (alternatywnie)Lekko oszukując i przechwytując zmienne w lambda i nie przekazując ich jako argumentów, można uzyskać do 81 bajtów. Nie wiem, czy jest to akceptowalne rozwiązanie, więc zamieszczam je jako alternatywę.
Wypróbuj online!
źródło
Perl 5, 245 bajtów
Biegnij z
-lapE
Nie golfowany:
„Deathtouch” przekłada się na „twoja moc jest teraz mnożona przez wytrzymałość twojego wroga”, a „niezniszczalny” przekłada się na „siła twojego wroga jest teraz zerowa”, przy czym ten ostatni ma pierwszeństwo. Kod uruchamia dwie rundy, jedną, w której atakują tylko pierwsi napastnicy, a drugą, w której atakują tylko nie-pierwsi. Jeśli pierwsza runda zakończy się śmiercią, druga runda nie nastąpi. Ponieważ już na początku zajmowaliśmy się dotykiem śmierci i niezniszczalnym, „śmierć” jest tak prosta, jak sprawdzenie, czy wytrzymałość jest większa od zera, czy nie.
źródło