Angka piramidal persegi

28

A000330 - OEIS

Tugas

Tugas Anda adalah sederhana, menghasilkan urutan yang, mengingat indeks i, nilai pada posisi yang jumlah kuadrat dari 0upto imana i >= 0.

Contoh:

Input: 0
Output: 0           (0^2)

Input: 4
Output: 30          (0^2 + 1^2 + 2^2 + 3^2 + 4^2)

Input: 5
Output: 55          (0^2 + 1^2 + 2^2 + 3^2 + 4^2 + 5^2)

Spesifikasi:

  • Anda tidak boleh mengambil input dan output urutan tanpa batas;
  • Anda dapat mengambil input Ndan output Nthelemen urutan;
  • Anda dapat mengambil input Ndan menampilkan Nelemen pertama dari urutan.
Felipe Nardi Batista
sumber
2
Pengamatan menyenangkan dari OEIS: Urutan ini persis berisi dua kotak:, f(1) == 1 * 1 (1)dan f(24) == 70 * 70 (4900).
DJMcMayhem
Bisakah kita memulai urutannya f(1) = 1?
Emigna
@Emigna maaf tapi tidak, Anda harus mulai dari f(0) = 0. Saya telah menunjukkan bahwa pada beberapa jawaban yang gagal persyaratan itu
Felipe Nardi Batista
The f(0) = 0persyaratan hancur beberapa solusi saya :(
Ataco

Jawaban:

4

Jelly , 3 byte

R²S

Cobalah online!

FGITW

Penjelasan

R²S  Main Link
R    Generate Range
 ²   Square (each term)
  S  Sum
HyperNeutrino
sumber
Alternatif yang lebih lama adalahRæ.R
Tn. Xcoder
22

Python 2 , 22 byte

lambda n:n*~n*~(n*2)/6

Cobalah online!

Ini menggunakan rumus bentuk tertutup n * (n + 1) * (2 * n + 1) / 6 . Kode melakukan operasi berikut:

  • Kalikan n dengan ( n*):

    • Komplemen bitwise dari n ( ~n), yang pada dasarnya berarti -1-n .
    • Dan dengan komplemen bitwise dari 2n ( *~(n*2)), yang berarti -1-2n .
  • Dibagi dengan 6 ( /6).

Python 2 , 27 byte

f=lambda n:n and f(n-1)+n*n

Cobalah online!

Disimpan 1 byte berkat Rod dan 1 terima kasih ke GB .

Tuan Xcoder
sumber
1
Ini sangat pintar!
Skyler
14

MATL , 3 byte

:Us

... atau mereka?

Cobalah online!

Penjelasan

:    % Implicit input n. Push range [1 2 ... n]
U    % Square, element-wise
s    % Sum of array. Implicit display
Luis Mendo
sumber
14

JavaScript (ES6), 16 byte

n=>n*(n+++n)*n/6

Demo

Bagaimana?

Ekspresi n+++ndiuraikan sebagai n++ + n(1) . Bukannya itu benar-benar penting karena n + ++nakan juga berfungsi dalam hal ini.

Karena itu:

n*(n+++n)*n/6 =
n * (n + (n + 1)) * (n + 1) / 6 =
n * (2 * n + 1) * (n + 1) / 6

yang mengevaluasi jumlah (k = 0 ... n) (k²) .


(1) Ini dapat diverifikasi dengan melakukan n='2';console.log(n+++n)yang memberikan bilangan bulat 5, sedangkan n + ++nakan memberikan string '23'.

Arnauld
sumber
6

Brain-Flak , 36 byte

({<(({}[()])())>{({})({}[()])}{}}{})

Cobalah online!

# Main algorithm
(                                  )  # Push the sum of:
                {({})({}[()])}{}      #   The square of:
 {                              }     #     0 to i 

# Stuff for the loop
  <(({}[()])())>                      # Push i-1, i without counting it in the sum
                                 {}   # Pop the counter (0)
Riley
sumber
Bagus sekali! :) Saya datang dengan ({<(({}))>{({})({}[()])}{}<({}[()])>})38
DJMcMayhem
34 byte;)
Wisaya Gandum
6

