La pregunta: dado un número n
≥ 2, ¿cuántos pares distintos de puntos en una red n
tridimensional n x n x n x n x n x n ... x n
, donde las coordenadas van de 0
a n - 1
, están a una distancia al menos n
separada? Los pares {(2,1,3,1), (3,2,1,3)}
y {(3,2,1,3), (2,1,3,1)}
no se consideran distintos entre sí, ya que consisten en los mismos dos puntos en orden inverso. Tenga en cuenta que el número total de pares crece muy rápidamente. El número de pares en total va 6
, 351
, 32 640
, 4 881 250
, 1 088 367 840
, etc.
Casos de prueba:
2 -> 0 (all pairs are at most a distance of sqrt(2) < 2 apart)
3 -> 28 (They must either be (2,2,1) or a permutation apart, or (2,2,2) apart. Each corner
has three non-corner (2,2,1) points corresponding to it. And each corner is associated
with a corner pair that is a (2,2,2). Thus. 3.5 * 8 = 28.
4 -> 4,888
5 -> 1,501,948
6 -> 486,039,360 (I would like someone to verify this if possible)
Su código debería funcionar para n <= 5, al menos en teoría. No lo codifique, es una laguna estándar.
code-golf
combinatorics
equipado
fuente
fuente
n=15
fácilmenten=20
pero sufre mucho de desbordamientoall pairs are at most a distance of sqrt(2) apart
pero eso debería especificarse más claramente.Respuestas:
MATL , 12 bytes
Pruébalo en línea!
Explicación
fuente
Jalea ,
1413 bytes1 byte gracias a Dennis.
Pruébalo en línea!
Versión maffs rápida
Pruébalo en línea!
fuente
æ.`½
conÆḊ€
.n=5
, solo que no en un minuto. (puede tomar más de la edad del universo, tenga cuidado) Este no es el código más rápido, entonces, ¿por qué molestarse en hacer que su código se ejecute rápido?Python 2 ,
137133bytesSr. Xcoder y ovs: -4 bytes. Pruébalo en línea!
fuente
f=
)J , 40 bytes
Pruébalo en línea!
Se agota el tiempo de espera en TIO por 5 si usa precisión extendida (en
5x
lugar de5
). No me voy a molestar en probar con 6 en mi computadora, ya que eso sin duda bloqueará al intérprete.Buscando consejos sobre golf, específicamente la parte pasada la generación de las coordenadas. Siento que debería haber una manera de eliminar algunas de las tapas.
]<:[:+/&.:*:"1
puede ser reemplazado de manera equivalente por*:<:[:+/"1[:*:
.Explicación
Esta explicación se realiza en REPL (tres espacios indican un comando, ningún espacio indica una salida). Estaré preparando la respuesta.
Generando las coordenadas
#~ #: i.@^~
da todas las coordenadas que nos interesan en la red.^~
es un número elevado a sí mismo yi.
da el rango [0, n) donde n es su entrada.@
compone esas funciones.#~
copia un número por sí mismo, p. ej.#:
convierte su argumento derecho en la base especificada por la matriz dada como argumento izquierdo. El número de dígitos en la matriz corresponde al número de dígitos en esa salida base (y puede tener una base mixta) Por ejemplo,Entonces, en conjunto, esto dice enumerar a través de todos los valores base n (donde n es la entrada) hasta n ^ n, dándonos efectivamente nuestras coordenadas.
Obtener las distancias entre cada par
Primero tomamos la diferencia de cada coordenada con todas las demás usando la tabla de díadas
/
y el~
reflejo. Tenga en cuenta que esto no explica el hecho de que el orden no importa para los pares: esto genera distancias duplicadas.Luego usamos este verbo
+/&.:*:
en cada coordenada (en"1
, también conocido como rango uno). Este verbo es sum (+/
) bajo (&.:
) cuadrado (*:
). Under aplica el verbo derecho (cuadrado), luego recoge sus resultados y lo da como argumento del verbo izquierdo (suma). Luego aplica el inverso del verbo derecho (que sería la raíz cuadrada).Como era de esperar, muchas distancias son iguales.
Contando las distancias mayores o iguales a la entrada
La última parte es ver si la distancia es mayor o igual que la entrada usando
]<:
. Luego, todos los resultados se suman usando+/^:_
(suma hasta converger), contando el número de valores verdaderos. Luego, este valor se divide por 2 (2%~
aquí~
significa intercambiar el orden de los argumentos suministrados%
). La razón por la que podemos dividir entre 2 es porque para cada emparejamiento verdadero, habrá otro para el orden invertido, excepto para los emparejamientos que son una coordenada consigo mismo. Sin embargo, está bien, ya que darán como resultado una distancia de 0.fuente
+/@,@(-:@<:+/&.:*:@:-"1/~)#~#:i.@^~