Fondo
Una cuadrícula triangular es una cuadrícula formada al enlosar el plano regularmente con triángulos equiláteros de longitud lateral 1. La siguiente imagen es un ejemplo de una cuadrícula triangular.
Un punto reticular triangular es un vértice de un triángulo que forma la cuadrícula triangular.
los origen es un punto fijo en el plano, que es uno de los puntos reticulares triangulares.
Reto
Dado un número entero no negativo n
, encuentre el número de puntos reticulares triangulares cuya distancia euclidiana desde el origen es menor o igual quen
.
Ejemplo
La siguiente figura es un ejemplo para n = 7
(que muestra solo un área de 60 grados por conveniencia, siendo el punto A el origen):
Casos de prueba
Input | Output
---------------
0 | 1
1 | 7
2 | 19
3 | 37
4 | 61
5 | 91
6 | 127
7 | 187
8 | 241
9 | 301
10 | 367
11 | 439
12 | 517
13 | 613
14 | 721
15 | 823
16 | 931
17 | 1045
18 | 1165
19 | 1303
20 | 1459
40 | 5815
60 | 13057
80 | 23233
100 | 36295
200 | 145051
500 | 906901
1000 | 3627559
Sugerencia : esta secuencia no es OEIS A003215 .
Reglas
Reglas estándar para el código de golf . La presentación más corta gana.
Incluya cómo resolvió el desafío en su envío.
n
, por lo que tiene el doble de términos que desee.n^2+1
términos de OEIS A004016 .Respuestas:
Python 2 , 43 bytes
Pruébalo en línea!
Esto es magia negra.
Ofreciendo 250 repeticiones para una prueba escrita.Veala respuesta de Lynnpara una prueba y explicación.fuente
Haskell , 48 bytes
Pruébalo en línea!
Utiliza la fórmula de "magia negra" de xnor:
Aquí puede encontrar una prueba de su corrección y una explicación de cómo xnor logró expresarlo en 43 bytes de Python .
fuente
Wolfram Language (Mathematica) ,
535150 bytes-1 byte gracias a @miles
Pruébalo en línea!
¿Cómo?
En lugar de pensar en esto:
Piensa en esto, de esta manera:
Entonces aplicamos la matriz de transformación
[[sqrt(3)/2, 0], [1/2, 1]]
de transformación para transformar la segunda figura en la primera.Luego, debemos encontrar el círculo en la cuadrícula triangular en términos de coordenadas cartesianas.
Entonces encontramos puntos de red
x, y
tales quex^2 + x y + y^2 <= r^2
Por ejemplo, con
r = 3
:fuente
x^2+x y+y^2
también se puede derivar de la Ley de cosenos con 120 grados.x^2+x y+y^2
->x(x+y)+y^2
guarda un bytex^2 + xy + y^2
también se puede derivar de la norma de un entero Eistenstein, que esa^2 - ab + b^2
. Tenga en cuenta que el signo dea
yb
es irrelevante, excepto en el término,ab
por lo que tiene la misma cantidad de soluciones.Wolfram Language (Mathematica) , 48 bytes
Basado en OEIS A004016 .
Pruébalo en línea!
fuente
CJam (24 bytes)
Este es un bloque anónimo (función) que toma un argumento en la pila y deja el resultado en la pila. Conjunto de pruebas en línea . Tenga en cuenta que los dos casos más grandes son demasiado lentos.
Explicación
alephalpha señaló en un comentario sobre la pregunta que
Mi prueba de exactitud de esa fórmula se basa en cierta información obtenida del enlace OEIS de alephalpha:
Disección de código
fuente
J , 27 bytes
Pruébalo en línea!
Basado en el método de JungHwan Min .
Explicación
fuente
APL (Dyalog Classic) , 23 bytes
Pruébalo en línea!
homenaje a xnor's y lynn's respuestas
la última prueba se comenta porque necesita más memoria, por ejemplo,
MAXWS=200M
en el entornofuente
Jalea , 14 bytes
Utiliza el método de @ JungHwanMin .
Pruébalo en línea!
fuente
Gelatina ,
1513 bytes-2 gracias a Dennis (solo incremente el cuadrado para evitar la concatenación de un cero; evite la cabeza utilizando un módulo de corte posterior a la diferencia en lugar de un corte previo a la diferencia)
Utiliza el método de "magia negra" para perfeccionar la respuesta que fue expuesta por xnor en su respuesta de Python , pero usa iteración en lugar de recursión (y un poco menos de cálculo)
Un enlace monádico que acepta un entero no negativo y devuelve un entero positivo.
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
JavaScript (ES6), 65 bytes
Este es un puerto de la solución de @ JungHwanMin .
Pruébalo en línea!
Respuesta original (ES7), 70 bytes
Simplemente camina por la cuadrícula y cuenta los puntos coincidentes.
Pruébalo en línea!
fuente
true
lugar de1
; 46 si también lo dividimos en enteros). Y no conozco JavaScript lo suficientemente bien como para jugar golf en las divisiones de enteros~~(a/b)
, pero estoy seguro de que también hay un camino más corto para ellos ...Java 8, 65 bytes
Port of @xnor 's Python 2 respuesta .
Pruébalo en línea.
fuente
Pari / GP , 42 bytes
Usando el incorporado
qfrep
.Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 68 bytes
Pruébalo en línea!
Igual que todos los demás, por desgracia. Sé que probablemente hay una mejor manera de escribir esto, pero declarar y llamar a una lambda al mismo tiempo en C # no es exactamente algo que hago, bueno, nunca. Aunque en mi defensa, no puedo pensar en una buena razón (fuera del código de golf, por supuesto) para hacerlo. Aún así, si alguien sabe cómo puede hacer esto, hágamelo saber y / o robe el crédito, supongo.
fuente
Wolfram Language (Mathematica) , 39 bytes
Pruébalo en línea!
Usando la transformación de coordenadas de JungHwan Min y simplemente contando las soluciones sobre los enteros.
fuente
05AB1E , 15 bytes
Puerto de la respuesta Jelly de @JonathanAllan , que a su vez es un derivado de la fórmula de 'magia negra' de @ xnor .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente