Sigmafy den Ausdruck

20

Für diejenigen, die es nicht wussten, ist Sigma ein griechischer Buchstabe, der in der Mathematik häufig als Summierungszeichen verwendet wird. Berechnen Sie die Summe der Ergebnisse für für jedes wenn eine Zeichenfolge gegeben ist, die einen von abhängigen Ausdruck darstellt , den wir als E ( k ) bezeichnen . Kurz gesagt, Sie sollten so finden, dass:kE(k)E(k)k{1,2,3,4,5}S

S=k=15E(k)

Ein Beispiel für einen Ausdruck: E(k)=k2+k2


Technische Daten

  • Sie sind garantiert:
    • dass der Ausdruck gültig ist, also keine Fehler enthält und dass er von der gewählten Syntax abhängt (zB: wenn Sie nur unterstützen 2*k, wird es keine geben 2k)
    • haben nur Werte unter den Ergebnissen definiert, so dass keine Werte mögen 1/0, infoder nanwird angezeigt
  • Sie können davon ausgehen, dass der obige Ausdruck den Grenzwerten der Programmiersprache Ihrer Wahl entspricht, sodass es nicht zu Überläufen oder anderen Fehlern im Zusammenhang mit Grenzwerten kommt
  • Es kann jedes andere Nicht-Leerzeichen-ASCII-Zeichen anstelle von kausgewählt werden
  • Ihr Programm muss die folgenden Vorgänge unterstützen:
    • Zugabe ( +, plus(), add(), sum())
    • Subtraktion ( -, minus(), subtract())
    • Potenzierung ( **, ^, pow()oder andere, sollte festgelegt werden), mit Unterstützung zu negativen Exponenten Basen und
    • Quadratwurzel in Form von sqrt(k), k^0.5, k**0.5oder aber , was Sie wollen
    • Multiplikation und Division
  • Die Einreichung kann entweder ein vollständiges Programm oder eine Funktion sein, wobei die Verwendung erwähnt wird
  • Jedes nachfolgende / führende Leerzeichen ist bei der Ausgabe zulässig
  • Mindestgenauigkeit: 2 Nachkommastellen

Testfälle (mit k)

+---------------+--------------+   
|  Input = E(k) |    Output    |
|---------------+--------------|
|2*k            | 30           |
|---------------+--------------|
|sqrt(k)        | 8.38         | (* with minimum decimal precision)
|---------------+--------------|
|k+k/2+k**2     | 77.5         |
|---------------+--------------|
|k**2           | 55           |
+---------------+--------------+

Die Punktzahl ist die Anzahl der Bytes (der Quellen- und Compiler-Flags). Die Einsendung mit der niedrigsten Bewertung gewinnt, wobei zu beachten ist, dass diese Lücken strengstens verboten sind. Hier ist ein Python-Pseudocode, um die Dinge klarer zu machen.

Mr. Xcoder
quelle
Können wir plus()statt +? (Gleiche Fragen auch für alle anderen Betreiber)
Stewie Griffin
@StewieGriffin Ja plus(), add(), sum()und Äquivalente sind erlaubt. Siehe die Bearbeitung.
Mr. Xcoder
Nein, Sie dürfen den Ausdruck nur einmal nehmen, @ComradeSparklePony
Mr. Xcoder
Können wir die Postfix-Notation verwenden? Zum Beispiel Testfall 3 von oben wäre so etwas wie: N N2/+N2**+.
Genosse SparklePony
Das ist sehr seltsam, aber es ist erlaubt, solange Sie das "Format" von E(x)@ComradeSparklePony
Mr. Xcoder

Antworten:

3

Gelee , 5 Bytes

vЀ5S

Probieren Sie es online!

Geben Sie eine gültige Jelly-Monadic-Kette ein (ich habe sie in meinem Link angegeben).

Wie es funktioniert

vЀ5S
 Ѐ     for each of ...
   5        5 (implicitly converted to [1,2,3,4,5]), ...
v           evaluate the input with the above as argument
    S   and find the sum
Undichte Nonne
quelle
9

Mathematica, 17 14 13 Bytes

Vielen Dank an Ian Miller für das Speichern von 3 Bytes.

Vielen Dank an LegionMammal978 für die Einsparung von 1 Byte.

#~NSum~{k,5}&

Die Eingabe sollte ein tatsächlicher Ausdruck sein k, der beispielsweise Folgendes enthält :

