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.

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:



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 .


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

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'.



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)

Bagus sekali! :) Saya datang dengan ({<(({}))>{({})({}[()])}{}<({}[()])>})38
DJMcMayhem


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.


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




2

Brain-Flak , 46 byte

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

Cobalah online!



@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

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


2

R, 17 byte

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

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


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#

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.


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.

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





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.


2

> <> , 15 13 11 byte

Disimpan 2 byte berkat Bukan pohon

0:n:l1-:*+!

Cobalah online!

Output urutan tanpa batas.


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

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


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!




Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.