La igualdad viene en tres

11

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), donde f(...)está la función anterior.
  • La indexación es exactamente como se describe, ninguna otra indexación es aceptable.

Este es el , el menor recuento de bytes gana.

Urna de pulpo mágico
fuente
Ahhh mierda, no noté la fórmula directa en OEIS, pensé que esto no sería tan fácil. Oh, bueno, no estoy haciendo +1 en los puertos directos de esa ecuación; P.
Urna mágica de pulpo
1
Al menos la fórmula no fue perfecta: P
fəˈnɛtɪk
Por otra parte, le da a los reg-langs una oportunidad contra los eso-langs.
Urna mágica de pulpo
¿Sería mejor si el título es "la igualdad viene en trillizos"?
Leaky Nun

Respuestas:

11

Jalea , 9 6 bytes

ṗ6ḅ-ċ0

O (n 6 ) solución.

Pruébalo en línea!

Cómo funciona

ṗ6ḅ-ċ0  Main link. Argument: n

ṗ6      Cartesian power 6; build all 6-tuples (a, x, b, y, c, z) of integers in
        [1, ..., n]. The challenge spec mentions [0, ..., n-1], but since there
        are three summands on each side, this doesn't matter.
  ḅ-    Unbase -1; convert each tuple from base -1 to integer, mapping (a, ..., z)
        to a(-1)**5 + x(-1)**4 + b(-1)**3 + y(-1)**2 + c(-1)**1 + z(-1)**0, i.e.,
        to -a + x - b + y - c + z = (x + y + z) - (a + b + c). This yields 0 if and
        only if the 6-tuple is a match.
    ċ0  Count the number of zeroes.
Dennis
fuente
¡Decir ah! Tengo que amar las respuestas teóricas (mi base para una respuesta teórica es que ahora se ejecuta en TIO para valores grandes de n , esto probablemente sea malo). Esperaba ver un O(n^6)pensamiento: P.
Magic Octopus Urn
9

Mathematica 17 o 76 Bytes

Usando la fórmula:

.55#^5+#^3/4+#/5&

(Guardado 3 bytes por @GregMartin y @ngenisis)

En lugar de usar la fórmula, aquí literalmente calculo todas las soluciones y las cuento.

Length@Solve[a+b+c==x+y+z&&And@@Table[(0<=i<#),{i,{a,b,c,x,y,z}}],Integers]&
Kelly Lowder
fuente
2
Gracias por publicar la forma de fuerza no bruta :). +1 para cualquier respuesta matemática que no sea una ecuación o una función incorporada.
Urna mágica de pulpo
Según esta respuesta , puede reemplazar 11/20por .55un ahorro de dos bytes.
Greg Martin
Tampoco necesita el asterisco en el primer término.
ngenisis
8

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.

f n=sum[1|0<-foldr1(-)<$>pure[1..n]`mapM`[1..6]]

Pruébalo en línea!

f ngenera todas las listas de 6 elementos de [1..n], luego cuenta los cuya suma alterna es 0. Utiliza el hecho de que a+b+c==d+e+fes igual a a-(d-(b-(e-(c-f))))==0, y también que no importa si sumamos un 1 a todos los números.

Ørjan Johansen
fuente
He notado que, a menudo, la respuesta más corta es la menos impresionante;). Este es un uso bastante bueno de fold que no hubiera considerado antes de ver esta respuesta.
Urna mágica de pulpo
6

MATL , 12 bytes

l6:"G:gY+]X>

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:

a(n) = largest coefficient of (1+...+x^(n-1))^6

y, por supuesto, la multiplicación polinómica es convolución.

l        % Push 1
6:"      % Do the following 6 times
  G:g    %   Push a vector of n ones, where n is the input
  Y+     %   Convolution
]        % End
X>       % Maximum
Luis Mendo
fuente
5

Jalea , 9 bytes

ṗ3S€ĠL€²S

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

ṗ3S€ĠL€²S  Main link. Argument: n

ṗ3         Cartesian power; yield all subsets of [1, ..., n] of length 3.
  S€       Sum each. 
    Ġ      Group indices by their values; for each unique sum S, list all indices whose
           values are equal to S.
     L€    Length each; for each unique sum S, yield the number of items in the original
           array that sum to S.
       ²   Square each; for each unique sum S, yield the number of pairs that both sum to S.
        S  Sum; yield the total number of equal pairs.
ETHproductions
fuente
¿Puedes explicar este método? Actualmente estoy en el proceso de aprender Jelly, pero todavía no soy lo suficientemente bueno como para enviar respuestas reales todavía; Siempre te busco a ti, Dennis y algunos otros para obtener buenos ejemplos.
Urna mágica de pulpo
@carusocomputing Terminó la explicación. Avíseme si todavía tiene alguna pregunta :-)
ETHproductions
Impresionante, estoy confundido sobre la optimización de las respuestas de la implementación más básica de fuerza bruta que haría con el loco código corto que veo publicando; pero siento que cada explicación está un paso más cerca, ¡gracias!
Urna mágica del pulpo
5

Pyth, 13 12 bytes

JsM^UQ3s/LJJ

Salvado un byte gracias a Leaky Nun.

Explicación

JsM^UQ3s/LJJ
   ^UQ3         Get all triples in the range.
