Jumlah perbedaan kuadrat

15

Jumlah kuadrat dari sepuluh bilangan alami pertama adalah, 12+22++102=385

Kuadrat dari jumlah sepuluh bilangan alami pertama adalah,

(1+2+...+10)2=552=3025

Oleh karena itu perbedaan antara jumlah kuadrat dari sepuluh bilangan alami pertama dan kuadrat dari jumlah tersebut

3025385=2640

Untuk input n yang diberikan, temukan perbedaan antara jumlah kuadrat dari n bilangan alami pertama dan kuadrat dari jumlah.

Uji kasus

1       => 0
2       => 4
3       => 22
10      => 2640
24      => 85100
100     => 25164150

Tantangan ini pertama kali diumumkan di Project Euler # 6 .

Kriteria Menang

  • Tidak ada aturan tentang apa yang seharusnya menjadi perilaku dengan input negatif atau nol.

  • Jawaban terpendek menang.

Eduardo Hoefel
sumber
4
Tantangan ini membutuhkan kriteria kemenangan (misalnya golf kode)
dylnan
2
Ini adalah bagian dari pertanyaan ini
caird coinheringaahing
1
Bisakah urutan 0 diindeks? yaitu bilangan alami hingga n?
Jo King
3
@ Enigma Saya benar-benar tidak berpikir bahwa ini adalah duplikat dari target karena banyak jawaban di sini tidak dapat dengan mudah menjawabnya, jadi ini menambahkan sesuatu.
Jonathan Allan

Jawaban:

10

Jelly ,  5  4 byte

Ḋ²ḋṖ

Cobalah online!

Bagaimana?

Menerapkan i=2n(i2(i1)) ...

Ḋ²ḋṖ - Link: non-negative integer, n
Ḋ    - dequeue (implicit range)       [2,3,4,5,...,n]
 ²   - square (vectorises)            [4,9,16,25,...,n*n]
   Ṗ - pop (implicit range)           [1,2,3,4,...,n-1]
  ḋ  - dot product                    4*1+9*2+16*3+25*4+...+n*n*(n-1)
Jonathan Allan
sumber
8

Python 3 ,  28  27 byte

-1 terima kasih kepada xnor

lambda n:(n**3-n)*(n/4+1/6)

Cobalah online!

Menerapkan n(n1)(n+1)(3n+2)/12


Python 2,  29  28 byte:lambda n:(n**3-n)*(3*n+2)/12

Jonathan Allan
sumber
1
Anda dapat mencukur satu byte dengan n*~-n**2*atau (n**3-n)*.
xnor
8

APL (Dyalog Unicode) , 10 byte

1⊥⍳×⍳×1-⍨⍳

Cobalah online!

Bagaimana itu bekerja

1⊥⍳×⍳×1-⍨⍳
  ⍳×⍳×1-⍨⍳  Compute (x^3 - x^2) for 1..n
1          Sum

Menggunakan fakta bahwa "kuadrat jumlah" sama dengan "jumlah kubus".

Bubbler
sumber
Bagi saya 1⊥⍳ × ⍳ × 1-⍨⍳ bukan fungsi; Saya mencoba 1⊥⍳ × ⍳ × 1-⍨⍳10 dan bagi saya tidak mengkompilasi ...
RosLuP
1
@RosLuP Anda harus menetapkannya ke variabel terlebih dahulu (seperti yang saya lakukan di tautan TIO) atau membungkusnya di dalam sepasang tanda kurung, sebagai (1⊥⍳×⍳×1-⍨⍳)10.
Bubbler
7

TI-Basic (seri TI-83), 12 11 byte

