Quadratische Pyramidenzahlen

28

A000330 - OEIS

Aufgabe

Ihre Aufgabe ist einfach: Generieren Sie eine Sequenz, bei der ider Wert für diese Position bei gegebenem Index die Summe der Quadrate von 0bis zu iwo ist i >= 0.

Beispiel:

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)

Spezifikation:

  • Sie können keine Eingabe vornehmen und die Sequenz auf unbestimmte Zeit ausgeben.
  • Sie können Ndas NthElement der Sequenz eingeben und ausgeben .
  • Sie können Ndie ersten NElemente der Sequenz eingeben und ausgeben .
Felipe Nardi Batista
quelle
2
Spaßbeobachtung von OEIS: Diese Sequenz enthält genau zwei perfekte Quadrate:, f(1) == 1 * 1 (1)und f(24) == 70 * 70 (4900).
DJMcMayhem
Dürfen wir die Sequenz um beginnen f(1) = 1?
Emigna
@Emigna sorry aber nein, du musst bei anfangen f(0) = 0. Ich habe darauf hingewiesen, dass auf die wenigen Antworten, die diese Anforderung nicht erfüllten
Felipe Nardi Batista
Die f(0) = 0Anforderung hat einige meiner Lösungen ruiniert :(
ATaco

Antworten:

4

Gelee , 3 Bytes

R²S

Probieren Sie es online!

FGITW

Erläuterung

R²S  Main Link
R    Generate Range
 ²   Square (each term)
  S  Sum
HyperNeutrino
quelle
Eine längere Alternative wäreRæ.R
Mr. Xcoder 17.10.17
22

Python 2 , 22 Bytes

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

Probieren Sie es online!

Dies verwendet die geschlossene Formel n * (n + 1) * (2 * n + 1) / 6 . Der Code führt die folgenden Vorgänge aus:

  • Multipliziert n mit ( n*):

    • Das bitweise Komplement von n ( ~n), was im Wesentlichen -1-n bedeutet .
    • Und durch das bitweise Komplement von 2n ( *~(n*2)), was -1-2n bedeutet .
  • Dividiert durch 6 ( /6).

Python 2 , 27 Bytes

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

Probieren Sie es online!

1 Byte dank Rod und 1 dank GB gespeichert .

Mr. Xcoder
quelle
1
Das ist sehr schlau!
Skyler
14

MATL , 3 Bytes

:Us

... oder sie?

Probieren Sie es online!

Erläuterung

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

JavaScript (ES6), 16 Byte

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

Demo

Wie?

Der Ausdruck n+++nwird als n++ + n(1) analysiert . Nicht, dass es wirklich darauf ankommt, denn das n + ++nwürde auch in diesem Fall funktionieren.

Deshalb:

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

die auswertet , um sum (k = 0 ... n) (K²) .


(1) Dies kann überprüft werden, indem getan wird n='2';console.log(n+++n), was die ganze Zahl ergibt 5, wohingegen n + ++ndie Zeichenfolge ergeben würde '23'.

Arnauld
quelle
6

Brain-Flak , 36 Bytes

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

Probieren Sie es 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
quelle
Schön gemacht! :) Ich habe mir ({<(({}))>{({})({}[()])}{}<({}[()])>})38
ausgedacht
34 Bytes;)
Weizen-Assistent
6

Brain-Flak , 34 Bytes

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

Probieren Sie es online!

Wie funktioniert es?

Anfangs hatte ich die gleiche Idee wie Riley 1, aber es fühlte sich falsch an, einen Nuller zu verwenden. Das habe ich dann gemerkt

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

Berechnet n 2 - n.

Warum? Nun, wir wissen es

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

Berechnet n 2 und schleift n-mal. Das heißt, wenn wir die Reihenfolge der beiden Schübe ändern, erhöhen wir die Summe jedes Mal um n + (n-1) und erhöhen die Summe jedes Mal um (n-1) + (n-1). Dies verringert das Ergebnis um eins pro Schleife, wodurch unser Ergebnis n 2 - n wird. Auf der obersten Ebene hebt dieses -n das durch den Push erzeugte n auf, den wir auf Null gesetzt haben, wodurch die Notwendigkeit eines Nullstellers verringert und uns zwei Bytes erspart wurden.

