Como fanático de un equipo BE de fútbol como mínimo con éxito moderado , hacia el final de la temporada a menudo me pregunto si mi equipo favorito aún tiene alguna posibilidad teórica de convertirse en campeón. Su tarea en este desafío es responder esa pregunta por mí.
Entrada
Recibirá tres entradas: la tabla actual, la lista de partidos restantes y la posición actual del equipo que nos interesa.
Entrada 1: La tabla actual , una secuencia de números donde el número i son los puntos ganados por el equipo i hasta ahora. Por ejemplo, la entrada
[93, 86, 78, 76, 75]
codifica la siguiente tabla (solo la última columna es importante):
Entrada 2 : Los partidos restantes , una secuencia de tuplas donde cada tupla ( i , j ) representa un partido restante entre el equipo i y j . En el ejemplo anterior, una segunda entrada de [(1,2), (4,3), (2,3), (3,2), (1,2)]
significaría que las coincidencias restantes son:
Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham
Entrada 3: La posición actual del equipo en el que estamos interesados. Por ejemplo, una entrada 2
para el ejemplo anterior significaría que nos gustaría saber si Tottenham todavía puede convertirse en campeón.
Salida
Para cada coincidencia restante del formulario ( i , j ), hay tres resultados posibles:
- El equipo i gana: el equipo i obtiene 3 puntos , el equipo j obtiene 0 puntos
- El equipo j gana: el equipo i obtiene 0 puntos , el equipo j obtiene 3 puntos
- Draw: Equipo i y j tanto obtener 1 punto
Debe generar un valor verdadero si hay algún resultado para todos los juegos restantes, de modo que al final, ningún otro equipo tenga más puntos que el equipo especificado en la tercera entrada. De lo contrario, genera un valor falso.
Ejemplo : considere la entrada ejemplar de la sección anterior:
Entrada 1 = [93, 86, 78, 76, 75]
, Entrada 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)]
, Entrada 3 =2
Si el equipo 2
gana todos sus partidos restantes (es decir (1,2), (2,3), (3,2), (1,2)
), obtiene 4 * 3 = 12 puntos adicionales; ninguno de los otros equipos obtiene puntos de estos partidos. Digamos que el otro partido restante (es decir (4,3)
) es un empate. Entonces los puntajes finales serían:
Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75
Esto significa que ya hemos encontrado algún resultado para los partidos restantes, de modo que ningún otro equipo tiene más puntos que el equipo 2
, por lo que el resultado de esta entrada debe ser verdadero.
Detalles
- Puede suponer que la primera entrada es una secuencia ordenada, es decir, para i < j , la entrada i -ésima es igual o mayor que la entrada j -ésima. La primera entrada puede tomarse como una lista, una cadena o similar.
- Puede tomar la segunda entrada como una cadena, una lista de tuplas o similares. Alternativamente, puede tomarlo como una matriz bidimensional
a
dondea[i][j]
es el número de entradas del formulario(i,j)
en la lista de coincidencias restantes. Por ejemplo,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 la segunda y tercera entrada, puede asumir la indexación 0 en lugar de la indexación 1.
- Puede tomar las tres entradas en cualquier orden.
Especifique el formato de entrada exacto que eligió en su respuesta.
Nodo lateral : se demostró que el problema que subyace a este desafío es NP completo en "La eliminación del fútbol es difícil de decidir bajo la regla de los 3 puntos ". Curiosamente, si solo se otorgan dos puntos por una victoria, el problema se resuelve en tiempo polinómico.
Casos de prueba
Todos los casos de prueba están en el formato Input1
, Input2
, Input3
.
Verdad:
[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
Ganador
Este es el código de golf , por lo que gana la respuesta correcta más corta (en bytes). El ganador será elegido una semana después de que se publique la primera respuesta correcta.
fuente
Respuestas:
Haskell (Lambdabot) , 84 bytes
Gracias a @bartavelle por salvarme un byte.
Sin Lambdabot, agregue 20 bytes para
import Control.Lens
más una nueva línea.La función toma sus argumentos en el mismo orden que se describe en el OP, indexado a 0. Su segundo argumento (la lista de emparejamientos restantes) es una lista plana de índices (por ejemplo,
[1,2,4,1]
corresponde a[(Team 1 vs Team 2), (Team 4 vs Team 1)]
).Las reglas son un poco vagas en cuanto a si esto está permitido o no. Si no está permitido, la función puede recibir información en el formato proporcionado por los ejemplos: una lista de tuplas. En ese caso, agregue 2 bytes a la puntuación de esta solución, debido al reemplazo
a:b:r
con(a,b):r
.Explicación:
La primera línea define una función infija
!
de tres variables, de tipo(!) :: Int -> Int -> [Int] -> [Int]
, que incrementa el valor en un índice dado en una lista. Dado que, a menudo, el código es más fácil de entender que las palabras (y dado que la sintaxis de Haskell puede ser extraña), aquí hay una traducción de Python:La segunda línea define otra función infija
?
, también de tres variables (la entrada de desafío). Lo reescribiré de manera más legible aquí:Esta es una implementación recursiva de búsqueda exhaustiva. Se repite sobre la lista de juegos restantes, ramificando en los tres resultados posibles, y luego, una vez que la lista está vacía, verifica si nuestro equipo tiene o no la cantidad máxima de puntos. De nuevo en Python (no idiomático), esto es:
Pruébalo en línea!
* Lamentablemente, TiO no es compatible con Lens, por lo que este enlace no se ejecutará realmente.
fuente
[]
con_
.Microsoft SQL Server, 792 bytes
La función devuelve 0 para un resultado falso y más de 0 para uno verdadero.
Todo el fragmento:
¡Compruébalo en línea!
fuente
Python 2,
242221 bytesPruébalo en línea!
Después de un primer pase con pensamiento básico de golf. Toma entrada con indexación basada en 0 ; los casos de prueba en TIO se ajustan a esto a través de la función
F
.La
product([0,1,2],repeat=len(m))
iteración evalúa los posibles resultados sobre empate / victoria / pérdida para cada partido a menos que el equipo de interés (TOI) sea parte del partido (en el que siempre se supone que el TOI gana).fuente
JavaScript (ES6), 145 bytes
Toma la entrada de puntaje como una matriz (
[93,86,78,76,75]
), los próximos juegos como una matriz de matrices de 2 valores ([[0,1],[3,2],[1,2],[2,1],[0,1]]
) y el índice del equipo como un entero (1
). Todo está indexado a 0.Fragmento de prueba
Mostrar fragmento de código
fuente