#~NSum~{k,5}&[Sqrt[k]^3+4]
Martin Ender
quelle
2
Ich hätte vermuten sollen, dass Mathematica dafür eingebaute Funktionen hat
Mr. Xcoder
2
Mathematica hat immer Einbauten für Situationen. : P
totalhuman
Das brauchst du nicht 1,dafür Sum.
Ian Miller
In der Tat kann es zuN@#~Sum~{k,5}&
Ian Miller
@ IanMiller Oh, richtig, natürlich. Vielen Dank!
Martin Ender
8

Python 3 , 40 37 Bytes

3 Bytes danke an Arnauld.

Tricks für den Testumfang \ o /

f=lambda s,k=5:k and eval(s)+f(s,k-1)

Probieren Sie es online!

Verwendet k**0.5anstelle von sqrt(k).

Undichte Nonne
quelle
Darf man so schnell eine Frage beantworten? o_O
Mr. Xcoder
7

JavaScript (ES7), 31 30 Bytes

Verwendet k**0.5für sqrt(k).

f=(e,k=6)=>--k&&f(e,k)+eval(e)

console.log(f("2*k"))
console.log(f("k**0.5"))
console.log(f("k+k/2+k**2"))
console.log(f("k**2"))

Probieren Sie es online!

Arnauld
quelle
Wieder Ninjaed! Schön gemacht.
Shaggy
3

05AB1E , 8 7 6 Bytes

6G¹.VO

Probieren Sie es online!

Die Eingabe erfolgt in Postfix-Notation und verwendet die Variable N . 05AB1E ist eine stapelbasierte Sprache, daher funktioniert nur die Postfix-Notation.

Format von E(N): Schreiben Sie die Nummer (n), mit denen Sie die Operation ausführen möchten, und schreiben Sie dann das Vorzeichen der Operation. Zum Beispiel 3+4wäre 3 4+, 3*4+2*3wäre 3 4* 2 3* +. Beachten Sie auch , dass diese Anwendungen tstatt sqrt, und mstatt **, so sqrt(N)wären Nt.

Erläuterung:

6G¹.VO
6G     For N in range(1,6). This includes [1,2,3,4,5].
  ¹.V  Read and eval input.
     O Sum results.
Genosse SparklePony
quelle
3

Oktave , 50 46 31 29 Bytes

@(d)eval(["k=1:5;sum(" d 41])

Probieren Sie es online!

Die Potenzierung wird mit dem Caret .^und die Multiplikation mit bezeichnet .*.

Dies deklariert eine anonyme Funktion, die Argumente aufnimmt d. Es setzt kgleich dem Bereich 1:5und summiert die ausgewerteten dund gibt es zurück.

Kritixi Lithos
quelle
3

Japt , 10 Bytes

6ÆK=XOxUÃx

Die Eingabezeichenfolge sollte eine Variable in Großbuchstaben enthalten K. sqrt(K)sollte eingegeben werden als K**0.5.

Probieren Sie es online!

Erläuterung

evalDas Zielfernrohr hat nicht zu meinen Gunsten funktioniert. musste die Zählvariable Xals global neu definieren K.

6ÆK=XOxUÃx      // implicit: U = input string
6oXYZ{K=XOxU} x // expanded

6oXYZ{      }   // create array [0, 6) and map to function:
      K=X       //   redefine the array value to global K
         OxU    //   eval the input string
              x // sum the resulting array
