En tant que fan d'une équipe de football BE au plus modérément réussie, je me demande souvent vers la fin de la saison si mon équipe préférée a encore une chance théorique de devenir champion. Votre tâche dans ce défi est de répondre à cette question pour moi.
Contribution
Vous recevrez trois entrées: le tableau actuel, la liste des matchs restants et la position actuelle de l'équipe qui nous intéresse.
Entrée 1: Le tableau actuel , une séquence de nombres étaient le i- ème nombre sont les points gagnés par l'équipe i jusqu'à présent. Par exemple, l'entrée
[93, 86, 78, 76, 75]
code le tableau suivant (seule la dernière colonne est importante):
Entrée 2 : Les matchs restants , une séquence de tuples où chaque tuple ( i , j ) représente un match restant entre l'équipe i et j . Dans l'exemple ci-dessus, une deuxième entrée de [(1,2), (4,3), (2,3), (3,2), (1,2)]
signifierait que les correspondances restantes sont:
Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham
Entrée 3: La position actuelle de l'équipe qui nous intéresse. Par exemple, une entrée de 2
pour l'exemple ci-dessus signifierait que nous aimerions savoir si Tottenham peut toujours devenir champion.
Production
Pour chaque correspondance restante du formulaire ( i , j ), il y a trois résultats possibles:
- L'équipe i gagne: l'équipe i obtient 3 points , l'équipe j obtient 0 point
- L'équipe j gagne: l'équipe i obtient 0 point , l'équipe j obtient 3 points
- Match nul: les équipes i et j obtiennent 1 point
Vous devez produire une valeur véridique s'il y a un résultat pour tous les jeux restants de sorte qu'à la fin, aucune autre équipe n'ait plus de points que l'équipe spécifiée dans la 3ème entrée. Sinon, affichez une valeur fausse.
Exemple : Considérez l'apport exemplaire de la section ci-dessus:
Entrée 1 = [93, 86, 78, 76, 75]
, Entrée 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)]
, Entrée 3 =2
Si l'équipe 2
gagne tous ses matchs restants (c'est-à-dire (1,2), (2,3), (3,2), (1,2)
), elle obtient 4 * 3 = 12 points supplémentaires; aucune des autres équipes n'obtient de points de ces matchs. Disons que l'autre match restant (ie (4,3)
) est un match nul. Ensuite, les scores finaux seraient:
Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75
Cela signifie que nous avons déjà trouvé des résultats pour les matchs restants de sorte qu'aucune autre équipe n'a plus de points que l'équipe 2
, donc la sortie pour cette entrée doit être véridique.
Détails
- Vous pouvez en déduire la première entrée à une séquence ordonnée, soit pour i < j , l' i entrée -ième est égale ou supérieure à la j entrée -ième. La première entrée peut être considérée comme une liste, une chaîne ou similaire.
- Vous pouvez prendre la deuxième entrée sous forme de chaîne, une liste de tuples ou similaires. Alternativement, vous pouvez le prendre comme un tableau à deux dimensions
a
oùa[i][j]
est le nombre d'entrées du formulaire(i,j)
dans la liste des correspondances restantes. Par exemple,a[1][2] = 2, a[2][3] = 1, a[3][2] = 1, a[4][3] = 1
correspond à[(1,2), (4,3), (2,3), (3,2), (1,2)]
. - Pour les deuxième et troisième entrées, vous pouvez supposer une indexation 0 au lieu d'une indexation 1.
- Vous pouvez prendre les trois entrées dans n'importe quel ordre.
Veuillez spécifier le format de saisie exact que vous avez choisi dans votre réponse.
Noeud latéral : Le problème sous-jacent à ce défi s'est avéré être NP-complet dans "L' élimination du football est difficile à décider selon la règle des 3 points ". Fait intéressant, si seulement deux points sont accordés pour une victoire, le problème devient résoluble en temps polynomial.
Cas de test
Tous les tests sont au format Input1
, Input2
, Input3
.
Vérité:
[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
Gagnant
Il s'agit de code-golf , donc la réponse correcte la plus courte (en octets) l'emporte. Le gagnant sera choisi une semaine après la publication de la première bonne réponse.
Réponses:
Haskell (Lambdabot) , 84 octets
Merci à @bartavelle de m'avoir sauvé un octet.
Sans Lambdabot, ajoutez 20 octets pour
import Control.Lens
plus une nouvelle ligne.La fonction prend ses arguments dans le même ordre que celui décrit dans l'OP, indexé 0. Son deuxième argument (la liste des correspondances restantes) est une liste plate d'index (par exemple
[1,2,4,1]
correspond à[(Team 1 vs Team 2), (Team 4 vs Team 1)]
).Les règles sont un peu vagues quant à savoir si cela est autorisé ou non. Si ce n'est pas autorisé, la fonction peut prendre une entrée dans le format fourni par les exemples - une liste de tuples. Dans ce cas, ajoutez 2 octets au score de cette solution, en raison du remplacement
a:b:r
par(a,b):r
.Explication:
La première ligne définit une fonction infixe
!
de trois variables, de type(!) :: Int -> Int -> [Int] -> [Int]
, qui incrémente la valeur à un index donné dans une liste. Puisque, souvent, le code est plus facile à comprendre que les mots (et puisque la syntaxe Haskell peut être bizarre), voici une traduction Python:La deuxième ligne définit une autre fonction d'infixe
?
, également de trois variables (l'entrée challenge). Je vais le réécrire de façon plus lisible ici:Il s'agit d'une implémentation récursive d'une recherche exhaustive. Il revient sur la liste des matchs restants, se ramifiant sur les trois résultats possibles, puis, une fois la liste vide, vérifiant si notre équipe a le nombre maximum de points. Encore une fois en Python (non idiomatique), c'est:
Essayez-le en ligne!
* Malheureusement, TiO ne prend pas en charge Lens, donc ce lien ne fonctionnera pas réellement.
la source
[]
par_
.Microsoft SQL Server, 792 octets
La fonction retourne 0 pour un faux résultat et plus de 0 pour un vrai.
L'extrait entier:
Vérifiez-le en ligne!
la source
Python 2,
242221 octetsEssayez-le en ligne!
Après une première passe avec des notions de golf de base. Prend des entrées avec une indexation basée sur 0 ; les cas de test dans TIO s'ajustent pour cela via la fonction
F
.L'
product([0,1,2],repeat=len(m))
itération évalue les résultats possibles sur égalité / victoire / perte pour chaque match, sauf si l'équipe d'intérêt (TOI) fait partie du match (dans lequel, la TOI est toujours supposée gagner).la source
JavaScript (ES6), 145 octets
Prend l'entrée de score sous forme de tableau (
[93,86,78,76,75]
), les jeux à venir sous forme de tableau de tableaux à 2 valeurs ([[0,1],[3,2],[1,2],[2,1],[0,1]]
) et l'index de l'équipe sous forme d'entier (1
). Tout est indexé 0.Extrait de test
Afficher l'extrait de code
la source