Brain-Flak , 34 byte

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

Cobalah online!

Bagaimana cara kerjanya?

Awalnya saya memiliki ide yang sama dengan Riley 1 tetapi merasa salah menggunakan zeroer. Saya kemudian menyadari itu

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

Menghitung n 2 - n.

Mengapa? Ya kita tahu

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

Menghitung n 2 dan loop n kali. Itu berarti jika kita mengganti urutan dari dua dorongan kita beralih dari meningkatkan jumlah dengan n + (n-1) setiap kali untuk meningkatkan jumlah dengan (n-1) + (n-1) setiap kali. Ini akan mengurangi hasil dengan satu per loop, sehingga membuat hasil kami n 2 - n. Di tingkat atas ini -n membatalkan dengan n yang dihasilkan oleh dorongan bahwa kita memusatkan perhatian mengurangi kebutuhan untuk noler dan menyelamatkan kita dua byte.

Brain-Flak , 36 byte

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

Cobalah online!

Ini adalah solusi lain, ini tidak seperti golf tapi itu cukup aneh jadi saya pikir saya akan meninggalkannya sebagai tantangan untuk mencari tahu cara kerjanya.

Jika Anda tidak menyukai Brain-Flak tetapi Anda masih menginginkan tantangan di sini, itu adalah penjumlahan.

Gambar


1: Saya datang dengan solusi saya sebelum saya melihat jawabannya di sini. Jadi tidak ada plagiarisme di sini.

Wisaya Gandum
sumber
Saya tahu harus ada cara untuk melakukan ini, dan saya merasa Anda akan menjadi orang yang menghitung matematika untuk itu.
Riley
3

Japt , 3 byte

ô²x

Coba di sini.

-1 terima kasih kepada Shaggy .

Penjelasan:

ò²x 
ô²  Map square on [0..input]
  x Sum
Erik the Outgolfer
sumber
3 byte menggunakan cara pintas untuk p2.
Shaggy
@FelipeNardiBatista diperbaiki
Erik the Outgolfer
2

Brain-Flak , 46 byte

{(({})[()])}{}{({({})({}[()])}{}<>)<>}<>({{}})

Cobalah online!

HyperNeutrino
sumber
@Riley Ooh bagus :)
HyperNeutrino
Daripada mendorong kuadrat ke tumpukan alternatif, Anda bisa menjumlahkannya secara langsung dengan mengevaluasi dan tidak mendorongnya, lalu mendorong seluruh lingkaran sebagai gantinya. Ini mengubah paruh kedua Anda menjadi ({{({})({}[()])}{}}{}), dan menghemat 10 byte. (Jika itu tidak masuk akal, ping saya di tumpukan ketiga )
DJMcMayhem
2

CJam , 10 byte

ri),{_*+}*

Cobalah online!

ri            e# Input integer n
  )           e# Add 1
   ,          e# Range [0 1 ... n]
    {   }*    e# Fold (reduce)
     _        e# Duplicate
      *       e# Multiply
       +      e# Add
Luis Mendo
sumber
Bagaimana dengan ri),_.*:+atau ri),2f#:+?
Martin Ender
@ Martin Ide bagus! Saya pikir Anda harus mempostingnya sebagai jawaban yang berbeda
Luis Mendo
2

Sebenarnya , 3 byte

R;*

Cobalah online!

Dibawa Nsebagai input, dan menampilkan Nelemen ke-5 dalam urutan.

Penjelasan:

R;*
R    range(1, N+1) ([1, 2, ..., N])
 ;*  dot product with self
Mego
sumber
2

APL (Dyalog) , 7 5 byte

2 byte disimpan berkat @Mego

+.×⍨⍳

Cobalah online!

Bagaimana?

- jarak

+.× - produk titik

