Alice y Bob están jugando un pequeño juego. Primero, dibujan un árbol desde un nodo raíz (indicado por un punto grueso), sin nodos internos, con números en las hojas. Cualquier nodo puede tener cualquier número de hijos.
Comenzamos en la raíz, y la primera en jugar es Alice (A). Debe seleccionar uno de los hijos del nodo actual. Luego es el turno de Bob, y de manera similar selecciona un nodo hijo. Esto continúa hasta que se alcanza un nodo hoja.
Cuando se alcanza un nodo hoja, el juego termina. El objetivo de Alice es terminar en un nodo con el mayor valor posible, y el objetivo de Bob terminar en un nodo con el menor valor posible.
Dado un árbol en forma de matriz anidada, devuelve el valor de la hoja que se alcanzará si tanto Alice como Bob juegan perfectamente.
Ejemplos:
18: [[67, [[100, [[67, 47], [86], 21, 16], [[46, [14], 35, 85], [71, [18, 63, 69], 99, 22], 3]]], [[18, 32, 42, 80]], [[36, 70], [86, 53, 46, 59], [[41], 86, 35]]], 3]
60: [[[84, 35], [44, 60]], [[24, 98], [16, 21]]]
58: [[53, 77], [58, [82, 41]], 52]
59: [[93, [100, 53], 58, 79], [63, 94, 59], [9, [55, 48]], [40, 10, 32]]
56: [[20, 10, [[[89, 22, 77, 10], 55], [24, 28, 30, 63]]], [[49, 31]], 17, 56]
0: [0]
Puede suponer que el nodo raíz nunca es un nodo hoja y apunta al menos a un nodo hoja. Puede suponer que las hojas son números no negativos.
El código más corto en bytes gana.
Respuestas:
Jalea , 7 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Esto usa el algoritmo de la respuesta de @ xnor . Para fines de comparación, un enfoque más directo que calcula alternativamente mínimos y máximos pesa 8 bytes :
Cómo funciona
fuente
Python 2, 53 bytes
La pregunta principal es cómo alternar entre
max
ymin
cada capa. Usando el hecho de quemax(l) == -min([-x for x in l])
, en cambio, negamos cada segunda capa y recurrimos con-min
. Para negar cada segunda capa, pasamos un multiplicadorc
que alterna+1
y-1
, cuando alcanzamos una hoja, ajustamos su valor por el multiplicador. Reconocemos estar en una hoja a través de la condiciónl<[]
, ya que Python 2 trata los números como menos que las listas.Es difícil acortar el
else/if
ternario porque cualquiera de las ramas podría dar un valor de Verdad (distinto de cero) o Falsey (cero).fuente
JavaScript (ES6), 53 bytes
Utiliza un enfoque similar a la respuesta de @ xnor. Si los números no son cero, entonces solo 49 bytes:
fuente
Pyth, 21 bytes
Mi primera respuesta Pyth! Gracias a Dennis por la ayuda :).
fuente
mgd_H
puede sergR_H
. Además, en lugar de definir una función, puede ingresarQ
y reemplazarLgb1
congQ1
.Mathematica, 13 bytes
o equivalente
Esto se evalúa como una función sin nombre que toma el árbol y devuelve el resultado.
Esto también es esencialmente lo mismo que la solución de xnor: en cada nivel intercambiamos el signo de la lista y el resultado y usamos
Min
todo el camino hacia abajo. Esto resultó increíblemente deportivo en Mathematica, porque:Min
puede tomar números individuales o listas o incluso varias listas. Simplemente le da el valor mínimo en todos sus argumentos. Eso significa que funciona tanto en listas como en hojas (donde solo devuelve la hoja)./@
que es la abreviatura deMap
es una función de orden superior muy general en Mathematica. No solo mapea una función sobre listas, puede mapearlas sobre cualquier expresión. Los números son una expresión de este tipo, pero no contienen ningún elemento para mapear. Eso significa que podemos asignar de forma segura cualquier función sobre los números, lo que no afecta el número en absoluto.Ambas cosas juntas significan que podemos escribir el código sin condicionales, ya que las operaciones
Min
yMap
no son operacionales en los números, y posteriormente las dos negaciones se cancelan para que la función se convierta en la identidad cuando se le da un número.Finalmente, gracias a
#0
esto es posible escribir funciones recursivas sin nombre en Mathematica, lo que ahorra algunos bytes más.fuente
Ruby, 46 bytes
Se utilizó el truco de @ xnor
min
para alternar entre max y min.fuente
Julia,
2725 bytesEsto usa el algoritmo de la respuesta de @ xnor . Pruébalo en línea!
fuente