Justin Mariner
quelle
Hmm, ich frage mich, ob das Oxdirekte Transpilieren eval(dabei helfen würde ...
ETHproductions
2

Oktave, 25 23 Bytes

@(f)sum(inline(f)(1:5))

Probieren Sie es online!

Die Potenzierung wird als bezeichnet .^

Кирилл Малышев
quelle
2

APL (Dyalog) , 9 Bytes

+/⍎⎕⊣k←⍳5

Probieren Sie es online!

Addition ist +, Subtraktion ist -, Multiplikation ist ×, Division ist ÷Exponentiation ist *und Ausführung ist von rechts nach links, verwenden Sie also, ()um Ausdrücke zu gruppieren.

Die Eingabe erfolgt in Bezug auf k.

Erläuterung

k←⍳5                    Set k to be equal to the vector 1 2 3 4 5
                       The left argument:
+/                      Sum of
⍎⎕                      The evaluated input (the eval returns an array because k is an array)

Und hier ist eine Lösung , die Züge als Eingabe (wie die Jelly Antwort) führt: +/(⍎⎕)¨⍳5.

Kritixi Lithos
quelle
2

Common Lisp, 55 Bytes

(defun f(x)#.(read))(print(+(f 1)(f 2)(f 3)(f 4)(f 5)))

Probieren Sie es online aus

Example input - output: 
(* x 2) - 30 
(sqrt x) - 8.382333 
(+ (/ x 2) x (expt x 2)) - 155/2 
(expt x 2) - 55

andere, längere (58 Byte) Version - wird kürzer, wenn Sie eine Summe von 1 bis 7 erstellen.

(print #.`(+,@(mapcar #'(lambda(x)#.(read))'(1 2 3 4 5))))

Noch eine andere und längere Methode ( 65 bis 64 Bytes) - definiert keine Funktion - fügt einfach Ihren Ausdruck in eine Schleife ein. Sollte für größere Summen kürzer werden.

(setf a(read)b 0)(loop as x from 1 to 5 do(incf b #.a))(print b)

quelle
2

Swift, 202 184 Bytes

import Foundation;func s(i:String){print([1,2,3,4,5].map{NSExpression(format:i.replacingOccurrences(of:"k",with:"\($0).0")).expressionValue(with:nil,context:nil)as!Float}.reduce(0,+))}

Aus irgendeinem Grund wird dies nur lokal ausgeführt :(.

Hier ist eine Erklärung, was ich tue:

import Foundation // Import the Foundation module

func s(i:String){ // Create a function that takes in a String and returns a Float

    print( // Print the result of the follow algorithm to strdout

        [1,2,3,4,5].map{ //Conduct the follow code on numbers 1 - 5

            NSExpression(format: // Create an expression with the following String and return it 

            i.replacingOccurrences(of:"k",with:"\($0).0")) // Create a string replacing all ocurrances of 'k' in `i` with the current Float from the map

           .expressionValue(with:nil,context:nil)as!Float // Get the resulting value of the expression

       }.reduce(0,+) // Add the result of all the expressions together
    )
}

Vielen Dank an @Mr. Xcoder zum Speichern von 15 Bytes!

Caleb Kleveter
quelle
2

TI-Basic, 12 Bytes

Σ(expr(Ans),K,1,5

Rufen Sie mit auf "string":prgmNAME, wo stringsich ein gültiger TI-Basic-Ausdruck von befindet K.

Pizzapants184
quelle
Interessante Lösung der gleichen Länge:Ans->u:sum(u(1,5
Lirtosiast
1

Gestapelt , 16 Bytes

5~>[@k#~]2/"!sum

Probieren Sie es online!

5~>ist ein Bereich von 1 bis einschließlich 5. 2/macht eine funk dyadisch, "ist paarweise und !wird ausgeführt. Dieser bildet somit den Bereich [1, 5]mit der Eingabe ab, die dann nach Festlegung des zu definierenden Bereichselements ausgewertet wird k. Dann werden die Ergebnisse summiert.

Conor O'Brien
quelle
1

dc , 31 24 bytes

?sa1k[lax+Kd1+k5>p]dspxp

Die Eingabe muss in umgekehrter polnischer Schreibweise (auch als Postfix-Schreibweise bezeichnet) erfolgen und in eckigen Klammern ( []) eingeschlossen sein mit:

  • KErsetzen kals Parameter;
  • + Hinzufügung darstellend;
  • -Subtraktion darstellen und _gefolgt von einer beliebigen Zahl, die eine negative Zahl darstellt;
  • * Multiplikation darstellen;
  • / Repräsentanz der Division;
  • ^ Repräsentation der Potenzierung;
  • v repräsentiert die Quadratwurzel.

Zum Beispiel -2*k+k+3*k**2+k**0.5-k/2würde als eingegeben werden [_2K*K+K2^3*+Kv+K2/-]. Dies macht sich die Tatsache zunutze, dass Kes sich um einen dcBefehl handelt, der die aktuelle Genauigkeit zurückgibt (ursprünglich festgelegt auf 1). Am Ende wird daher die Ausgabe mit einer Genauigkeit von zurückgegeben 6.

Probieren Sie es online!

R. Kap
quelle
1

Tcl , 58 Bytes

proc S {f s\ 0} {time {incr k
set s [expr $s+$f]} 5
set s}

Probieren Sie es online!

Wenn es nur mit ganzen Zahlen klappen würde, könnte ich mehr Golf spielen!

Sergiol
quelle