Brain-Flak , 36 Bytes

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

Probieren Sie es online!

Hier ist eine andere Lösung, es ist nicht so golfen, aber es ist ziemlich seltsam, also dachte ich, ich würde es als Herausforderung belassen, herauszufinden, wie es funktioniert.

Wenn Sie nicht auf Brain-Flak stehen, aber dennoch die Herausforderung suchen, ist dies eine Summe.

Bild


1: Ich habe mir eine Lösung ausgedacht, bevor ich mir die Antworten hier angesehen habe. Also hier kein Plagiat.

Weizen-Assistent
quelle
Ich wusste, dass es einen Weg geben musste, dies zu tun, und ich hatte das Gefühl, dass Sie derjenige sein würden, der die Mathematik dafür herausfinden würde.
Riley
3

Japt , 3 Bytes

ô²x

Probieren Sie es hier aus.

-1 danke an Shaggy .

Erläuterung:

ò²x 
ô²  Map square on [0..input]
  x Sum
Erik der Outgolfer
quelle
3 Bytes mit der Abkürzung für p2.
Shaggy
@FelipeNardiBatista behoben
Erik the Outgolfer
2

Brain-Flak , 46 Bytes

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

Probieren Sie es online!

HyperNeutrino
quelle
@ Riley Ooh schön :)
HyperNeutrino
Anstatt das Quadrat auf den alternativen Stapel zu schieben, können Sie es direkt summieren, indem Sie es auswerten und nicht schieben und stattdessen die gesamte Schleife schieben. Dies ändert Ihre zweite Hälfte in ({{({})({}[()])}{}}{})und spart Ihnen 10 Bytes. (Wenn das keinen Sinn ergibt, ping mich in den dritten Stapel )
DJMcMayhem
2

CJam , 10 Bytes

ri),{_*+}*

Probieren Sie es 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
quelle
Wie wäre es mit ri),_.*:+oder ri),2f#:+?
Martin Ender
@ Martin Gute Idee! Ich denke, Sie sollten es als eine andere Antwort posten
Luis Mendo
2

Eigentlich 3 Bytes

R;*

Probieren Sie es online!

Nimmt Nals Eingabe und gibt das Ndritte Element in der Sequenz aus.

Erläuterung:

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

APL (Dyalog) , 7 5 Bytes

2 Bytes gespart dank @Mego

+.×⍨⍳

Probieren Sie es online!

Wie?

- Reichweite

+.× - Skalarprodukt

- mit sich selbst

Uriel
quelle
@Uriel meine schlechte, ich dachte, das ¨⍳war notwendig
Felipe Nardi Batista
2

R, 17 Bytes

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

Ziemlich einfach, es nutzt die Tatsache, dass ^(Potenzierung) in R vektorisiert ist .

Frédéric
quelle
1
(x=0:scan())%*%xist um ein Byte kürzer, aber ich glaube, Sie brauchen eine cat, um die Ausgabe zu bekommen.
Giuseppe
@ Giuseppe Ich habe es gerade ausprobiert und dein Code funktioniert auch ohne cat, er gibt eine 1x1 Matrix aus.
Rui Barradas
@RuiBarradas Derzeitiger Metakonsens ist, dass dies caterforderlich ist, um sich als vollständiges Programm zu qualifizieren. Wenn Sie das ändern möchten, beantworten Sie diese Frage und finden Sie eine gewisse Unterstützung bei den anderen R-Leuten auf der Site.
Giuseppe
2

CJam , 9 Bytes

ri),_.*:+

Probieren Sie es online!

Erläuterung

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.

Alternative:

ri),2f#:+

