W piłce nożnej (zwanej także piłką nożną) rzut karny jest drugim środkiem rozstrzygającym, który może być zastosowany w meczu, który nie może zakończyć się remisem, po dogrywce (tj. Dogrywce w piłce nożnej w stowarzyszeniu).
W rzutach karnych sędzia główny rzuca monetą, aby ustalić, przy której bramce ma miejsce rzut karny, a następnie rzuca kolejną monetą, aby ustalić, która drużyna zaczyna jako pierwsza. Jednak jedyne istotne dla tego wyzwania jest to, co dzieje się wtedy, opisane poniżej.
Każda drużyna ma 5 kar dostępnych na starcie, a wynik karny to 0-0. Jeśli w dowolnym momencie pozostałe kary drużyny nie wystarczą, aby zmienić aktualnie zwycięską drużynę, strzelanie zostaje przerwane.
Jeśli nie ma już kar, ale punkty obu drużyn są równe, obie drużyny otrzymują dodatkową karę. Jest to powtarzane, dopóki punkty nie będą równe.
Po zatrzymaniu rzutów karnych drużyna z największym wynikiem karnym wygrywa.
Wyzwanie
Twoim wyzwaniem jest, biorąc pod uwagę dwie listy A
i B
reprezentujące, które rzuty karne uzyskały odpowiednio drużyna A i drużyna B, aby ustalić, czy reprezentują one rzuty karne ważne. Rzuty rożne są ważne, jeśli można osiągnąć stan reprezentowany przez dane wejściowe, niezależnie od tego, czy można ustalić zwycięską drużynę. Należy pamiętać, że być może trzeba przetestować oba scenariusze (uruchomienie drużyny A, uruchomienie drużyny B), ponieważ jeśli stan opisany na wejściu jest osiągalny dla co najmniej jednego scenariusza, dane wejściowe są prawidłowe. Jeśli długości list są różne, drużyna reprezentowana przez dłuższą startuje jako pierwsza (może mieć tylko jeden element więcej niż drugi, a drużyna krótszej listy nie może się rozpocząć, ponieważ wtedy drużyna dłuższej listy strzeliłaby dwie kary z rzędu, ponieważ krótsza lista zostanie przedwcześnie wyczerpana).
Szczegółowe przykłady
Możesz przejść do sekcji Reguły poniżej, mają one jedynie pomóc w rozwiązaniu problemu.
Załóżmy, że otrzymujesz ten rzut karny jako wkład, w którym -
oznacza to , że nie padła żadna bramka i X
że padła bramka (jest nieważna):
Team A: - X X X X
Team B: - - - - X
Assuming team A starts first:
Team A: - (0 - 0) (max possible score 4 - 5)
Team B: - (0 - 0) (max possible score 4 - 4)
Team A: X (1 - 0) (max possible score 4 - 4)
Team B: - (1 - 0) (max possible score 4 - 3)
Team A: X (2 - 0) (max possible score 4 - 3)
Team B: - (2 - 0) (max possible score 4 - 2)
Team A: X (3 - 0) (max possible score 4 - 2)
Team A already has a higher score than B could ever have, but the input hasn't
ended yet, so it's invalid if team A is first.
Assuming team B starts first:
Team B: - (0 - 0) (max possible score 5 - 4)
Team A: - (0 - 0) (max possible score 4 - 4)
Team B: - (0 - 0) (max possible score 4 - 3)
Team A: X (1 - 0) (max possible score 4 - 3)
Team B: - (1 - 0) (max possible score 4 - 2)
Team A: X (2 - 0) (max possible score 4 - 2)
Team B: - (2 - 0) (max possible score 4 - 1)
Team A already has a higher score than B could ever have, but the input hasn't
ended yet, so it's invalid if team B stars first.
The input is invalid no matter which team starts first, so it's considered
invalid.
Przeciwnie, oto poprawny przykład:
Team A: X X X
Team B: - - -
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: X (2 - 0) (max possible score 5 - 4)
Team B: - (2 - 0) (max possible score 5 - 3)
Team A: X (3 - 0) (max possible score 5 - 3)
Team B: - (3 - 0) (max possible score 5 - 2)
It can be determined that team A wins, however the input has ended, so it's
valid if team A starts first. Therefore, the input is valid.
Kolejny przykład, tym razem z dodatkowymi karami:
Team A: X - X - - - X -
Team B: - X X - - - X X
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: - (1 - 0) (max possible score 4 - 4)
Team B: X (1 - 1) (max possible score 4 - 4)
Team A: X (2 - 1) (max possible score 4 - 4)
Team B: X (2 - 2) (max possible score 4 - 4)
Team A: - (2 - 2) (max possible score 3 - 4)
Team B: - (2 - 2) (max possible score 3 - 3)
Team A: - (2 - 2) (max possible score 2 - 3)
Team B: - (2 - 2) (max possible score 2 - 2)
First 5 penalties result in a tie, so we move on to extra penalties.
Team A: -, Team B: - (2 - 2)
Team A: X, Team B: X (3 - 3)
Team A: -, Team B: X (3 - 4)
It can be determined that team B wins, however the input has ended, so it's
valid if team A starts first. Therefore, the input is valid.
Oto prawidłowe dane wejściowe, w których jest zbyt wcześnie, aby określić zwycięzcę:
Team A: X X - -
Team B: - X - X
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: X (2 - 0) (max possible score 5 - 4)
Team B: X (2 - 1) (max possible score 5 - 4)
Team A: - (2 - 1) (max possible score 4 - 4)
Team B: - (2 - 1) (max possible score 4 - 3)
Team A: - (2 - 1) (max possible score 3 - 3)
Team B: X (2 - 2) (max possible score 3 - 3)
The input has ended before the winner can be determined, so it's valid if team A
starts first. Therefore, the input is valid.
Wreszcie, oto dane wejściowe, w których długości list różnią się:
Team A: - - -
Team B: X X - X
Since team B shot more penalties, it starts first:
Team B: X (0 - 1) (max possible score 5 - 5)
Team A: - (0 - 1) (max possible score 4 - 5)
Team B: X (0 - 2) (max possible score 4 - 5)
Team A: - (0 - 2) (max possible score 3 - 5)
Team B: - (0 - 2) (max possible score 3 - 4)
Team A: - (0 - 2) (max possible score 2 - 4)
Team B: X (0 - 3) (max possible score 2 - 4)
It can be determined that team B wins, however the input has ended, so it's
valid.
Zasady
- Drużyna, która strzela jako pierwsza, może być A lub B, nie można zakładać, że zawsze będzie strzelać jako pierwsza.
- Listy będą miały tę samą długość lub ich długości będą się różnić o jeden.
- Możesz wybrać dowolne dwie odrębne i spójne wartości, które będą reprezentować strzelone / niepunkcjonowane kary.
- Listy mogą być również reprezentowane jako liczby całkowite przekonwertowane z bijective base 2, string lub rodzimego formatu listy twojego języka. Jeśli wybrany jest format bijective base 2, reguły wprowadzania mają zastosowanie do liczb przekonwertowanych na bijective base 2 (więc cyfry
1
i2
mogą oznaczać odpowiednio ocenę punktową i nieprzypisaną lub nieprzypisaną i ocenę punktową). Zwykły plik binarny jest niedozwolony , ponieważ nie można określić obecności zer wiodących w zamierzonej reprezentacji binarnej. - To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie. Prosimy jednak nie zniechęcać się do odbierania odpowiedzi, nawet jeśli wydaje się, że Twój język nie jest w stanie „pokonać języków specjalistycznych”.
Przypadki testowe
W tych przypadkach testowych a 0
będzie stanowić cel bez celu, a a 1
będzie stanowić cel.
Format:
[Team A], [Team B]
Prawidłowe dane wejściowe:
[], []
[0], [0]
[0], [1]
[1], [1]
[0], []
[1, 1, 1, 1], [0, 0, 1, 1]
[0, 1, 1, 1, 1], [0, 1, 1, 0]
[0, 0, 0, 0, 1], [0, 0, 0, 1, 0]
[0, 0, 0, 0, 1], [0, 0, 0, 1]
[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1]
[0, 1, 1, 1, 1], [0, 1, 1, 0, 1]
[1, 1, 1], [0, 0, 0]
[1, 1, 1, 1], [0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Nieprawidłowe dane wejściowe:
[0, 1, 1, 1, 1], [0, 1, 1, 0, 0]
[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 1]
[1, 1, 1, 0], [0, 0, 0]
[1, 1, 1, 1], [0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[1, 0, 1, 0, 1], [0, 1, 0, 1, 0, 1]
[0, 0, 0, 0, 1], [0, 1, 1, 1, 0]
źródło
[[0,0],[1,1]]
(lub jakikolwiek przypadek testowy, w którym jedna z dwóch wewnętrznych list zawiera 2 elementy) jest prawdą, ponieważ gra wciąż trwa (podobnie jak przypadki testowe z[[0],[1]]
lub[[0],[]]
wciąż trwają)?Odpowiedzi:
JavaScript (ES6),
117 112109 bajtów(a)(b)
Wypróbuj online!
Skomentował
źródło
Python 2 ,
176169171169 bajtów-2 bajty dzięki @Kevin Cruijssen
Wypróbuj online! (W tym dodatkowe przypadki testowe niewymienione powyżej).
Tworzy funkcję,
f
która pobiera dwa argumenty (dwie listy kar punktowanych / nieskalowanych) i zwraca,True
jeśli wyniki są możliwe iFalse
inne.Częściowe wyjaśnienie:
Po pierwsze,exec
konstrukcja jest tylko sposobem na zaoszczędzenie kilku bajtów, bez konieczności powtarzania wyrażenialen(a+b)
więcej niż jeden raz. Powyższy fragment kodu odpowiada następującemu:Aktualizacja: nowa i ulepszona odpowiedź ma tę samą liczbę bajtów z oszustwem lub bezexec
, więc dla uproszczenia usunąłem go.Aktualizacja 2: Nowa wersja z poprawioną usterką obejmuje jeszcze większą kompresję łańcuchów poprzez podstawienie i
exec
. Tak, używam%
formatowania i a.replace
na tym samym ciągu. Powyższy kod jest równoważny z:Główną ideą tej odpowiedzi jest sformułowanie pytania w kategoriach „pół punktu”: każde udane kopnięcie jest pół punktu, a każde nieudane jest ujemne pół punktu. Dla zestawu wyników o długości< = 5 aby zachować ciągłość (
not len(a+b)>10
), całkowita liczba pozostałych rzutów musi być większa lub równa marginesowi połowy punktów między dwiema drużynami. Kiedy jedna drużyna wykopała dodatkowy czas, z różnych powodów należy odjąć pół punktu od marginesu, więc można to uprościć, dzieląc liczby całkowite po obu stronach równania na dwa. To jest funkcjah
w kodzie (z argumentemm
równym 6).Jednak aby być prawidłowym zestawem wyników, dane wejściowe nie muszą być ściśle kontynuowane, ale muszą być kontynuowane przed wykonaniem ostatniego rzutu. Ten warunek jest równoznaczny z twierdzeniem, że 1) musi być kontynuowany, gdy obie strony kopały tyle razy tyle razy, i 2) obecnie musi znajdować się w odległości dwóch pół punktu, aby być kontynuowanym - w tym miejscu pojawia się ostatni argument
h
:h(a[:~-len(a+b)/2],b[:~-len(a+b)/2],6)
warunek testu 1) ih(a,b,7)
(co7
stanowi dodatkowe dwa dopuszczalne pół punktu na marginesie) warunek testu 2).Tym samym rozwiązano przypadek, w którym każda drużyna kopnęła maksymalnie pięć razy. (Wyjaśnienie będzie kontynuowane w drugim przypadku.)
Jeśli chodzi o grę w golfa na niskim poziomie, wątpię, aby było za dużo do ogolenia, ale algorytmicznie można by to zrobić o wiele prostiej.
źródło
(%s-1)/2
w golfa,~-%s/2
aby zaoszczędzić 2 bajty.Galaretka ,
625449 bajtówWypróbuj online!
Zauważ, że kod stopki w tio służy tylko do obsługi wielu przypadków testowych i drukowania wyników względem danych wejściowych.
Dzięki @EriktheOutgolfer za grę w golfa z 8 bajtów
źródło
Perl 6 , 123 bajtów
Wypróbuj online!
Zwraca falsey dla ważnych rzutów, prawdę mówiąc dla nieważnych.
Wyjaśnienie
źródło