Jako fan najbardziej udanego zespołu piłkarskiego BE , pod koniec sezonu często zastanawiam się, czy moja ulubiona drużyna ma jeszcze teoretyczną szansę na zostanie mistrzem. Twoim zadaniem w tym wyzwaniu jest udzielenie mi odpowiedzi na to pytanie.
Wejście
Otrzymasz trzy dane wejściowe: bieżącą tabelę, listę pozostałych meczów oraz aktualną pozycję drużyny, którą jesteśmy zainteresowani.
Wejście 1: aktualna tabela , sekwencja numerów były i numer -ty są punkty zdobyte przez zespół i tak daleko. Na przykład dane wejściowe
[93, 86, 78, 76, 75]
kodują następującą tabelę (ważna jest tylko ostatnia kolumna):
Wejście 2 : Pozostałe mecze , sekwencja krotek, w której każda krotka ( i , j ) oznacza pozostały mecz między drużyną i i j . W powyższym przykładzie drugie wejście [(1,2), (4,3), (2,3), (3,2), (1,2)]
oznaczałoby, że pozostałe dopasowania to:
Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham
Wejście 3: aktualna pozycja . Zespołu jesteśmy zainteresowani Na przykład wejście2
na powyższym przykładzie oznaczałoby, że chcielibyśmy wiedzieć, czy Tottenham wciąż może zostać mistrzem.
Wynik
Dla każdego pozostałego dopasowania formularza ( i , j ) istnieją trzy możliwe wyniki:
- Drużyna i wygrywa: Drużyna i otrzymuje 3 punkty , drużyna j dostaje 0 punktów
- Drużyna j wygrywa: Drużyna i otrzymuje 0 punktów , drużyna j otrzymuje 3 punkty
- Draw: Zespół I i J zarówno dostać 1 punkt
Musisz podać prawdziwą wartość, jeśli jest jakiś wynik dla wszystkich pozostałych gier, tak że na końcu żadna inna drużyna nie ma więcej punktów niż drużyna określona w 3. danych wejściowych. W przeciwnym razie wypisz wartość fałszowania.
Przykład : Rozważ przykładowe dane wejściowe z powyższej sekcji:
Wejście 1 = [93, 86, 78, 76, 75]
, Wejście 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)]
, Wejście 3 =2
Jeśli drużyna 2
wygra wszystkie pozostałe mecze (tj. (1,2), (2,3), (3,2), (1,2)
), Otrzyma 4 * 3 = 12 dodatkowych punktów; żadna z pozostałych drużyn nie otrzymuje żadnych punktów za te mecze. Powiedzmy, że drugi pozostały mecz (tj. (4,3)
) To remis. Wtedy końcowe wyniki byłyby następujące:
Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75
Oznacza to, że znaleźliśmy już pewne wyniki dla pozostałych meczów, dzięki czemu żadna inna drużyna nie ma więcej punktów niż drużyna 2
, więc wyniki dla tego wkładu muszą być zgodne z prawdą.
Detale
- Możesz założyć, że pierwszym wejściem jest sekwencja uporządkowana, tj. Dla i < j , i -ty wpis jest równy lub większy niż j- ty wpis. Pierwsze dane wejściowe mogą być traktowane jako lista, ciąg znaków lub tym podobne.
- Drugie wejście możesz wziąć jako ciąg, listę krotek lub tym podobne. Alternatywnie, możesz potraktować to jako tablicę dwuwymiarową,
a
gdziea[i][j]
jest liczba wpisów formularza(i,j)
na liście pozostałych dopasowań. Na przykłada[1][2] = 2, a[2][3] = 1, a[3][2] = 1, a[4][3] = 1
odpowiada[(1,2), (4,3), (2,3), (3,2), (1,2)]
. - W przypadku drugiego i trzeciego wejścia można założyć indeksowanie 0 zamiast indeksowania 1.
- Możesz wziąć trzy dane wejściowe w dowolnej kolejności.
Podaj dokładny format wejściowy wybrany w odpowiedzi.
Węzeł boczny : problem leżący u podstaw tego wyzwania okazał się być NP-zupełny w „ Eliminacja piłki nożnej jest trudna do podjęcia na podstawie reguły 3-punktowej ”. Co ciekawe, jeśli za zwycięstwo zostaną przyznane tylko dwa punkty, problem staje się rozwiązywalny w czasie wielomianowym.
Przypadki testowe
Wszystkie przypadki testowe są w formacie Input1
, Input2
, Input3
.
Prawda:
[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
Falsy:
[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
Zwycięzca
To jest golf golfowy , więc wygrywa najkrótsza poprawna odpowiedź (w bajtach). Zwycięzca zostanie wybrany tydzień po opublikowaniu pierwszej poprawnej odpowiedzi.
źródło
Odpowiedzi:
Haskell (Lambdabot) , 84 bajtów
Dzięki @bartavelle za uratowanie mi bajtu.
Bez Lambdabot dodaj 20 bajtów
import Control.Lens
plus znak nowej linii.Funkcja przyjmuje argumenty w tej samej kolejności, jak opisano w OP, indeksowane 0. Drugim argumentem (lista pozostałych pojedynków) jest płaska lista indeksów (np.
[1,2,4,1]
Odpowiada[(Team 1 vs Team 2), (Team 4 vs Team 1)]
).Zasady są nieco niejasne, czy jest to dozwolone. Jeśli nie jest to dozwolone, funkcja może przyjmować dane wejściowe w formacie podanym w przykładach - listę krotek. W takim przypadku dodaj 2 bajty do wyniku tego rozwiązania ze względu na zastąpienie
a:b:r
go(a,b):r
.Wyjaśnienie:
Pierwszy wiersz definiuje funkcję infix
!
trzech zmiennych typu(!) :: Int -> Int -> [Int] -> [Int]
, która zwiększa wartość przy danym indeksie na liście. Ponieważ często kod jest łatwiejszy do zrozumienia niż słowa (a ponieważ składnia Haskella może być dziwna), oto tłumaczenie Pythona:Drugi wiersz definiuje kolejną funkcję infix
?
, również trzech zmiennych (wejście wyzwalające). Przepiszę to bardziej czytelnie tutaj:Jest to rekurencyjna implementacja wyczerpującego wyszukiwania. Powtarza się na liście pozostałych gier, rozgałęziając się na trzech możliwych wynikach, a następnie, gdy lista jest pusta, sprawdza, czy nasza drużyna ma maksymalną liczbę punktów. Ponownie w (nie-idiomatycznym) Pythonie jest to:
Wypróbuj online!
* Niestety, TiO nie obsługuje Obiektywu, więc ten link tak naprawdę się nie uruchomi.
źródło
[]
z_
.Microsoft SQL Server, 792 bajtów
Funkcja zwraca 0 dla wyniku fałszywego i więcej niż 0 dla wyniku zgodnego z prawdą.
Cały fragment:
Sprawdź to online!
źródło
Python 2,
242221 bajtówWypróbuj online!
Po pierwszym przejściu z podstawowym golfowym myśleniem. Pobiera dane wejściowe z indeksowaniem opartym na 0 ; przypadki testowe w TIO dostosowują się do tego za pomocą funkcji
F
.product([0,1,2],repeat=len(m))
Iteracja ocenia możliwe wyniki na tie / WIN / strata za każdym meczu, chyba że zespół-of-interest (TOI) jest częścią meczu (w którym, TOI jest zawsze zakłada się wygrać).źródło
JavaScript (ES6), 145 bajtów
Pobiera dane wejściowe jako tablicę (
[93,86,78,76,75]
), nadchodzące gry jako tablicę tablic 2-wartościowych ([[0,1],[3,2],[1,2],[2,1],[0,1]]
), a indeks zespołu jako liczbę całkowitą (1
). Wszystko jest indeksowane na 0.Test Snippet
Pokaż fragment kodu
źródło