JsM             Save the sums as J.
        /LJJ    Count occurrences of each element of J in J.
       s        Take the sum.

fuente
+1 por no usar la fórmula directa: P.
Urna mágica de pulpo
Es posible que desee publicar un enlace al intérprete en línea .
Leaky Nun
Además, puede usar en /LJJlugar de m/JdJ.
Leaky Nun
2

TI-BASIC, 19 bytes

:Prompt X
:.05X(11X^4+5X²+4

Evalúa la fórmula OEIS.

Scott Milner
fuente
1
¿Cómo estás contando los bytes aquí? Prompt x= 2 bytes?
Magic Octopus Urn
@carusocomputing TI-BASIC es calificado por tokens
dzaima
1
Es un poco triste que haya publicado una respuesta de TI-BASIC 5 veces antes y nunca la haya calificado correctamente ahora que reviso mi historial ._.
Magic Octopus Urn
2

Oasis , 17 bytes

5m11*n3m5*nz++20÷

5                   n 5             implicit n for illustration
 m                  n**5
  11                n**5 11
    *               11*n**5
     n              11*n**5 n
      3             11*n**5 n 3
       m            11*n**5 n**3
        5           11*n**5 n**3 5
         *          11*n**5 5*n**3
          n         11*n**5 5*n**3 n
           z        11*n**5 5*n**3 4*n
            +       11*n**5 5*n**3+4*n
             +      11*n**5+5*n**3+4*n
              20    11*n**5+5*n**3+4*n 20
                ÷  (11*n**5+5*n**3+4*n)÷20

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.

Monja permeable
fuente
2

Brachylog , 17 bytes

{>ℕ|↰}ᶠ⁶ḍD+ᵐ=∧D≜ᶜ

Pruébalo en línea!

Explicación

{  |↰}ᶠ⁶           Generate a list of 6 variables [A,B,C,D,E,F]...
 >ℕ                  ...which are all in the interval [0, Input)
        ḍD         Dichotomize; D = [[A,B,C],[D,E,F]]
          +ᵐ=      A + B + C must be equal to D + E + F
             ∧
              D≜ᶜ  Count the number of possible ways you can label the elements of D while
                     satisfying the constraints they have
Fatalizar
fuente
Supongo que debería venir automáticamente
Leaky Nun
@LeakyNun No puedes correr solo, es un metapredicado.
Fatalize
Pero aún así, si se usa en una lista, etiquetar esa lista podría convertirse en el predicado predeterminado, ¿no?
mat
@mat Se podría hacer de esa manera, pero en este momento no se puede usar un metapredicado en una variable.
Fatalize
1

JavaScript, 24 bytes

x=>11*x**5/20+x**3/4+x/5

Utiliza la fórmula de la página OEIS.

Pruébalo en línea!

fəˈnɛtɪk
fuente
Creo que puede guardar dos bytes conx=>x**5*.55+x**3/4+x/5
ETHproductions
@ETHproductions hay errores de coma flotante si uso * .55 en lugar de *
11/20
1

Octava , 25 23 21 bytes

@(n).55*n^5+n^3/4+n/5

Pruébalo en línea!

Utiliza la fórmula de la entrada OEIS. Ahorró dos cuatro bytes reorganizando la fórmula y usando en .55lugar de 11/20, gracias a fəˈnɛtɪk.

Stewie Griffin
fuente
1

Python 2.7, 109 105 99 96 bytes

Gracias ETHproductions y Dennis por guardar algunos bytes:

from itertools import*
lambda s:sum(sum(x[:3])==sum(x[3:])for x in product(range(s),repeat=6))
acidtobi
fuente
Interesante, ¿Python 3 no tiene funciones de rango más corto que 2.7?
Urna mágica del pulpo
sum(sum(x[:3])==sum(x[3:])for x ...)Sería aún más corto. Además, from itertools import*guarda un byte.
Dennis
No necesitas el espacio antes for. Además, no requerimos que las funciones se nombren de manera predeterminada, por lo que puede eliminarlas h=.
Dennis
1

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:

Count[Tr/@#~Partition~3&/@Range@#~Tuples~6,{n_,n_}]&

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~6hace 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 entre f @, f /@y ~f~!

No un arbol
fuente
1

Octava , 41 bytes

@(n)round(max(ifft(fft(~~(1:n),n^2).^6)))

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 de ones(1,n). roundes necesario debido a errores de coma flotante.

Luis Mendo
fuente
0

CJam , 17 bytes

ri,6m*{3/::+:=},,

La entrada de 11tiempos de espera en TIO, 12y superior se queda sin memoria.

Pruébalo en línea!

Explicación

ri                e# Read an int from input.
  ,               e# Generate the range 0 ... input-1.
   6m*            e# Take the 6th Cartesian power of the range.
      {           e# Keep only the sets of 6 values where:
       3/         e#  The set split into (two) chunks of 3
         ::+:=    e#  Have the sums of both chunks equal.
              },  e# (end of filter)
                , e# Get the length of the resulting list.
Gato de negocios
fuente
0

Clojure, 79 bytes

#(count(for[r[(range %)]a r b r c r x r y r z r :when(=(+ a b c)(+ x y z))]1))

Toneladas de repetición en el código, en un mayor número de variables, una macro podría ser más corta.

NikoNyrh
fuente