sum(Ans² nCr 2/{2,3Ans

Implements (n22)(12+13n). Membawa inputAns: misalnya, jalankan10:prgmXuntuk menghitung hasil untuk input10.

Misha Lavrov
sumber
Penggunaan yang bagus nCr!
Lynn
6

Brain-Flak , 74 72 68 64 byte

((([{}])){({}())}{})([{({}())({})}{}]{(({}())){({})({}())}{}}{})

Cobalah online!

Cara yang cukup sederhana untuk melakukannya dengan beberapa perubahan yang rumit. Semoga seseorang akan menemukan beberapa trik untuk membuat ini lebih pendek.

Posting Rock Garf Hunter
sumber
5

Arang , 12 10 byte

IΣEN×ιX⊕ι²

(1nx)2=1nx3(1nx)21nx2=1n(x3x2)=1n(x1)x2=0n1x(x+1)2

   N        Input number
  E         Map over implicit range i.e. 0 .. n - 1
        ι   Current value
       ⊕    Incremented
         ²  Literal 2
      X     Power
     ι      Current value
    ×       Multiply
 Σ          Sum
I           Cast to string
            Implicitly print
Neil
sumber
5

Perl 6 , 22 byte

{sum (1..$_)>>²Z*^$_}

Cobalah online!

Menggunakan konstruksi saya=1n(saya2(saya-1))

Jo King
sumber
4

Japt -x, 9 8 5 4 byte

õ²í*

Cobalah


Penjelasan

õ        :Range [1,input]
 ²       :Square each
  í      :Interleave with 0-based indices
   *     :Reduce each pair by multiplication
         :Implicit output of the sum of the resulting array
Shaggy
sumber
4

JavaScript, 20 bytes

f=n=>n&&n*n*--n+f(n)

Try it online

Shaggy
sumber
what deviltry is this
don bright
3

APL(Dyalog), 17 bytes

{+/(¯1↓⍵)×1↓×⍨⍵}⍳

(Much longer) Port of Jonathan Allan's Jelly answer.

Try it online!

Quintec
sumber
Go tacit and combine the drops: +/¯1↓⍳×1⌽⍳×⍳
Adám
3

APL (Dyalog), 16 bytes

((×⍨+/)-(+/×⍨))⍳

Try it online!

 (×⍨+/)            The square  self) of the sum (+ fold)
       -           minus
        (+/×⍨)     the sum of the square
(             )⍳   of [1, 2,  input].
Lynn
sumber
(+/×⍨)1⊥×⍨ as per tip.
Adám
1
A further byte could be saved by keeping the inside (×⍨1⊥⍳)-⍳+.×⍳
Kritixi Lithos
3

Mathematica, 21 17 bytes

-4 bytes thanks to alephalpha.

(3#+2)(#^3-#)/12&

Pure function. Takes an integer as input and returns an integer as output. Just implements the polynomial, since Sums, Ranges, Trs, etc. take up a lot of bytes.

LegionMammal978
sumber
(3#+2)(#^3-#)/12&
alephalpha
@alephalpha Thanks!
LegionMammal978
It's possible to get there without just evaluating the polynomial: #.(#^2-#)&@*Range implements another common solution. (But it's also 17 bytes.) And we can implement the naive algorithm in 18 bytes: Tr@#^2-#.#&@*Range.
Misha Lavrov
3

dc, 16 bytes

?dd3^r-r3*2+*C/p

Implements (n3n)(3n+2)/12

Try it online!

Digital Trauma
sumber
3

05AB1E, 8 bytes

ÝDOnsnO-

Explanation:

ÝDOnsnO-     //Full program
Ý            //Push [0..a] where a is implicit input
 D           //Duplicate top of stack
  On         //Push sum, then square it
    s        //Swap top two elements of stack
     nO      //Square each element, then push sum
       -     //Difference (implicitly printed)

Try it online!

Cowabunghole
sumber
LDnOsOn- was my first attempt too.
Magic Octopus Urn
3

C, C++, 46 40 37 bytes ( #define ), 50 47 46 bytes ( function )

-1 byte thanks to Zacharý

-11 bytes thanks to ceilingcat

Macro version :

#define F(n)n*n*~n*~n/4+n*~n*(n-~n)/6

Function version :

int f(int n){return~n*n*n*~n/4+n*~n*(n-~n)/6;}

Thoses lines are based on thoses 2 formulas :

Sum of numbers between 1 and n = n*(n+1)/2
Sum of squares between 1 and n = n*(n+1)*(2n+1)/6

So the formula to get the answer is simply (n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6

And now to "optimize" the byte count, we break parenthesis and move stuff around, while testing it always gives the same result

(n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6 => n*(n+1)/2*n*(n+1)/2 - n*(n+1)*(2n+1)/6 => n*(n+1)*n*(n+1)/4 - n*(n+1)*(2n+1)/6

Notice the pattern p = n*n+1 = n*n+n, so in the function, we declare another variable int p = n*n+n and it gives :

p*p/4 - p*(2n+1)/6

For p*(p/4-(2*n+1)/6) and so n*(n+1)*(n*(n+1)/4 - (2n+1)/6), it works half the time only, and I suspect integer division to be the cause ( f(3) giving 24 instead of 22, f(24) giving 85200 instead of 85100, so we can't factorize the macro's formula that way, even if mathematically it is the same.

Both the macro and function version are here because of macro substitution :

F(3) gives 3*3*(3+1)*(3+1)/4-3*(3+1)*(2*3+1)/6 = 22
F(5-2) gives 5-2*5-2*(5-2+1)*(5-2+1)/4-5-2*(5-2+1)*(2*5-2+1)/6 = -30

and mess up with the operator precedence. the function version does not have this problem

HatsuPointerKun
sumber
1
You could fix up the problem with the macros at the cost of A LOT of bytes by replacing all the n with (n). Also, F(n) n=>F(n)n regardless.
Zacharý
It's possible to rearrange return p*p/4-p*(n-~n)/6 to return(p/4-(n-~n)/6)*p.
Zacharý
@Zacharý No, it gives me bad results sometimes like 24 instead of 22 for input "3", or 85200 instead of 85100 for input "24". I suspect integer division to be the cause of that
HatsuPointerKun
Ugh, always forget about that.
Zacharý
2

Pyth, 7 bytes

sm**hdh

Try it online here.

Uses the formula in Neil's answer.

sm**hdhddQ   Implicit: Q=eval(input())
             Trailing ddQ inferred
 m       Q   Map [0-Q) as d, using:
    hd         Increment d
   *  hd       Multiply the above with another copy
  *     d      Multiply the above by d
s            Sum, implicit print 
Sok
sumber
2

05AB1E, 6 bytes

LnDƶαO

Try it online!

Explanation

L         # push range [1 ... input]
 n        # square each
  D       # duplicate
   ƶ      # lift, multiply each by its 1-based index
    α     # element-wise absolute difference
     O    # sum

Some other versions at the same byte count:

L<ān*O
Ln.āPO
L¦nā*O

Emigna
sumber
2

R, 28 bytes

x=1:scan();sum(x)^2-sum(x^2)

Try it online!

Sumner18
sumber
3
sum(x<-1:scan())^2-sum(x^2) for -1
J.Doe
2

MathGolf, 6 bytes

{î²ï*+

Try it online!

Calculates k=1n(k2(k1))

Explanation:

{       Loop (implicit) input times
 î²     1-index of loop squared
    *   Multiplied by
   ï    The 0-index of the loop
     +  And add to the running total
Jo King
sumber
2

Clojure, 58 bytes

(fn[s](-(Math/pow(reduce + s)2)(reduce +(map #(* % %)s))))

Try it online!


Edit: I misunderstood the question

Clojure, 55, 35 bytes

#(* %(+ 1 %)(- % 1)(+(* 3 %)2)1/12)

Try it online!

TheGreatGeek
sumber
1
Thanks for fixing that. And just a heads up regarding your last entry, (apply + is shorter than (reduce +.
Carcigenicate
@Carcigenicate Thanks!
TheGreatGeek
1
Could you edit your permalink to run one of the test cases? As it is, I doesn't help people who don't know Clojure.
Dennis
2

cQuents, 17 15 bytes

b$)^2-c$
;$
;$$

Try it online!

Explanation

 b$)^2-c$     First line
:             Implicit (output nth term in sequence)
 b$)          Each term in the sequence equals the second line at the current index
    ^2        squared
      -c$     minus the third line at the current index

;$            Second line - sum of integers up to n
;$$           Third line - sum of squares up to n
Stephen
sumber
1

APL(NARS), 13 chars, 26 bytes

{+/⍵×⍵×⍵-1}∘⍳

use the formula Sum'w=1..n'(ww(w-1)) possible i wrote the same some other wrote + or - as "1⊥⍳×⍳×⍳-1"; test:

  g←{+/⍵×⍵×⍵-1}∘⍳
  g 0
0
  g 1
0
  g 2
4
  g 3
22
  g 10
2640
RosLuP
sumber
1

QBASIC, 45 44 byte

Menghasilkan matematika murni menghemat 1 byte!

INPUT n
?n^2*(n+1)*(n+1)/4-n*(n+1)*(2*n+1)/6

Coba online itu!


Sebelumnya, jawaban berbasis loop

INPUT n
FOR q=1TO n
a=a+q^2
b=b+q
NEXT
?b^2-a

Cobalah online!

Perhatikan bahwa REPL sedikit lebih diperluas karena penerjemah gagal sebaliknya.

steenbergh
sumber
1

JAEL , 13 10 byte

#&àĝ&oȦ

Cobalah online!

Penjelasan (dihasilkan secara otomatis):

./jael --explain '#&àĝ&oȦ'
ORIGINAL CODE:  #&àĝ&oȦ

EXPANDING EXPLANATION:
à => `a
ĝ => ^g
Ȧ => .a!

EXPANDED CODE:  #&`a^g&o.a!

COMPLETED CODE: #&`a^g&o.a!,

#          ,            repeat (p1) times:
 &                              push number of iterations of this loop
  `                             push 1
   a                            push p1 + p2
    ^                           push 2
     g                          push p2 ^ p1
      &                         push number of iterations of this loop
       o                        push p1 * p2
        .                       push the value under the tape head
         a                      push p1 + p2
          !                     write p1 to the tapehead
            ␄           print machine state
Eduardo Hoefel
sumber
1

05AB1E , 6 byte

LDOšnÆ

Cobalah online!

Penjelasan:

           # implicit input (example: 3)
L          # range ([1, 2, 3])
 DOš       # prepend the sum ([6, 1, 2, 3])
    n      # square each ([36, 1, 4, 9])
     Æ     # reduce by subtraction (22)
           # implicit output

Ætidak sering berguna, tetapi ini saatnya untuk bersinar. Ini mengalahkan naif LOnILnO-dengan dua byte penuh.

Grimmy
sumber