Twoje zadanie jest proste: powiedz mi, kto wygrywa bitwę liter.
Żołnierze
W tej bitwie są trzy różne „wojska”, podsumowane w tej tabeli.
name | health | damage
A 25 25
B 100 5
C 10 50
Możesz użyć dowolnych trzech unikalnych znaków do reprezentowania żołnierzy, ale musisz określić, czy nie są to te litery.
Walka
Załóżmy, że mamy próbną bitwę:
ABC # army 1
CBA # army 2
Każda armia wielokrotnie strzela do lewej jednostki, aż do śmierci; następnie przechodzą do oddziału po prawej i powtarzają. Więc armii 2 ataki A
w armii 1, dopóki A
nie żyje, a następnie przejść do B
, następnie C
. 1 Armia atakuje C
pierwszy, potem B
, potem A
. Załóżmy, że armie atakują w tym samym czasie, a zatem wojska zawsze będą strzelały, jeśli były żywe przed rundą i mogą się nawzajem zabijać. Strzelają w kolejności od lewej do prawej.
Bitwa przebiegałaby w następujący sposób:
ABC
CBA
BC # A (25 hp) killed by C (-50 hp), B (100 hp) attacked by B (-5 hp) and A (-25 hp), has 70 hp
BA # C (10 hp) killed by A (-25 hp), B (100 hp) attacked by B (-5 hp) and C (-50 hp), has 45 hp
BC # B (70 hp) attacked by B (-5 hp) and A (-25 hp), has 40 hp
A # B (45 hp) killed by B (-5 hp) and C (-50 hp)
BC # B (40 hp) attacked by A (-25 hp), has 15 health
# A (25 hp) killed by B (-5 hp) and C (-50 hp), army 2 dead
Dlatego armia 1 wygrywa bitwę!
Wejście
Dwie struny, pierwsza reprezentująca armię 1 i druga armię 2. Nie są koniecznie tej samej wielkości (bo kto powiedział, że to będzie uczciwa walka?)
Wynik
Dowolne trzy unikalne, stałe wartości reprezentujące zwycięstwo armii 1, zwycięstwo armii 2 lub mało prawdopodobne remis. Tak, ostatnie oddziały mogą się nawzajem zabić, co kończy się remisem.
Bitwy
ABC
CBA
Army 1
CCCCC
CCCCC
Tie
CABCAB
ABBABBA
Army 2
Obowiązują standardowe luki . Musisz przesłać pełny program.
To jest golf-golfwygrywa najkrótsze rozwiązanie.
A
bijeB
iC
krawatyB
iA
krawatyC
. Zmiana którejkolwiek zA
tych wartości20
spowoduje, że będzie ona powiązanaB
.Odpowiedzi:
Pyth
14597 bajtówTrochę mniej naiwny niż wcześniej.
Wypróbuj online!
Objaśnienia:
Wytnijmy program na kilka części.
Słownik
Y
jest:{'A': [25, 25], 'C': [10, 50], 'B': [100, 5]}
. Następnie:W tym momencie
K
znajduje się lista par, która reprezentuje pierwszą armię. Każda para z tej listy jest listem armii i dotyczy(health, damage)
tego listu.J
jest dokładnie taki sam, ale dla drugiej armii.g
to funkcja, która bierze dwie armie i zadaje obrażenia zadane przez drugą armię pierwszej. Teraz:Kiedy pętla while się skończy
K
i będzieJ
miała swoją ostateczną wartość. Jeśli oba są puste, to remis; w przeciwnym razie wygrywa niepusta armia. Jest to obsługiwane przez ostatni fragment kodu:Otóż to!
źródło
Haskell ,
199193179176171 bajtówWypróbuj online!
Mała sztuczka: podzielił wszystkie statystyki armii przez 5.
źródło
C #, 446 bajtów
Wersja sformatowana:
Wykazuje 1, jeśli armia 1 wygra, 2 dla armii 2 i 0 dla remisu
źródło
int[]
że myślę, że możesz je połączyć, `` <= 0` jest tak samo jak na<1
pewno? Potrzebujesztry-catch
?JavaScript (ES6) -
316269 bajtówJestem pewien, że można grać w golfa jak diabli, ale to właśnie wymyśliłem :) Udało mi się jednak zgolić 47 bajtów!
Wyniki 0 dla remisu, 1 dla Drużyny 1 i 2 dla Drużyny 2.
Czytelny :
Demo :
źródło