Znajdź różnicę między kwadratem sum a sumą kwadratów.
To matematyczne przedstawienie:
Twój program / metoda powinna przyjmować dwa dane wejściowe, są to dolne i górne granice zakresu i są włącznie. Limity będą pełnymi liczbami całkowitymi powyżej 0.
Twój program / metoda powinna zwrócić odpowiedź.
Możesz użyć dowolnej bazy, którą chcesz, ale w odpowiedzi podaj, której bazy użyłeś.
Walizka testowa (podstawa 10)
5,9 970
91,123 12087152
1,10 2640
Jest to zwykle kod-golf, więc im krótsza odpowiedź, tym lepiej.
Odpowiedzi:
Python 2, 43 bajty
Przetestuj na Ideone .
Jak to działa
Wywołaj funkcję zdefiniowaną w specyfikacji g (a, b) . Mamy to
Zdefiniuj rekurencyjnie funkcję f (x, y, s) w następujący sposób.
Stosując relację powtarzalności f (a, b, 0) w sumie b - a , możemy to pokazać.
To jest funkcja f implementacji. Podczas gdy
b/a
zwraca niezerową liczbę całkowitą,and
wykonywany jest następujący kod , implementując w ten sposób rekurencyjną definicję f .Gdy
b/a
osiągnie wartość 0 , mamy b> a, a lambda zwraca False = 0 , implementując w ten sposób podstawowy przypadek definicji f .źródło
MATL , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Przykład
Są to częściowe wyniki każdego wiersza dla danych wejściowych
5
i9
:&:
&:&*
&:&*XR
&:&*XRss
&:&*XRssE
źródło
Galaretka,
98 bajtówWypróbuj online!
Dzięki FryAmTheEggman za bajt!
źródło
Python 2, 45 bajtów
Rozwiązanie w formie zamkniętej - nie najkrótsze, ale pomyślałem, że i tak warto je opublikować.
Wyjaśnienie
Pozwolić
p(n)
być n th kwadratowy liczby piramidalnej , at(n)
być n th Liczba trójkątna . Następnie dla n powyżej zakresu a , ..., b :t(b)-t(a-1)
ip(b) - p(a-1)
(t(b)-t(a-1))² - (p(b) - p(a-1))
.To wyrażenie ogranicza się do tego w kodzie.
źródło
p(n)
byćn
th kwadrat numer piramidalny , at(n)
byćn
th Liczba trójkątna . To jest uproszczona wersja(t(b)-t(a-1))^2 - (p(b) - p(a-1))
.(a-b-1)
czynnik(b*(b+1)*(2b+1)-a*(a-1)*(2a-1))/6
.05AB1E, 8 bajtów
Wyjaśnił
Wypróbuj online
źródło
Mathematica, 21 bajtów
Funkcja bez nazwy, która bierze dwa argumenty i zwraca różnicę. Stosowanie:
Są tutaj trzy małe (i dość standardowe) sztuczki golfowe:
##
reprezentuje oba argumenty jednocześnie, dzięki czemu możemy użyć zapisu prefiksu dlaRange
.Range@##
jest skrótem, dlaRange[##]
którego rozszerza sięRange[a, b]
i daje nam zakres obejmujący zgodnie z wymaganiami.Tr
służy do śledzenia, ale użycie go na wektorze po prostu sumuje ten wektor, oszczędzając trzy bajtyTotal
.x.x
jest produktem kropkowym, co pozwala zaoszczędzić cztery bajtyTr[x^2]
.źródło
Variance
?Variance
jest podzielony przez,n
a drugi przezn^2
i nie widzę łatwego sposobu na ich oddzielenie.Tr@#^2-#.#&@*Range
ma tylko 18 bajtów.Labirynt ,
2824 bajtówWypróbuj online!
Wyjaśnienie
Ponieważ pętle są zwykle drogie w Labiryncie, pomyślałem, że wyraźna formuła powinna być najkrótsza, ponieważ może być wyrażona jako kod liniowy.
Wskaźnik instrukcji następnie uderza w ślepy zaułek i musi się odwrócić. Gdy napotka teraz
/
, próbuje podzielić przez zero (ponieważ spód stosu jest domyślnie wypełniony zerami), co powoduje zakończenie programu.źródło
Haskell, 34 bajty
Przykład użycia:
91 # 123
->12087152
.Nic do wyjaśnienia.
źródło
Matlab,
302928 bajtówWykorzystanie pomysłu Suever
norm
daje nam 2 bajty mniejStara (prosta) wersja:
źródło
Oktawa,
2723 bajtówTworzy anonimową funkcję o nazwie,
ans
która akceptuje dwa dane wejściowe:ans(lower, upper)
Demo online
Wyjaśnienie
Tworzy wektor wiersza od
x
doy
(włącznie) i zapisuje go wz
. Następnie sumujemy wszystkie elementy za pomocąsum
i kwadrat (it^2
). Aby obliczyć sumę kwadratów, wykonujemy mnożenie macierzy między wektorem wiersza a jego transpozycją. To skutecznie wyrówna każdy element i zsumuje wynik. Następnie odejmujemy dwa.źródło
Java,
8477 znaków,8477 bajtów7 bajtów mniejszych dzięki Martinowi Enderowi i FryAmTheEggMan, dziękuję.
public int a(int b,int c){int e=0,f=0;for(;b<=c;e+=b,f+=b*b++);return e*e-f;}
Wykorzystując trzy przypadki testowe w oryginalnym poście: http://ideone.com/q9MZSZ
Nie golfowany:
Proces jest dość oczywisty. Zadeklarowałem dwie zmienne do reprezentowania kwadratu sum i sumy kwadratów i wielokrotnie odpowiednio je zwiększałem. Na koniec zwracam obliczoną różnicę.
źródło
++
gof+=b*b++
(dzięki czemu możesz zostawić trzeci slot zfor
pustym miejscem), a także nie musisz kwadratowaće
przed zwróceniem (tj. Po prostu zróbreturn e*e-f
).for
pustego, przenieś gof+=b*b++
tam, abyś mógł zapisać zarówno średnik, jak i nawiasy klamrowe.JavaScript (ES6), 46 bajtów
źródło
JavaScript (ES6),
5037 bajtówTeraz port rozwiązania Python @ Dennis ♦.
źródło
n=>m=>eval(`for(s=t=0;n<=m;t+=n++)s+=n*n;t*t-s`)
Współczynnik, 48 bajtów
Anonimowa funkcja.
źródło
Haskell, 36 bajtów
Zauważ, że
źródło
i+1
.Perl 6 ,
36 3231 bajtówSprawdź to
Wyjaśnienie:
Test:
źródło
{$_=$^a..$^b;.sum²-[+] $_»²}
{.sum²-[+] $_»²}o&[..]
Brachylog , 24 bajty
Oczekuje 2 liczb na wejściu jako listy, np
[91:123]
.Wyjaśnienie
źródło
APL,
2320 bajtówDziała w NARS2000.
źródło
MATL, 11 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Pyth, 11 bajtów
Wypróbuj online!
źródło
s*M.P}FQ2
Japt, 10 bajtów
Spróbuj
źródło
CJam, 17 bajtów
Sprawdź to tutaj.
Wyjaśnienie
Alternatywnie można po prostu zsumować iloczyny wszystkich odrębnych par (w zasadzie pomnożenie kwadratu sumy i usunięcie kwadratów), ale jest to bajt dłuższy:
źródło
PowerShell v2 +, 47 bajtów
Dwie odmiany
W obu przypadkach generujemy zasięg z
..
operatorem, przesyłając go do pętli|%{...}
. Każdą iterację kumulujemy$o
i$p
jako sumę lub sumę kwadratów. Następnie obliczamy kwadrat sum za pomocą$o*$o
i odejmujemy$p
. Dane wyjściowe pozostają w potoku, a drukowanie jest niejawne.źródło
JavaScript (ES6), 67 bajtów
Pakiet testowy
źródło
J, 29 bajtów
Odpowiedź Galaretki Portu Doorknob .
Stosowanie
Gdzie
>>
jest STDIN,<<
jest STDOUT ix
służy do zwiększonej precyzji.źródło
Pyke, 11 bajtów
Wypróbuj tutaj!
źródło
Julia, 25 bajtów
Jest to funkcja, która akceptuje dwie liczby całkowite i zwraca tablicę liczb całkowitych 1x1.
Podejście jest proste: zbuduj a
UnitRange
z punktów końcowycha
ib
wywołaj gox
, a następnie zsumujx
, wyprostuj i odejmij jego normę, która jest obliczana jakotranspose(x) * x
.Wypróbuj online! (obejmuje wszystkie przypadki testowe)
źródło
a\b=-(x=a:b)'x+sum(x)^2
oszczędza kilka bajtów.TI-BASIC, 19 bajtów
randIntNoRep
dostaje zasięg (potasowane). Reszta jest dość oczywista.źródło
Po 52 bajty
Jest to anonimowa funkcja, która pobiera dwie liczby ze stosu i pozostawia jedną liczbę.
Wyjaśnienie:
źródło
GeoGebra, 91 bajtów
Definiuje funkcję (prawdopodobnie
e(x,y)
), która oblicza pożądaną różnicę.a(x)
oblicza sumę liczb naturalnych między0
ix
.b(x)
oblicza sumę kwadratów liczb naturalnych między0
ix
.c(x,y)
najpierw oblicza sumę liczb naturalnych międzyx
iy
, a następnie kwadraty tej sumy.d(x,y)
oblicza sumę kwadratów międzyb(x)
ib(y)
.Ostatni wiersz definiuje funkcję wielu zmiennych, która kończy obliczenia. Funkcja ma automatycznie przypisaną nazwę, oszczędzając kilka bajtów.
źródło
e(x,y)=
nadać temu nazwę, ale żeby zaoszczędzić bajty, nie ma nas tutaj. GeoGebra automatycznie przypisuje wyrażeniu nazwę (prawdopodobnie e, ponieważ jest to następna dostępna litera). Obecnie nie mam dostępnego środowiska, ale nie użyłbym panelu CAS. Panel algebry i pasek wprowadzania powinny poprawnie wykonać zadanie. (Minęło trochę czasu, odkąd korzystałem z GGb online; moje wyobrażenie o tym może być nieaktualne.)