Dies quadriert jedes Element durch Mapping, 2#anstatt paarweise Produkte zu verwenden. Und nur zum Spaß eine weitere Alternative, die bei großen Eingaben ungenau wird, weil sie Gleitkomma-Arithmetik verwendet:

ri),:mh2#
Martin Ender
quelle
2

Julia , 16 14 Bytes

2 Bytes gespart dank @MartinEnder

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

Probieren Sie es online!

Wie?

(x=1:n)Erstellt eine Reihe von 1zu nund weist zu x, dot Produkt mit x.

Uriel
quelle
2

Labyrinth , 11 Bytes

:!\
+ :
*:#

Probieren Sie es online!

Druckt die Sequenz auf unbestimmte Zeit.

Erläuterung

Der Befehlszeiger läuft immer und immer wieder um das Quadrat des Codes:

:!\    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
quelle
2

Cubix , 15 Bytes

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

Probieren Sie es online!

Mein Code ist ein bisschen traurig ):

Berechnet 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
quelle
2

Excel, 19 Bytes

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

Hexagony , 23 Bytes

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

Probieren Sie es online!

Erläuterung

Entfaltet:

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

Dies ist eigentlich nur ein lineares Programm mit der /für einige Umleitungen verwendeten Funktion. Der lineare Code lautet:

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

Was berechnet n (n + 1) (2n + 1) / 6 . Es verwendet die folgenden Speicherflanken:

Bildbeschreibung hier eingeben

Wo der Speicherpunkt (MP) an der mit n bezeichneten Kante beginnt und nach Norden zeigt.

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

Theoretisch könnte es möglich sein, dieses Programm in die Seitenlänge 3 einzufügen, da /sie für die Berechnung nicht benötigt :werden, zum Beenden des Programms wiederverwendet werden können und einige '"=+*{davon auch wiederverwendbar sind, was die Anzahl der erforderlichen Programme mit sich bringt Befehle unter 19 (das Maximum für Seitenlänge 3). Ich bezweifle, dass es möglich ist, eine solche Lösung von Hand zu finden, wenn überhaupt eine existiert.

Martin Ender
quelle
2

> <> , 15 13 11 Bytes

2 Bytes gespart dank Not a tree

0:n:l1-:*+!

Probieren Sie es online!

Gibt die Sequenz auf unbestimmte Zeit aus.

Emigna
quelle
1
14 Bytes (12 + 2 für -vFlagge): ::1+:}+**6,n( Versuchen Sie es online! )
Kein Baum
1
Oder 11 Bytes (druckt für immer ab N=1): Probieren Sie es online!
Kein Baum
@Notatree: Sehr nette Idee mit l. Erkundigen Sie sich bei OP, ob es in Ordnung ist, um 1
Uhr
@Notatree: Leider dürfen wir nicht bei 1 beginnen, aber es werden trotzdem 2 Bytes eingespart. Vielen Dank!
Emigna
1
(Ich sollte erwähnen, dass ich die lIdee von Martin Enders Labyrinth-Antwort erhalten habe .)
Kein Baum
2

Pyth , 7 5 Bytes dank Steven H.

s^R2h

Erläuterung:

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

Meine erste Lösung

sm*ddUh

Probieren Sie es online!

Erläuterung:

sm*ddUh    Full program - inputs from stdin and outputs to stdout
s          sum of
 m   Uh    each d in range(input)
  *dd      squared
Dave
quelle
Ist in Pyth kein Platz eingebaut?
Caird Coinheringaahing
Soweit ich weiß nicht ...
Dave
Nein, es gibt kein Quadrat eingebautes Pyth. Auch 6 Bytes
Mr. Xcoder
1
5 Bytes .
Steven H.
Fixierbar mit +1 Byte für jede Antwort. Ich bearbeite sie, sobald ich das Handy verlasse.
Dave
1

Neim , 3 Bytes

𝐈ᛦ𝐬

Es hätte eine Herausforderung sein können, Neims polygonale Zahlen zu demonstrieren, aber anscheinend nicht.

Probieren Sie es online!

Okx
quelle