Como fã de um futebol de sucesso moderado, BE equipe, no final da temporada Muitas vezes me pergunto se o meu time favorito ainda tem alguma chance teórica deixou de se tornar campeão. Sua tarefa neste desafio é responder a essa pergunta para mim.
Entrada
Você receberá três entradas: a tabela atual, a lista de partidas restantes e a posição atual do time em que estamos interessados.
Entrada 1: A tabela atual , uma sequência de números, é o i- ésimo número dos pontos conquistados pela equipe i até o momento. Por exemplo, a entrada
[93, 86, 78, 76, 75]
codifica a tabela a seguir (apenas a última coluna é importante):
Entrada 2 : Os restantes jogos , uma sequência de tuplos onde cada tuplo ( i , j ) representa um fósforo remanescente entre equipa i e j . No exemplo acima, uma segunda entrada de [(1,2), (4,3), (2,3), (3,2), (1,2)]
significaria que as correspondências restantes são:
Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham
Entrada 3: A posição atual da equipe na qual estamos interessados. Por exemplo, uma entrada de2
exemplo acima significaria que gostaríamos de saber se o Tottenham ainda pode ser campeão.
Resultado
Para cada correspondência restante do formulário ( i , j ), há três resultados possíveis:
- Equipe i ganha: Equipe i recebe 3 pontos , equipe j recebe 0 pontos
- A equipe j vence: a equipe i recebe 0 pontos , a equipe j recebe 3 pontos
- Draw: Equipe i e j tanto obter 1 ponto
Você deve gerar um valor verdadeiro se houver algum resultado para todos os jogos restantes, de modo que, no final, nenhuma outra equipe tenha mais pontos do que a equipe especificada na 3ª entrada. Caso contrário, imprima um valor falso.
Exemplo : considere a entrada exemplar da seção acima:
Entrada 1 = [93, 86, 78, 76, 75]
, Entrada 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)]
, Entrada 3 =2
Se a equipe 2
vencer todas as suas partidas restantes (ie (1,2), (2,3), (3,2), (1,2)
), recebe 4 * 3 = 12 pontos adicionais; nenhuma das outras equipes ganha pontos nesses jogos. Digamos que a outra partida restante (ou seja (4,3)
) seja um empate. Então a pontuação final seria:
Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75
Isso significa que já encontramos algum resultado para as partidas restantes, de modo que nenhuma outra equipe tenha mais pontos que a equipe 2
, portanto, o resultado dessa entrada deve ser verdadeiro.
Detalhes
- Você pode assumir que a primeira entrada é uma sequência ordenada, ou seja, para i < j , a i- ésima entrada é igual ou maior que a j- ésima entrada. A primeira entrada pode ser tomada como uma lista, uma string ou algo semelhante.
- Você pode considerar a segunda entrada como uma string, uma lista de tuplas ou similares. Como alternativa, você pode tomá-lo como uma matriz bidimensional,
a
ondea[i][j]
está o número de entradas do formulário(i,j)
na lista de correspondências restantes. Por exemplo,a[1][2] = 2, a[2][3] = 1, a[3][2] = 1, a[4][3] = 1
corresponde a[(1,2), (4,3), (2,3), (3,2), (1,2)]
. - Para a segunda e terceira entrada, você pode assumir a indexação 0 em vez da indexação 1.
- Você pode pegar as três entradas em qualquer ordem.
Especifique o formato exato de entrada que você escolheu na sua resposta.
Nó lateral : O problema subjacente a este desafio foi mostrado como NP-completo em "A eliminação do futebol é difícil de decidir sob a regra dos 3 pontos ". Curiosamente, se apenas dois pontos são concedidos por uma vitória, o problema se torna solucionável no tempo polinomial.
Casos de teste
Todos os casos de teste estão no formato Input1
, Input2
, Input3
.
Verdade:
[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
Vencedora
Isso é código-golfe , então a resposta correta mais curta (em bytes) vence. O vencedor será escolhido uma semana após a publicação da primeira resposta correta.