Encontre a diferença entre o quadrado da soma e a soma dos quadrados.
Esta é a representação matemática:
Seu programa / método deve receber duas entradas, esses são os limites inferior e superior da faixa e são inclusivos. Os limites serão inteiros inteiros acima de 0.
Seu programa / método deve retornar a resposta.
Você pode usar qualquer base que desejar, mas indique em sua resposta qual base você usou.
Caso de teste (Base 10)
5,9 970
91,123 12087152
1,10 2640
Este é o código-golfe habitual, portanto, quanto menor a resposta, melhor.
Respostas:
Python 2, 43 bytes
Teste em Ideone .
Como funciona
Chame a função definida na especificação g (a, b) . Nós temos isso
Defina a função f (x, y, s) recursivamente da seguinte maneira.
Aplicando a relação de recorrência de f (a, b, 0) um total de b - a vezes, podemos mostrar isso.
Essa é a função f da implementação. Enquanto
b/a
retorna um número inteiro diferente de zero, o código a seguirand
é executado, implementando a definição recursiva de f .Uma vez que
b/a
atinge 0 , temos que b> a e os lambda retorna Falso = 0 , implementando assim o caso base da definição de f .fonte
MATL , 9 bytes
Experimente online!
Explicação
Exemplo
Estes são os resultados parciais de cada linha para entradas
5
e9
:&:
&:&*
&:&*XR
&:&*XRss
&:&*XRssE
fonte
Geléia,
98 bytesExperimente online!
Obrigado a FryAmTheEggman por um byte!
fonte
Python 2, 45 bytes
Solução de formulário fechado - não a mais curta, mas achei que valeria a pena postar de qualquer maneira.
Explicação
Vamos
p(n)
ser o n º número piramidal quadrado , et(n)
ser o n º número triangular . Então, para n acima do intervalo a , ..., b :t(b)-t(a-1)
ep(b) - p(a-1)
(t(b)-t(a-1))² - (p(b) - p(a-1))
.Essa expressão se reduz à do código.
fonte
p(n)
o número piramidal quadradon
th e o número triangular th . Então esta é uma versão simplificada do .t(n)
n
(t(b)-t(a-1))^2 - (p(b) - p(a-1))
(a-b-1)
fator(b*(b+1)*(2b+1)-a*(a-1)*(2a-1))/6
sozinho.05AB1E, 8 bytes
Explicado
Experimente online
fonte
Mathematica, 21 bytes
Uma função sem nome, recebendo dois argumentos e retornando a diferença. Uso:
Há três pequenos truques de golfe (e bastante padrão) aqui:
##
representa os dois argumentos de uma só vez, para que possamos usar a notação de prefixo paraRange
.Range@##
é uma abreviação para aRange[##]
qual se expandeRange[a, b]
e nos fornece um intervalo inclusivo, conforme necessário.Tr
é para rastreamento, mas usá-lo em um vetor simplesmente soma esse vetor, economizando três bytesTotal
.x.x
é um produto escalar, economizando quatro bytesTr[x^2]
.fonte
Variance
ajuda?Variance
é dividido porn
outron^2
e não vejo uma maneira fácil de desfazê-los separadamente.Tr@#^2-#.#&@*Range
tem apenas 18 bytes.Labirinto ,
2824 bytesExperimente online!
Explicação
Como os loops tendem a ser caros no Labirinto, imaginei que a fórmula explícita deveria ser mais curta, pois pode ser expressa como código linear.
O ponteiro de instruções atinge um beco sem saída e precisa se virar. Quando encontra agora
/
, tenta uma divisão por zero (uma vez que a parte inferior da pilha está implicitamente preenchida com zeros), que finaliza o programa.fonte
Haskell, 34 bytes
Exemplo de uso:
91 # 123
->12087152
.Nada a explicar.
fonte
Matlab,
302928 bytesUsar a idéia de Suever
norm
nos dá 2 bytes a menosVersão antiga (simples):
fonte
Oitava,
2723 bytesCria uma função anônima chamada
ans
que aceita duas entradas:ans(lower, upper)
Demo Online
Explicação
Cria um vetor de linha de
x
paray
(inclusive) e o armazenaz
. Em seguida, somamos todos os elementos usandosum
e o usamos ao quadrado (^2
). Para calcular a soma dos quadrados, realizamos a multiplicação de matrizes entre o vetor de linha e sua transposição. Isso efetivamente quadrará cada elemento e resumirá o resultado. Subtraímos os dois.fonte
Java,
8477 caracteres,8477 bytes7 bytes menor devido a Martin Ender e FryAmTheEggMan, obrigado.
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 os três casos de teste na postagem original: http://ideone.com/q9MZSZ
Ungolfed:
Processo é bastante auto-explicativo. Declarei duas variáveis para representar o quadrado das somas e a soma dos quadrados e as incrementei repetidamente de forma apropriada. Finalmente, retorno a diferença calculada.
fonte
++
-of+=b*b++
(para deixar o terceiro slotfor
vazio) e também não precisa ajustar o quadradoe
antes de devolvê-lo (ou seja, bastareturn e*e-f
).for
vazio, mova of+=b*b++
para lá, para economizar tanto o ponto-e-vírgula quanto o aparelho.JavaScript (ES6), 46 bytes
fonte
JavaScript (ES6),
5037 bytesAgora, um porto da solução Python de @ Dennis ♦.
fonte
n=>m=>eval(`for(s=t=0;n<=m;t+=n++)s+=n*n;t*t-s`)
Fator, 48 bytes
Uma função anônima.
fonte
Haskell, 36 bytes
Observe que
fonte
i+1
.Perl 6 ,
36 3231 bytesTeste-o
Explicação:
Teste:
fonte
{$_=$^a..$^b;.sum²-[+] $_»²}
{.sum²-[+] $_»²}o&[..]
Braquilog , 24 bytes
Espera os 2 números em Entrada como uma lista, por exemplo
[91:123]
.Explicação
fonte
APL,
2320 bytesTrabalha em NARS2000.
fonte
MATL, 11 bytes
Experimente online!
Explicação:
fonte
Pitão, 11 bytes
Experimente online!
fonte
s*M.P}FQ2
Japonês, 10 bytes
Tente
fonte
CJam, 17 bytes
Teste aqui.
Explicação
Como alternativa, pode-se somar os produtos de todos os pares distintos (basicamente multiplicando o quadrado da soma e removendo os quadrados), mas isso é um byte mais longo:
fonte
PowerShell v2 +, 47 bytes
Duas variações
Nos dois casos, estamos gerando um intervalo com o
..
operador, canalizando isso para um loop|%{...}
. A cada iteração, estamos acumulando$o
e$p
como a soma ou a soma dos quadrados. Em seguida, calculamos o quadrado das somas com$o*$o
e subtraímos$p
. A saída é deixada no pipeline e a impressão está implícita.fonte
JavaScript (ES6), 67 bytes
Suíte de teste
fonte
J, 29 bytes
Resposta da Geléia do Porto da Maçaneta .
Uso
Onde
>>
está STDIN,<<
está STDOUT ex
é para maior precisão.fonte
Pyke, 11 bytes
Experimente aqui!
fonte
Julia, 25 bytes
Essa é uma função que aceita dois números inteiros e retorna uma matriz inteira 1x1.
A abordagem é simples: construa a
UnitRange
partir dos pontos finaisa
eb
chame-ax
, depois somex
, quadrada e subtraia sua norma, que é calculada comotranspose(x) * x
.Experimente online! (inclui todos os casos de teste)
fonte
a\b=-(x=a:b)'x+sum(x)^2
salva alguns bytes.TI-BASIC, 19 bytes
randIntNoRep
obtém o intervalo (embaralhado). O resto é bastante auto-explicativo.fonte
Quinto , 52 bytes
Essa é uma função anônima que pega os dois números na pilha e deixa um único número.
Explicação:
fonte
GeoGebra, 91 bytes
Define uma função (provavelmente
e(x,y)
) que calcula a diferença desejada.a(x)
calcula a soma dos números naturais entre0
ex
.b(x)
calcula a soma dos quadrados dos números naturais entre0
ex
.c(x,y)
primeiro calcula a soma dos números naturais entrex
ey
, em seguida, esquadrinha essa soma.d(x,y)
calcula a soma dos quadrados entreb(x)
eb(y)
.A última linha define uma função multivariável que termina o cálculo. A função recebe um nome automaticamente, economizando alguns bytes.
fonte
e(x,y)=
um nome a ele, mas, para salvar bytes, não o fazemos aqui. O GeoGebra atribui automaticamente à expressão um nome (provavelmente e, já que essa é a próxima letra disponível). Não tenho o ambiente disponível no momento, mas não usaria o painel CAS. O painel de álgebra e a barra de entrada devem fazer o trabalho corretamente. (Faz um tempo desde que eu usei o GGb online; minha imagem mental dele pode estar desatualizada.)