Als Fan einer höchstens mäßig erfolgreichen Fußball- BE- Mannschaft frage ich mich gegen Ende der Saison oft, ob meine Lieblingsmannschaft noch theoretische Chancen hat, Meister zu werden. Ihre Aufgabe bei dieser Herausforderung ist es, diese Frage für mich zu beantworten.
Eingang
Sie erhalten drei Eingaben: die aktuelle Tabelle, die Liste der verbleibenden Spiele und die aktuelle Position der Mannschaft, an der wir interessiert sind.
Eingabe 1: Die aktuelle Tabelle , eine Folge von Zahlen, die die i- te Zahl sind, sind die Punkte, die Team i bisher gesammelt hat . Beispielsweise [93, 86, 78, 76, 75]
codiert die Eingabe
die folgende Tabelle (nur die letzte Spalte ist von Bedeutung):
Eingabe 2 : Die verbleibenden Übereinstimmungen , eine Folge von Tupeln, wobei jedes Tupel ( i , j ) für eine verbleibende Übereinstimmung zwischen Team i und j steht . Im obigen Beispiel würde eine zweite Eingabe von [(1,2), (4,3), (2,3), (3,2), (1,2)]
bedeuten, dass die verbleibenden Übereinstimmungen sind:
Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham
Eingabe 3: Die aktuelle Position des Teams, an dem wir interessiert sind. Eine Eingabe 2
für das obige Beispiel würde beispielsweise bedeuten, dass wir wissen möchten, ob Tottenham noch Champion werden kann.
Ausgabe
Für jede verbleibende Übereinstimmung der Form ( i , j ) gibt es drei mögliche Ergebnisse:
- Team i gewinnt: Team i erhält 3 Punkte , Team j erhält 0 Punkte
- Team j gewinnt: Team i erhält 0 Punkte , Team j erhält 3 Punkte
- Unentschieden: Team i und j erhalten beide 1 Punkt
Sie müssen einen Wahrheitswert ausgeben, wenn für alle verbleibenden Spiele ein Ergebnis vorliegt, sodass am Ende kein anderes Team mehr Punkte hat als das in der 3. Eingabe angegebene Team. Andernfalls geben Sie einen falschen Wert aus.
Beispiel : Betrachten Sie die beispielhafte Eingabe aus dem obigen Abschnitt:
Eingang 1 = [93, 86, 78, 76, 75]
, Eingang 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)]
, Eingang 3 =2
Wenn das Team 2
alle verbleibenden Spiele gewinnt (dh (1,2), (2,3), (3,2), (1,2)
), erhält es 4 * 3 = 12 zusätzliche Punkte; Keines der anderen Teams erhält Punkte aus diesen Spielen. Nehmen wir an, das andere verbleibende Spiel (dh (4,3)
) ist ein Unentschieden. Dann wären die Endergebnisse:
Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75
Dies bedeutet, dass wir für die verbleibenden Spiele bereits einige Ergebnisse erzielt haben 2
, sodass kein anderes Team mehr Punkte als das Team hat. Daher muss die Ausgabe für diese Eingabe wahr sein.
Einzelheiten
- Sie können annehmen, dass die erste Eingabe eine geordnete Sequenz ist, dh für i < j ist der i- te Eintrag gleich oder größer als der j- te Eintrag. Die erste Eingabe kann als Liste, Zeichenfolge oder dergleichen verwendet werden.
- Sie können die zweite Eingabe als Zeichenfolge, Liste von Tupeln oder dergleichen verwenden. Alternativ können Sie es als zweidimensionales Array verwenden,
a
wobeia[i][j]
die Anzahl der Einträge des Formulars(i,j)
in der Liste der verbleibenden Übereinstimmungen angegeben ist. Zum Beispiela[1][2] = 2, a[2][3] = 1, a[3][2] = 1, a[4][3] = 1
entspricht[(1,2), (4,3), (2,3), (3,2), (1,2)]
. - Für die zweite und dritte Eingabe können Sie eine 0-Indizierung anstelle einer 1-Indizierung annehmen.
- Sie können die drei Eingaben in beliebiger Reihenfolge vornehmen.
Bitte geben Sie das genaue Eingabeformat an, das Sie in Ihrer Antwort ausgewählt haben.
Seitenknoten : Das dieser Herausforderung zugrunde liegende Problem hat sich in " Fußball-Eliminierung ist nach der 3-Punkte-Regel schwer zu entscheiden " als NP-vollständig erwiesen . Interessanterweise wird das Problem in der Polynomzeit lösbar, wenn nur zwei Punkte für einen Sieg vergeben werden.
Testfälle
Alle Testfälle im Format sind Input1
, Input2
, Input3
.
Wahrheit:
[93, 86, 78, 76, 75]
,[(1,2), (4,3), (2,3), (3,2), (1,2)]
,2
[50]
,[]
,1
[10, 10, 10]
,[]
,3
[15, 10, 8]
,[(2,3), (1,3), (1,3), (3,1), (2,1)]
,2
Falsch:
[10, 9, 8]
,[]
,2
[10, 9, 9]
,[(2,3), (3,2)]
,1
[21, 12, 11]
,[(2,1), (1,2), (2,3), (1,3), (1,3), (3,1), (3,1)]
,2
Gewinner
Dies ist Code-Golf , daher gewinnt die kürzeste richtige Antwort (in Bytes). Der Gewinner wird eine Woche nach der ersten richtigen Antwort ausgewählt.
quelle
Antworten:
Haskell (Lambdabot) , 84 Bytes
Vielen Dank an @bartavelle für das Speichern eines Bytes.
Fügen Sie ohne Lambdabot 20 Bytes
import Control.Lens
plus eine neue Zeile hinzu.Die Funktion nimmt ihre Argumente in der gleichen Reihenfolge wie im OP, 0-indiziert beschrieben. Das zweite Argument (die Liste der verbleibenden Übereinstimmungen) ist eine flache Liste von Indizes (z . B.
[1,2,4,1]
entspricht[(Team 1 vs Team 2), (Team 4 vs Team 1)]
).Die Regeln sind etwas vage, ob dies erlaubt ist oder nicht. Wenn dies nicht zulässig ist, kann die Funktion Eingaben in dem in den Beispielen angegebenen Format vornehmen - einer Liste von Tupeln. In diesem Fall fügen Sie 2 Bytes zu dieser Partitur-Lösung, wegen Ersatz
a:b:r
mit(a,b):r
.Erläuterung:
Die erste Zeile definiert eine Infix-Funktion
!
aus drei Variablen vom Typ(!) :: Int -> Int -> [Int] -> [Int]
, die den Wert an einem bestimmten Index in einer Liste erhöht. Da Code häufig leichter zu verstehen ist als Wörter (und die Haskell-Syntax seltsam sein kann), ist hier eine Python-Übersetzung:Die zweite Zeile definiert eine weitere Infix-Funktion
?
, die ebenfalls aus drei Variablen besteht (die Challenge-Eingabe). Ich werde es hier besser lesbar umschreiben:Dies ist eine rekursive Implementierung einer umfassenden Suche. Es wird die Liste der verbleibenden Spiele wiederholt, wobei auf die drei möglichen Ergebnisse verzweigt wird. Sobald die Liste leer ist, wird überprüft, ob unser Team die maximale Anzahl von Punkten hat oder nicht. Auch in (nicht idiomatischem) Python ist dies:
Probieren Sie es online aus!
* Leider unterstützt TiO Lens nicht, sodass dieser Link nicht ausgeführt wird.
quelle
[]
mit_
.Microsoft SQL Server, 792 Byte
Die Funktion gibt 0 für ein falsches Ergebnis und mehr als 0 für ein wahres Ergebnis zurück.
Der ganze Ausschnitt:
Überprüfen Sie es online!
quelle
Python 2,
242221 BytesProbieren Sie es online aus!
Nach einem ersten Durchgang mit grundlegendem Golfdenken. Nimmt Eingaben mit 0-basierter Indizierung vor ; Testfälle in TIO passen dies über die Funktion an
F
.Die
product([0,1,2],repeat=len(m))
Iteration bewertet die möglichen Ergebnisse über Unentschieden / Gewinn / Verlust für jedes Spiel, es sei denn, das interessierende Team (TOI) ist Teil des Spiels (bei dem immer davon ausgegangen wird, dass der TOI gewinnt).quelle
JavaScript (ES6), 145 Byte
Nimmt die Score-Eingabe als Array (
[93,86,78,76,75]
), die kommenden Spiele als Array von Arrays mit zwei Werten ([[0,1],[3,2],[1,2],[2,1],[0,1]]
) und den Teamindex als Ganzzahl (1
). Alles ist 0-indiziert.Test-Snippet
Code-Snippet anzeigen
quelle