- dengan dirinya sendiri

Uriel
sumber
@Uriel, salahku, kupikir ¨⍳itu perlu
Felipe Nardi Batista
2

R, 17 byte

sum((0:scan())^2)

Cukup sederhana, itu mengambil keuntungan dari fakta bahwa ^(eksponensial) adalah Vectorized di R .

Frédéric
sumber
1
(x=0:scan())%*%xlebih pendek dengan satu byte, tapi saya yakin Anda perlu catuntuk mendapatkan output.
Giuseppe
@ Giuseppe Saya baru saja mencobanya dan kode Anda tidak berfungsi cat, menghasilkan matriks 1x1.
Rui Barradas
@RuiBarradas Konsensus meta saat ini catadalah yang diperlukan untuk ini agar memenuhi syarat sebagai program penuh. Jika Anda ingin mengubahnya, jawab pertanyaan ini dan dapatkan daya tarik di antara orang-orang R lainnya di situs.
Giuseppe
2

CJam , 9 byte

ri),_.*:+

Cobalah online!

Penjelasan

ri        e# Read input and convert to integer N.
  ),      e# Get range [0 1 2 ... N].
    _     e# Duplicate.
     .*   e# Pairwise products, giving [0 1 4 ... N^2].
       :+ e# Sum.

Kalau tidak:

ri),2f#:+

Ini mengkuadratkan setiap elemen dengan memetakan 2#alih-alih menggunakan produk berpasangan. Dan hanya untuk bersenang-senang alternatif lain yang menjadi tidak akurat untuk input besar karena menggunakan aritmatika floating-point:

ri),:mh2#
Martin Ender
sumber
2

Julia , 16 14 byte

2 byte disimpan berkat @MartinEnder

!n=(x=1:n)⋅x

Cobalah online!

Bagaimana?

(x=1:n)menciptakan serangkaian 1to ndan assign to x, dot product with x.

Uriel
sumber
2

Labirin , 11 byte

:!\
+ :
*:#

Cobalah online!

Mencetak urutan tanpa batas.

Penjelasan

Penunjuk instruksi terus berjalan di sekitar kuadrat kode berulang-ulang:

:!\    Duplicate the last result (initially zero), print it and a linefeed.
:      Duplicate the result again, which increases the stack depth.
#      Push the stack depth (used as a counter variable).
:*     Square it.
+      Add it to the running total.
Martin Ender
sumber
2

Cubix , 15 byte

Iu):^\+*p*6u@O,

Cobalah online!

Kode saya agak sedih ):

Menghitung n*(n+1)*(2n+1)/6

    I u
    ) :
^ \ + * p * 6 u
@ O , . . . . .
    . .
    . .

^Iu : read in input, u-turn
    : stack  n
:)\ : dup, increment, go right..oh, hey, it cheered up!
    : stack: n, n+1
+   : sum
    : stack: n, n+1, 2*n+1
*   : multiply
    : stack: n, n+1, 2*n+1, (n+1)*(2*n+1)
p   : move bottom of stack to top
    : stack: n+1, 2*n+1, (n+1)*(2*n+1), n
*   : multiply
6   : push 6
u   : right u-turn
,   : divide
O   : output
@   : terminate

Giuseppe
sumber
2

Haskell, 20 byte

f 0=0
f n=n*n+f(n-1)

Cobalah online!

nimi
sumber
2

Excel, 19 byte

=A1^3/3+A1^2/2+A1/6
Wernisch
sumber
2

Hexagony , 23 byte

