Tomado de: OEIS- A071816
Su tarea, dado un límite superior de n
, es encontrar la cantidad de soluciones que satisfacen la ecuación:
a+b+c = x+y+z, where 0 <= a,b,c,x,y,z < n
La secuencia comienza como se describe en la página OEIS y como a continuación (1 indexado):
1, 20, 141, 580, 1751, 4332, 9331, 18152, 32661, 55252, 88913, 137292, 204763, 296492, 418503, 577744, 782153, 1040724, 1363573, 1762004, 2248575, 2837164, 3543035, 4382904, 5375005, 6539156, 7896825, 9471196, 11287235, 13371756
Para n = 1
, solo hay una solución:(0,0,0,0,0,0)
Para n = 2
, hay 20 soluciones ordenadas (a,b,c,x,y,z)
para a+b+c = x+y+z
:
(0,0,0,0,0,0), (0,0,1,0,0,1), (0,0,1,0,1,0), (0,0,1,1,0,0), (0,1,0,0,0,1),
(0,1,0,0,1,0), (0,1,0,1,0,0), (0,1,1,0,1,1), (0,1,1,1,0,1), (0,1,1,1,1,0),
(1,0,0,0,0,1), (1,0,0,0,1,0), (1,0,0,1,0,0), (1,0,1,0,1,1), (1,0,1,1,0,1),
(1,0,1,1,1,0), (1,1,0,0,1,1), (1,1,0,1,0,1), (1,1,0,1,1,0), (1,1,1,1,1,1).
I & O
- La entrada es un entero entero que denota
n
. - La salida es un único número entero / cadena que denota
f(n)
, dondef(...)
está la función anterior. - La indexación es exactamente como se describe, ninguna otra indexación es aceptable.
Este es el código de golf , el menor recuento de bytes gana.
Respuestas:
Jalea ,
96 bytesO (n 6 ) solución.
Pruébalo en línea!
Cómo funciona
fuente
O(n^6)
pensamiento: P.Mathematica 17 o 76 Bytes
Usando la fórmula:
(Guardado 3 bytes por @GregMartin y @ngenisis)
En lugar de usar la fórmula, aquí literalmente calculo todas las soluciones y las cuento.
fuente
11/20
por.55
un ahorro de dos bytes.Haskell , 48 bytes
No noté la fórmula antes de escribir esto, por lo que definitivamente no es el método general más corto (o más rápido), pero pensé que era bonito.
Pruébalo en línea!
f n
genera todas las listas de 6 elementos de[1..n]
, luego cuenta los cuya suma alterna es 0. Utiliza el hecho de quea+b+c==d+e+f
es igual aa-(d-(b-(e-(c-f))))==0
, y también que no importa si sumamos un 1 a todos los números.fuente
MATL , 12 bytes
Pruébalo en línea!
Explicación
¡No podía perder la oportunidad de usar la convolución nuevamente!
Esto hace uso de la siguiente caracterización de OEIS:
y, por supuesto, la multiplicación polinómica es convolución.
fuente
Jalea , 9 bytes
No es tan corto como el de @ Dennis, pero termina en menos de 20 segundos para la entrada
100
.Pruébalo en línea!
Cómo funciona
fuente
Pyth,
1312 bytesSalvado un byte gracias a Leaky Nun.
Explicación
fuente
/LJJ
lugar dem/JdJ
.Python 3 , 28 bytes
Pruébalo en línea!
fuente
TI-BASIC, 19 bytes
Evalúa la fórmula OEIS.
fuente
Prompt x
= 2 bytes?Oasis , 17 bytes
Pruébalo en línea!
Oasis es un lenguaje basado en pila optimizado para secuencias recurrentes. Sin embargo, la fórmula de recursión sería demasiado larga para este caso.
fuente
Brachylog , 17 bytes
Pruébalo en línea!
Explicación
fuente
ᶜ
debería venir automáticamente≜
ᶜ
solo, es un metapredicado.JavaScript, 24 bytes
Utiliza la fórmula de la página OEIS.
Pruébalo en línea!
fuente
x=>x**5*.55+x**3/4+x/5
Octava ,
252321 bytesPruébalo en línea!
Utiliza la fórmula de la entrada OEIS. Ahorró
doscuatro bytes reorganizando la fórmula y usando en.55
lugar de11/20
, gracias a fəˈnɛtɪk.fuente
Python 2.7,
1091059996 bytesGracias ETHproductions y Dennis por guardar algunos bytes:
fuente
sum(sum(x[:3])==sum(x[3:])for x ...)
Sería aún más corto. Además,from itertools import*
guarda un byte.for
. Además, no requerimos que las funciones se nombren de manera predeterminada, por lo que puede eliminarlash=
.Mathematica, 52 bytes
La implementación de Kelly Lowder de la fórmula OEIS es mucho más corta, pero esto calcula los números directamente:
Bueno, en realidad cuenta con el número de soluciones
1 <= a,b,c,x,y,z <= n
. Este es el mismo número, ya que agregar 1 a todas las variables no cambia la igualdad.Explicación:
Range@#~Tuples~6
hace todas las listas de seis enteros entre 1 yn,#~Partition~3&/@
divide cada lista en dos listas de longitud 3,Tr/@
suma estas sublistas yCount[...,{n_,n_}]
cuenta cuántos pares tienen la misma suma. Tuve mucha suerte con el orden de precedencia entref @
,f /@
y~f~
!fuente
Octava , 41 bytes
Pruébalo en línea!
Similar a mi respuesta MATL , pero calcula la convolución a través de una transformada discreta de Fourier (
fft
) con un número suficiente de puntos (n^2
).~~(1:n)
se usa como una versión más corta deones(1,n)
.round
es necesario debido a errores de coma flotante.fuente
CJam , 17 bytes
La entrada de
11
tiempos de espera en TIO,12
y superior se queda sin memoria.Pruébalo en línea!
Explicación
fuente
Clojure, 79 bytes
Toneladas de repetición en el código, en un mayor número de variables, una macro podría ser más corta.
fuente