Fondo:
Jack es una calabaza que disfruta asustando a los ciudadanos de las aldeas cercanas a su huerto de calabazas cada Halloween. Sin embargo, cada año después de que alguien enciende la vela dentro de él, tiene un tiempo limitado para asustar a todos antes de que la vela se apague, por lo que no puede asustar a más aldeanos porque nadie puede verlo. En los últimos años, solo ha podido asustar a una pequeña cantidad de aldeas debido a su mala toma de decisiones, pero ahora que tiene que ayudarlo, ¡podrá asustar tantas aldeas como sea posible!
Tarea:
Dada una lista de ubicaciones de aldeas y una vida útil de la vela, produzca el número máximo de aldeas que Jack puede visitar. No tiene que imprimir la ruta en sí.
Entrada:
La vida útil de la vela y una lista de ubicaciones de las aldeas en un sistema de coordenadas cartesianas. El parche de calabaza que Jack origina siempre estará en 0,0. Puede formatear la entrada de la forma que desee. Para simplificar los movimientos de Jack, solo puede moverse horizontal, vertical o diagonalmente, lo que significa que su vela perderá 1 o 1.5 unidades de vida (toma un poco más en diagonal) en cada movimiento. La vela se apaga cuando la vida útil es menor o igual a 0.
Salida:
Un número entero igual al número máximo de pueblos que Jack puede visitar antes de que la vela se apague.
Reglas:
Este es el código de golf , por lo que gana el código más corto en bytes. Las lagunas estándar no están permitidas.
Casos de prueba:
// Format [lifespan] [list of village coordinates] -> [maximum visit-able villages]
4 -1,0 1,0 2,0 3,0 4,0 5,0 -> 3
4 1,1 2,2 3,3 -> 2
5 1,1 2,1 3,1 4,1 5,0 5,1 -> 4
fuente
Respuestas:
Jalea,
30292725 bytesPruébalo en línea!
Aparentemente, el producto de puntos de Jelly simplemente ignora un desajuste de tamaño de lista y no multiplica los elementos adicionales de la otra matriz, solo los agrega. Afeita 2 bytes.
Explicación
fuente
Java 7
206201 bytesGracias a @KevinCruijssen por guardar 5 bytes
Sin golf
fuente
i-x
dos veces yb[c]-y
dos veces, por lo que puede agregar,t
a las entradas y luego usar esto: enMath.sqrt((t=i-x)*t+(t=b[c]-y)*t)*1
lugar deMath.sqrt((i-x)*(i-x)+(b[c]-y)*(b[c]-y))*1
.Scala, 196 bytes
Sin golf:
Explanantion:
fuente
JavaScript (ES6), 145
Función recursiva anónima, el parámetro
s
es la vida útil de la vela, el parámetrol
es la lista de coordenadas de la aldea.Una primera búsqueda de profundidad , deteniéndose cuando la distancia alcanza la vida útil de la vela
Menos golf, vea el fragmento a continuación
Prueba
fuente
MATL , 27 bytes
EDITAR (26 de noviembre de 2016): debido a cambios en la
Xl
función, debe ser reemplazado en el código anterior por2$X>
. Los enlaces a continuación incorporan esa modificación.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
La distancia de calabaza entre dos ciudades separadas Δ x y Δ y en cada coordenada se puede obtener como (| Δ x | + | Δ y | + max (| Δ x |, | Δ y |)) / 2.
El código sigue estos pasos:
Código comentado:
fuente
Python 2.7 , 422 bytes
¡Gracias a NoOneIsHere por señalar mejoras adicionales!
¡Gracias a edc65 por observar que no guarda la lista sino que usa iteradores en su lugar!
Pruébalo en línea!
Explicación:
La función calcula la distancia entre dos puntos de acuerdo con las reglas dadas, el ciclo itera a través de todas las permutaciones generadas por el generador de la entrada y calcula la distancia, si la distancia es menor que la vida útil de la vela, la resta y agrega el lugar al contador, si ese contador es mayor que el máximo actual, lo sustituye.
sin golf:
fuente
current
c
, yll
m
.PHP, 309 bytes
Absolutamente fuerza bruta y ni siquiera muy corta. Usar como:
Con más espacios en blanco y guardados en un archivo:
fuente
Python, 175 bytes
c
es la vida útil de la vela,l
es una lista de tuplas - coordenadas de la aldea,v
es el número de aldeas visitadas,(x,y)
es un par de coordenadas de la aldea en la que se encuentra Jack actualmente.r(t)
es una función que calcula la distancia a la posición actual y se usa para ordenar la lista de modo que se haga la más cercanal[0]
. La fórmula utilizada es | Δx | + | Δy | - min (| Δx |, | Δy |) / 2.Pruébalo aquí!
fuente
Raqueta
Pruebas:
Salida:
Sin embargo, el código anterior no funciona para valores negativos de x e y.
fuente