?'+)=:!@/*"*'6/{=+'+}/{

Cobalah online!

Penjelasan

Dibuka:

   ? ' + )
  = : ! @ /
 * " * ' 6 /
{ = + ' + } /
 { . . . . .
  . . . . .
   . . . .

Ini benar-benar hanya program linier dengan /digunakan untuk pengalihan. Kode linier adalah:

?'+){=+'+}*"*'6{=:!@

Yang menghitung n (n +1) (2n +1) / 6 . Ini menggunakan tepi memori berikut:

masukkan deskripsi gambar di sini

Di mana titik memori (MP) dimulai pada tepi berlabel n , menunjuk ke utara.

?   Read input into edge labelled 'n'.
'   Move MP backwards onto edge labelled 'n+1'.
+   Copy 'n' into 'n+1'.
)   Increment the value (so that it actually stores the value n+1).
{=  Move MP forwards onto edge labelled 'temp' and turn around to face
    edges 'n' and 'n+1'.
+   Add 'n' and 'n+1' into edge 'temp', so that it stores the value 2n+1.
'   Move MP backwards onto edge labelled '2n+1'.
+   Copy the value 2n+1 into this edge.
}   Move MP forwards onto 'temp' again.
*   Multiply 'n' and 'n+1' into edge 'temp', so that it stores the value
    n(n+1).
"   Move MP backwards onto edge labelled 'product'.
*   Multiply 'temp' and '2n+1' into edge 'product', so that it stores the
    value n(n+1)(2n+1).
'   Move MP backwards onto edge labelled '6'.
6   Store an actual 6 there.
{=  Move MP forwards onto edge labelled 'result' and turn around, so that
    the MP faces edges 'product' and '6'.
:   Divide 'product' by '6' into 'result', so that it stores the value
    n(n+1)(2n+1)/6, i.e. the actual result.
!   Print the result.
@   Terminate the program.

Secara teori dimungkinkan untuk menyesuaikan program ini dengan panjang sisi 3, karena /yang tidak diperlukan untuk perhitungan, :dapat digunakan kembali untuk mengakhiri program, dan beberapa '"=+*{mungkin dapat digunakan kembali juga, membawa jumlah yang diperlukan perintah di bawah 19 (maksimum untuk panjang sisi 3). Saya ragu apakah mungkin untuk menemukan solusi semacam itu dengan tangan, jika ada.

Martin Ender
sumber
2

> <> , 15 13 11 byte

Disimpan 2 byte berkat Bukan pohon

0:n:l1-:*+!

Cobalah online!

Output urutan tanpa batas.

Emigna
sumber
1
14 byte (12 + 2 untuk -vbendera): ::1+:}+**6,n( Cobalah online! )
Bukan sebatang pohon
1
Atau 11 byte (mencetak selamanya, mulai dari N=1): Cobalah online!
Bukan sebatang pohon
@Natatree: Ide bagus menggunakan l. Memeriksa dengan OP apakah boleh memulai pada 1.
Emigna
@Natatree: Sayangnya kami tidak diizinkan untuk memulai dari 1, tetapi masih menghemat 2 byte. Terima kasih!
Emigna
1
(Saya harus menyebutkan bahwa saya mendapat lide dari jawaban Labyrinth Martin Ender .)
Bukan sebatang pohon
2

Pyth , 7 5 bytes berkat Steven H

s^R2h

Penjelasan:

s^R2h       Full program - inputs from stdin and outputs to stdout
s           output the sum of
    h       range(input), with
 ^R2         each element squared

Solusi pertama saya

sm*ddUh

Cobalah online!

Penjelasan:

sm*ddUh    Full program - inputs from stdin and outputs to stdout
s          sum of
 m   Uh    each d in range(input)
  *dd      squared
Dave
sumber
Apakah tidak ada kotak di dalam Pyth?
caird coinheringaahing
Tidak sejauh yang saya tahu ...
Dave
Tidak ada Pyth built-in persegi. Juga 6 byte
Tn. Xcoder
1
5 byte .
Steven H.
Dapat diperbaiki dengan +1 byte untuk setiap jawaban, saya akan mengedit begitu saya keluar dari ponsel.
Dave
1

Neim , 3 byte

𝐈ᛦ𝐬

Ini bisa menjadi tantangan untuk memamerkan nomor poligon bawaan Neim, tetapi tampaknya tidak.

Cobalah online!

Okx
sumber