Encuentra la diferencia entre el cuadrado de las sumas y la suma de los cuadrados.
Esta es la representación matemática:
Su programa / método debe tomar dos entradas, estos son sus límites inferior y superior del rango, e incluyen. Los límites serán enteros enteros por encima de 0.
Su programa / método debe devolver la respuesta.
Puede usar la base que desee, pero indique en su respuesta qué base ha utilizado.
Caso de prueba (Base 10)
5,9 970
91,123 12087152
1,10 2640
Este es el código de golf habitual, por lo que cuanto más corta sea la respuesta, mejor.
Respuestas:
Python 2, 43 bytes
Pruébalo en Ideone .
Cómo funciona
Llame a la función definida en la especificación g (a, b) . Tenemos eso
Defina la función f (x, y, s) de forma recursiva de la siguiente manera.
Al aplicar la relación de recurrencia de f (a, b, 0) un total de b - a veces, podemos mostrar eso.
Esta es la función f de la implementación. Mientras
b/a
devuelve un número entero distinto de cero,and
se ejecuta el siguiente código , implementando así la definición recursiva de f .Una vez que
b/a
llega a 0 , tenemos que b> a y la lambda devuelve False = 0 , implementando así el caso base de la definición de f .fuente
MATL , 9 bytes
Pruébalo en línea!
Explicación
Ejemplo
Estos son los resultados parciales de cada línea para entradas
5
y9
:&:
&:&*
&:&*XR
&:&*XRss
&:&*XRssE
fuente
Jalea,
98 bytesPruébalo en línea!
¡Gracias a FryAmTheEggman por un byte!
fuente
Python 2, 45 bytes
Solución de formulario cerrado: no es la más corta, pero pensé que valdría la pena publicarla de todos modos.
Explicación
Vamos a
p(n)
ser el n º número piramidal cuadrado , y det(n)
ser el n º número triangular . Entonces, para n sobre el rango a , ..., b :t(b)-t(a-1)
, yp(b) - p(a-1)
(t(b)-t(a-1))² - (p(b) - p(a-1))
.Esta expresión se reduce a la del código.
fuente
p(n)
eln
número piramidal cuadrado th yt(n)
eln
número triangular th . Entonces esta es una versión simplificada de(t(b)-t(a-1))^2 - (p(b) - p(a-1))
.(a-b-1)
factor por(b*(b+1)*(2b+1)-a*(a-1)*(2a-1))/6
mi cuenta.05AB1E, 8 bytes
Explained
Try it online
fuente
Mathematica, 21 bytes
Una función sin nombre que toma dos argumentos y devuelve la diferencia. Uso:
Aquí hay tres trucos de golf pequeños (y bastante estándar):
##
representa ambos argumentos a la vez, por lo que podemos usar la notación de prefijo paraRange
.Range@##
es una abreviatura para laRange[##]
que se expandeRange[a, b]
y nos brinda un rango inclusivo según sea necesario.Tr
es para rastrear, pero usarlo en un vector simplemente suma ese vector, ahorrando tres bytesTotal
.x.x
es un producto de punto que ahorra cuatro bytesTr[x^2]
.fuente
Variance
?Variance
is divided byn
and the other byn^2
and I don't see an easy way to undo those separately.Tr@#^2-#.#&@*Range
is only 18 bytes.Labyrinth,
2824 bytesTry it online!
Explanation
Since loops tend to be expensive in Labyrinth, I figured the explicit formula should be shortest, as it can be expressed as linear code.
El puntero de instrucciones llega a un callejón sin salida y tiene que darse la vuelta. Cuando ahora se encuentra
/
, intenta una división por cero (ya que la parte inferior de la pila está implícitamente llena de ceros), lo que termina el programa.fuente
Haskell, 34 bytes
Ejemplo de uso:
91 # 123
->12087152
.Nada que explicar
fuente
Matlab,
302928 bytesUsar la idea de Suever
norm
nos da 2 bytes menosVersión antigua (simple):
fuente
Octava,
2723 bytesCrea una función anónima llamada
ans
que acepta dos entradas:ans(lower, upper)
Demo en línea
Explicación
Crea un vector de fila de
x
ay
(inclusive) y lo almacena enz
. Luego sumamos todos los elementos usandosum
y lo elevamos al cuadrado (^2
). Para calcular la suma de los cuadrados, realizamos una multiplicación matricial entre el vector fila y su transposición. Esto cuadrará efectivamente cada elemento y resumirá el resultado. Luego restamos los dos.fuente
Java,
8477 caracteres,8477 bytes7 bytes más pequeños debido a Martin Ender y FryAmTheEggMan, gracias.
public int a(int b,int c){int e=0,f=0;for(;b<=c;e+=b,f+=b*b++);return e*e-f;}
Usando los tres casos de prueba en la publicación original: http://ideone.com/q9MZSZ
Sin golf:
El proceso se explica por sí mismo. Declaré dos variables para representar el cuadrado de las sumas y la suma de los cuadrados y las incrementé repetidamente de manera apropiada. Finalmente, devuelvo la diferencia calculada.
fuente
++
enf+=b*b++
(lo que puede dejar la tercera ranura delfor
vacío) y también no necesita de la plazae
antes de devolverlo (es decir, sólo lo hacenreturn e*e-f
).for
empty, move thef+=b*b++
in there, so you can save on both a semicolon and the braces.JavaScript (ES6), 46 bytes
fuente
JavaScript (ES6),
5037 bytesAhora es un puerto de la solución Python de @ Dennis ♦.
fuente
n=>m=>eval(`for(s=t=0;n<=m;t+=n++)s+=n*n;t*t-s`)
Factor, 48 bytes
Una función anónima.
fuente
Haskell, 36 bytes
Tenga en cuenta que
fuente
i+1
.Perl 6,
36 3231 bytesTest it
Explanation:
Test:
fuente
{$_=$^a..$^b;.sum²-[+] $_»²}
{.sum²-[+] $_»²}o&[..]
Brachylog, 24 bytes
Expects the 2 numbers in Input as a list, e.g.
[91:123]
.Explanation
fuente
APL,
2320 bytesFunciona en NARS2000.
fuente
MATL, 11 bytes
Pruébalo en línea!
Explicación:
fuente
Pyth, 11 bytes
Pruébalo en línea!
fuente
s*M.P}FQ2
Japt, 10 bytes
Intentalo
fuente
CJam, 17 bytes
Pruébalo aquí.
Explicación
Alternativamente, uno puede sumar los productos de todos los pares distintos (básicamente multiplicando el cuadrado de la suma y eliminando los cuadrados), pero eso es un byte más largo:
fuente
PowerShell v2 +, 47 bytes
Dos variaciones
En ambos casos, estamos generando un rango con el
..
operador, canalizándolo a un bucle|%{...}
. Cada iteración, estamos acumulando$o
y$p
como la suma o la suma de los cuadrados. Luego calculamos el cuadrado de las sumas con$o*$o
y restamos$p
. La salida se deja en la tubería y la impresión es implícita.fuente
JavaScript (ES6), 67 bytes
Banco de pruebas
fuente
J, 29 bytes
Port of Doorknob's Jelly respuesta .
Uso
Donde
>>
está STDIN,<<
es STDOUT yx
es para una precisión extendida.fuente
Pyke, 11 bytes
Pruébalo aquí!
fuente
Julia, 25 bytes
This is a function that accepts two integers and returns a 1x1 integer array.
The approach is simple: Construct a
UnitRange
from the endpointsa
andb
and call itx
, then sumx
, square it, and subtract its norm, which is computed astranspose(x) * x
.Pruébalo en línea! (incluye todos los casos de prueba)
fuente
a\b=-(x=a:b)'x+sum(x)^2
Guarda algunos bytes.TI-BASIC, 19 bytes
randIntNoRep
obtiene el rango (barajado). El resto es bastante autoexplicativo.fuente
Fith , 52 bytes
Esta es una función anónima que toma los dos números en la pila y deja un solo número.
Explicación:
fuente
GeoGebra, 91 bytes
Define una función (probablemente
e(x,y)
) que calcula la diferencia deseada.a(x)
calcula la suma de números naturales entre0
yx
.b(x)
calcula la suma de los cuadrados de los números naturales entre0
yx
.c(x,y)
primero calcula la suma de los números naturales entrex
yy
, luego cuadra esa suma.d(x,y)
calcula la suma de cuadrados entreb(x)
yb(y)
.La última línea define una función multivariable que finaliza el cálculo. A la función se le asigna automáticamente un nombre, guardando unos pocos bytes.
fuente
e(x,y)=
pretender darle un nombre, pero para guardar bytes, no lo hacemos aquí. GeoGebra asigna automáticamente un nombre a la expresión (probablemente e, ya que esa es la siguiente letra disponible). No tengo el entorno disponible en este momento, pero no usaría el panel CAS. El panel de álgebra y la barra de entrada deberían hacer el trabajo correctamente. (Ha pasado un tiempo desde que usé GGb en línea; mi imagen mental puede estar desactualizada.)