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.
fonte
Respostas:
Haskell (Lambdabot) , 84 bytes
Obrigado a @bartavelle por me salvar um byte.
Sem o Lambdabot, adicione 20 bytes para
import Control.Lens
mais uma nova linha.A função recebe seus argumentos na mesma ordem descrita no OP, indexado em 0. Seu segundo argumento (a lista de correspondências restantes) é uma lista simples de índices (por exemplo,
[1,2,4,1]
corresponde a[(Team 1 vs Team 2), (Team 4 vs Team 1)]
).As regras são um pouco vagas sobre se isso é ou não permitido. Se não for permitido, a função pode receber entradas no formato fornecido pelos exemplos - uma lista de tuplas. Nesse caso, adicione 2 bytes à pontuação desta solução, devido à substituição
a:b:r
por(a,b):r
.Explicação:
A primeira linha define uma função infix
!
de três variáveis, do tipo(!) :: Int -> Int -> [Int] -> [Int]
, que incrementa o valor em um determinado índice em uma lista. Como, muitas vezes, o código é mais fácil de entender do que as palavras (e como a sintaxe de Haskell pode ser estranha), aqui está uma tradução do Python:A segunda linha define outra função infix
?
, também de três variáveis (a entrada de desafio). Vou reescrevê-lo mais facilmente aqui:Esta é uma implementação recursiva de pesquisa exaustiva. Ele repete-se na lista de jogos restantes, ramificando-se nos três resultados possíveis e, depois que a lista estiver vazia, verificando se nossa equipe tem ou não o número máximo de pontos. Novamente no Python (não-idiomático), é o seguinte:
Experimente online!
* Infelizmente, TiO não suporta Lens, de modo que este link não vai realmente funcionar.
fonte
[]
-lo_
.Microsoft SQL Server, 792 bytes
A função retorna 0 para um resultado falso e mais de 0 para um resultado verdadeiro.
Todo o trecho:
Verifique Online!
fonte
Python 2,
242221 bytesExperimente online!
Após um primeiro passe com o pensamento básico do golfe. Recebe entrada com indexação baseada em 0 ; casos de teste em TIO ajustar para este através da função
F
.A
product([0,1,2],repeat=len(m))
iteração avalia os possíveis resultados sobre empate / vitória / derrota para cada partida, a menos que a equipe de interesse (TOI) faça parte da partida (na qual se presume que a TOI sempre vence).fonte
JavaScript (ES6), 145 bytes
Leva a entrada de pontuação como uma matriz (
[93,86,78,76,75]
), os próximos jogos como uma matriz de matrizes de 2 valores ([[0,1],[3,2],[1,2],[2,1],[0,1]]
) e o índice da equipe como um número inteiro (1
). Tudo é indexado em 0.Snippet de teste
Mostrar snippet de código
fonte