Im Vereinsfußball (auch als Fußball bezeichnet) ist ein Elfmeterschießen die zweite Maßnahme, die nach einer Verlängerung (z. B. Verlängerung des Vereinsfußballs) in einem Spiel durchgeführt werden kann, das nicht mit einem Unentschieden endet.
Bei einem Elfmeterschießen wirft der Hauptschiedsrichter eine Münze, um festzustellen, bei welchem Tor das Schießen stattfindet, und wirft dann eine weitere Münze, um festzustellen, welches Team zuerst startet. Das einzige, was für diese Herausforderung relevant ist, ist das, was dann passiert, wie unten beschrieben.
Jedes Team hat zu Beginn 5 Strafen zur Verfügung und die Strafpunktzahl ist 0-0. Wenn zu irgendeinem Zeitpunkt die verbleibenden Strafen einer Mannschaft nicht ausreichen, um die derzeit siegreiche Mannschaft zu ändern, wird das Schießen eingestellt.
Wenn es keine verbleibenden Strafen gibt, die Punkte beider Teams jedoch gleich sind, erhalten beide Teams eine zusätzliche Strafe. Dies wird wiederholt, bis die Punkte nicht mehr gleich sind.
Nach dem Ende des Schießens gewinnt das Team mit der höchsten Strafpunktzahl das Spiel.
Herausforderung
Ihre Herausforderung ist, da zwei Listen A
und B
darstellt , welche Strafen Team A und Team B erzielt bzw. zu bestimmen , ob sie eine gültige Elfmeterschießen aus darstellen. Ein Elfmeterschießen ist gültig, wenn der durch die Eingabe dargestellte Zustand erreicht werden kann, unabhängig davon, ob die Siegermannschaft ermittelt werden kann. Beachten Sie, dass Sie möglicherweise beide Szenarien testen müssen (Team A startet, Team B startet), da die Eingabe gültig ist, wenn der in der Eingabe beschriebene Status für mindestens ein Szenario erreichbar ist. Wenn die Längen der Listen unterschiedlich sind, startet das Team, das durch das längere Team dargestellt wird, zuerst (es kann nur ein Element mehr als das andere haben, und das Team der kürzeren Liste kann nicht starten, da das Team der längeren Liste dann zwei Strafen schießt hintereinander, da die kürzere Liste vorzeitig erschöpft wird).
Ausführliche Beispiele
Sie können zum folgenden Abschnitt mit den Regeln springen. Diese dienen nur dazu, die Herausforderung zu lösen.
Angenommen, Sie erhalten dieses Schießen als Eingabe, wobei -
bedeutet, dass kein Tor erzielt wurde und X
ein Tor erzielt wurde (es ist ungültig):
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.
Im Gegenteil, hier ist ein gültiges Beispiel:
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.
Ein weiteres Beispiel, diesmal mit zusätzlichen Strafen:
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.
Hier ist eine gültige Eingabe, bei der es zu früh ist, um den Gewinner zu bestimmen:
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.
Hier ist eine Eingabe, bei der sich die Listenlängen unterscheiden:
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.
Regeln
- Die Mannschaft, die zuerst schießt, kann entweder A oder B sein. Man kann nicht davon ausgehen, dass immer eine zuerst schießt.
- Die Listen haben entweder die gleiche Länge oder sie unterscheiden sich um eins.
- Sie können zwei unterschiedliche und konsistente Werte auswählen, um erzielte / nicht bewertete Strafen darzustellen.
- Die Listen können auch als Ganzzahlen dargestellt werden, die von der bijektiven Basis 2, Zeichenfolgen oder dem systemeigenen Listenformat Ihrer Sprache konvertiert wurden. Wenn ein bijektives Basis-2-Format ausgewählt wird, gelten die Eingaberegeln für die in bijektives Basis-2-Format umgewandelten Zahlen (also Ziffern
1
und2
können entweder Punkte und Punkte ohne Punktzahl oder Punkte und Punkte ohne Punktzahl bedeuten). Reguläre Binärdarstellung ist nicht zulässig , da das Vorhandensein führender Nullen in der beabsichtigten Binärdarstellung nicht festgestellt werden kann. - Das ist Code-Golf , also gewinnt die kürzeste Lösung. Bitte lassen Sie sich jedoch nicht von der Beantwortung entmutigen, auch wenn es so aussieht, als könne Ihre Sprache die Fachsprache nicht schlagen.
Testfälle
In diesen Testfällen steht a 0
für ein Nichtziel und a 1
für ein Ziel.
Format:
[Team A], [Team B]
Gültige Eingaben:
[], []
[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]
Ungültige Eingaben:
[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]
quelle
[[0,0],[1,1]]
gehe davon aus, dass (oder jeder Testfall, bei dem eine der beiden inneren Listen 2 Elemente enthält) die Wahrheit ist, da das Spiel noch läuft (genau wie die Testfälle mit[[0],[1]]
oder[[0],[]]
noch im Gange sind)?Antworten:
JavaScript (ES6),
117 112109 Byte(a)(b)
Probieren Sie es online!
Kommentiert
quelle
Python 2 ,
176169171169 Bytes-2 Bytes dank @Kevin Cruijssen
Probieren Sie es online! (Einschließlich einiger zusätzlicher Testfälle, die oben nicht aufgeführt sind.)
Erstellt eine Funktion
f
, die zwei Argumente akzeptiert (die zwei Listen mit bewerteten / nicht bewerteten Strafen) und zurückgibt,True
ob die Bewertungen möglicherweise gültig sind undFalse
nicht.Teilweise Erklärung:
Erstens ist dieexec
Konstruktion nur ein Weg, um ein paar Bytes zu sparen, indem der Ausdruck nichtlen(a+b)
mehr als einmal wiederholt werden muss. Der obige Code entspricht dem Folgenden:Update: Die neue und verbesserte Antwort ist die gleiche Anzahl von Bytes mit oder ohneexec
Trick. Aus Gründen der Einfachheit habe ich sie entfernt.Update 2: Die neue Version mit Bugfixes beinhaltet noch mehr String-Komprimierung durch Substitution und
exec
. Ja, ich verwende die%
Formatierung und a.replace
in derselben Zeichenfolge. Der obige Code entspricht:Die Hauptidee dieser Antwort ist es, die Frage in Form von "halben Punkten" zu formulieren: Jeder erfolgreiche Tritt ist ein halber Punkt und jeder gescheiterte ist ein negativer halber Punkt. Für eine Reihe von Partituren mit Länge< = 5 um fortzufahren (
not len(a+b)>10
), muss die Gesamtzahl der verbleibenden Tritte größer oder gleich dem halben Punkt Abstand zwischen den beiden Teams sein. Wenn eine Mannschaft eine Verlängerung getreten hat, muss aus verschiedenen Gründen ein halber Punkt vom Spielraum abgezogen werden. Dies kann vereinfacht werden, indem beide Seiten der Gleichung durch zwei geteilt werden. Dies ist die Funktionh
im Code (mit dem Argumentm
6).Um jedoch eine gültige Punktzahl zu erhalten, muss eine Eingabe nicht unbedingt fortführbar sein, sondern muss vor dem letzten Tritt fortführbar gewesen sein. Diese Bedingung ist gleichbedeutend mit der Aussage, dass beide Seiten 1) das letzte Mal, als sie die gleiche Anzahl von Tritten ausgeführt haben, fortfahren mussten und 2) derzeit nicht mehr als zwei halbe Punkte von ihrer Fortführbarkeit entfernt sind - hier kommt das letzte Argument ins Spiel
h
:h(a[:~-len(a+b)/2],b[:~-len(a+b)/2],6)
Testbedingung 1) undh(a,b,7)
(die7
zwei zusätzliche zulässige halbe Punkte im Rand darstellen) Testbedingung 2).Der Fall, dass jedes Team maximal fünf Mal gekickt hat, ist damit geklärt. (Erklärung wird für den anderen Fall fortgesetzt.)
Ich bezweifle, dass es in Bezug auf Golf auf niedrigem Niveau zu viel gibt, um sich zu rasieren, aber algorithmisch könnte es wahrscheinlich viel einfacher gemacht werden.
quelle
(%s-1)/2
auf~-%s/2
2 Bytes zu speichern.Jelly ,
625449 BytesProbieren Sie es online!
Beachten Sie, dass der Fußzeilencode bei tio nur dazu dient, mehrere Testfälle zu verarbeiten und Ausgaben gegen Eingaben auszudrucken.
Vielen Dank an @EriktheOutgolfer für das Abschlagen von 8 Bytes
quelle
Perl 6 , 123 Bytes
Probieren Sie es online!
Gibt Falschgeld für gültige Schießereien zurück, Wahrheit für ungültige.
Erläuterung
quelle