Hay una gran historia que contar sobre los hexágonos regulares que se encuentran, por ejemplo, en los panales. Pero esta abeja ocupada necesita tu ayuda para decirle qué punto está dentro o fuera de su honeypot. Entonces, dado un hexágono regular como se muestra a continuación, centrado en el origen y con el tamaño de borde l, determine si hay un conjunto de coordenadas (x, y) dentro, exactamente en el borde o fuera de mi hexágono regular.
Entrada, salida y reglas.
Las reglas son:
- Los métodos de entrada y salida siguen las reglas predeterminadas .
- La entrada consiste en tres números enteros :
x,y,l
. x
yy
son de cualquier formato entero con signo conveniente.l
es positivo (nunca 0).- Su programa debe generar / devolver a
1
si el punto(x,y)
está dentro del hexágono regular,-1
si está afuera o0
si está exactamente en el borde. - Este es un código de golf, por lo que gana el código más corto. En caso de empate, el primer puesto gana.
- Para salida a stdout: se permiten espacios iniciales / finales o nuevas líneas en la salida.
- Se aplican lagunas estándar.
Casos de prueba
Aquí hay algunos casos de prueba:
0,0,1 --> 1
0,1,1 --> -1
0,-1,1 --> -1
1,0,1 --> 0
-1,0,1 --> 0
-1,-1,1 --> -1
1,1,1 --> -1
-2,-3,4 --> 1
32,45,58 --> 1
99,97,155 --> -1
123,135,201 --> 1
Respuestas:
JavaScript (ES6) 77
83Prueba
fuente
Ruby,
1501451371271251068876 bytes76 bytes
Se cambió la triple comparación a un cohete.
88 bytes
Elimine la prueba y igual a apotema para puntos en el hexágono, porque para enteros, eso nunca puede ser cierto.
106 bytes:
El póster sugirió no usar epsilon, por lo que reemplazó epsilon con cero y se reorganizó, eliminó un abs, etc.
125 bytes:
Incorpore y en la definición de z y elimine algunos paréntesis.
127 bytes:
Términos reordenados para evitar la necesidad de to_f cast. Use d (doble apotema) en lugar de a (la apotema). Combina múltiples tareas.
137 bytes:
En línea 'c'.
150 bytes:
¡Esto funciona para enteros o flotadores! La prueba epsilon es para identificar correctamente los puntos dentro del error de redondeo de estar en el borde.
Los valores absolutos mueven todo al cuadrante uno.
El valor 'a' es la distancia apotema (la intersección en y del hexágono).
El valor 'c' es el valor x de la esquina superior derecha del hexágono.
El valor 'z' es para ver si el punto está por encima o por debajo de la línea inclinada desde la esquina hasta la intersección con el eje x.
Sin golf:
Prueba
fuente
MATL ,
2925 bytesLas entradas son
y
,x
,l
en ese orden.Pruébalo en línea!
fuente
Julia,
6558 bytesx
es un vector fila[x y]
. Llamar así:f([0 0],1)
.fuente
Python 2, 89 bytes
casi la misma solución que la respuesta de Julia, pero podemos usar la operación en vector sin numpy
Resultados
fuente
Pyth, 41 bytes
Pruébalo aquí
fuente
JavaScript (ES6), 67 bytes
Nota: Para asignar esto a una variable para que pueda llamarla, coloque
f=
después dewith(Math)
.Utilicé
l*l
yb*b
en el primer parámetro paramin
evitar llamadas aabs
ysqrt
pero no pude determinar si podría hacer un truco similar con el segundo parámetro.fuente