Sigmafy ungkapan itu

20

Bagi mereka yang tidak tahu, Sigma adalah huruf Yunani yang banyak digunakan dalam matematika sebagai tanda penjumlahan. Diberikan string yang mewakili ekspresi tergantung pada bahwa kita akan menyatakan E ( k ) , menghitung jumlah hasil untuk E ( k ) , untuk setiap k { 1 , 2 , 3 , 4 , 5 } . Secara ringkas, Anda harus menemukan S sedemikian rupa sehingga:kE(k)E(k)k{1,2,3,4,5}S

S=k=15E(k)

Contoh ungkapan: E(k)=k2+k2


Spesifikasi

  • Anda dijamin:
    • bahwa ekspresi itu valid, sehingga tidak mengandung kesalahan, dan itu tergantung pada sintaks yang dipilih (misalnya: jika Anda hanya mendukung 2*k, tidak akan ada 2k)
    • hanya memiliki nilai yang ditentukan di antara hasil Anda, jadi tidak ada nilai yang suka 1/0, infatau nanakan muncul
  • Anda dapat mengasumsikan bahwa ungkapan di atas sesuai dengan batas-batas bahasa pemrograman pilihan Anda, sehingga tidak akan menghasilkan luapan atau kesalahan terkait batas lainnya
  • Karakter ASCII non-spasi putih selain kdapat dipilih
  • Program Anda harus mendukung operasi berikut:
    • Selain itu ( +, plus(), add(),sum() )
    • pengurangan ( -, minus(), subtract())
    • eksponensial ( **, ^, pow()atau orang lain, harus ditentukan), dengan dukungan untuk basis negatif dan eksponen
    • akar kuadrat dalam bentuk sqrt(k), k^0.5, k**0.5, atau namun pun yang Anda inginkan
    • perkalian dan pembagian
  • Pengajuan dapat berupa program lengkap atau suatu fungsi, sambil menyebutkan penggunaannya
  • Setiap spasi spasi trailing / terdepan diizinkan saat mengeluarkan
  • Presisi minimum: 2 tempat desimal

Uji Kasus (dengan 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           |
+---------------+--------------+

Skor akan menjadi jumlah byte (dari flag source + compiler). Pengajuan skor terendah valid menang, sambil mencatat bahwa celah ini dilarang keras. Berikut ini adalah pseudo-code Python, untuk membuat segalanya lebih jelas.

Tuan Xcoder
sumber
Bisakah kita mengambil plus()alih +? (Pertanyaan yang sama untuk semua operator lain juga)
Stewie Griffin
@StewieGriffin Ya, plus(), add(), sum()dan setara diperbolehkan. Lihat hasil edit.
Tn. Xcoder
Tidak, Anda hanya boleh mengambil ekspresi itu sekali saja, @ComradeSparklePony
Tn. Xcoder
Bisakah kita menggunakan notasi postfix? Sebagai contoh, uji kasus 3 dari atas akan menjadi sesuatu seperti: N N2/+N2**+.
Kamerad SparklePony
Itu sangat aneh, tetapi diizinkan selama Anda dengan jelas menyatakan "format" dari E(x)@ComradeSparklePony
Tn. Xcoder

Jawaban:

3

Jelly , 5 byte

vЀ5S

Cobalah online!

Masukkan rantai monadik Jelly yang valid (Saya memutarnya di tautan saya).

Bagaimana itu bekerja

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
Biarawati Bocor
sumber
9

Mathematica, 17 14 13 byte

Terima kasih kepada Ian Miller karena telah menghemat 3 byte.

Terima kasih kepada LegionMammal978 untuk menghemat 1 byte.

#~NSum~{k,5}&

Input harus berupa ekspresi aktual yang mengandung k, misalnya:

#~NSum~{k,5}&[Sqrt[k]^3+4]
Martin Ender
sumber
2
Saya seharusnya menduga bahwa Mathematica memiliki built-in untuk ini
Tn. Xcoder
2
Mathematica selalu memiliki built-in untuk situasi. : P
totallyhuman
Anda tidak perlu 1,untuk itu Sum.
Ian Miller
Bahkan bisa disingkat menjadiN@#~Sum~{k,5}&
Ian Miller
@IanMiller Oh benar, tentu saja. Terima kasih!
Martin Ender
8

Python 3 , 40 37 byte

3 byte terima kasih kepada Arnauld.

Trik lingkup valid \ o /

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

Cobalah online!

Gunakan k**0.5bukan sqrt(k).

Biarawati Bocor
sumber
Apakah boleh menjawab pertanyaan secepat itu? o_O
Tn. Xcoder
7

JavaScript (ES7), 31 30 byte

Penggunaan k**0.5untuk 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"))

Cobalah online!

Arnauld
sumber
Ninjaed lagi! Bagus sekali.
Shaggy
3

05AB1E , 8 7 6 byte

6G¹.VO

Cobalah online!

Input dalam notasi postfix, dan menggunakan variabel N . 05AB1E adalah bahasa berbasis stack, jadi hanya notasi postfix yang berfungsi.

Format E(N): tulis nomor yang ingin Anda lakukan operasi, dan kemudian tulis tanda operasi. Misalnya, 3+4akan 3 4+, 3*4+2*3akan 3 4* 2 3* +. Perhatikan juga bahwa ini menggunakan talih-alih sqrt, dan mbukannya **, demikian sqrt(N)juga halnya Nt.

Penjelasan:

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

Oktaf , 50 46 31 29 byte

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

Cobalah online!

Eksponensial dilambangkan dengan tanda sisipan .^dan multiplikasi dilambangkan dengan .*.

Ini menyatakan fungsi anonim yang mengambil dalam argumen d. Ini disetel ksama dengan rentang 1:5dan menjumlahkan yang dievaluasi ddan mengembalikannya.

Kritixi Lithos
sumber
3

Japt , 10 byte

6ÆK=XOxUÃx

String input harus memiliki variabel sebagai huruf besar K. sqrt(K)harus dimasukkan sebagai K**0.5.

Cobalah online!

Penjelasan

evalruang lingkup tidak berfungsi untukku; harus mendefinisikan ulang variabel penghitungan Xsebagai global 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
sumber
Hmm, saya bertanya-tanya apakah pengalihan Oxsecara langsung dapat eval(membantu dengan itu ...
ETHproduksi
2

Oktaf, 25 23 byte

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

Cobalah online!

Eksponensial dilambangkan sebagai .^

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

APL (Dyalog) , 9 byte

+/⍎⎕⊣k←⍳5

Cobalah online!

Selain itu +, pengurangan adalah -, perkalian adalah ×, pembagian adalah ÷eksponensial* dan eksekusi adalah kanan ke kiri, jadi gunakan ()untuk mengelompokkan ekspresi.

Masukan dalam hal k .

Penjelasan

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)

Dan inilah solusi yang mengambil kereta sebagai masukan (seperti jawaban Jelly): +/(⍎⎕)¨⍳5.

Kritixi Lithos
sumber
2

Gangguan Umum, 55 byte

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

Cobalah online

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

versi berbeda, lebih panjang (58 byte) - mulai semakin pendek jika Anda melakukan penjumlahan dari 1 hingga 7.

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

namun metode lain dan lebih lama ( 65 64 byte) - tidak mendefinisikan fungsi - cukup masukkan ekspresi Anda ke dalam satu lingkaran. Seharusnya lebih pendek untuk jumlah yang lebih besar.

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

sumber
2

Swift, 202 184 byte

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,+))}

Untuk beberapa alasan ini hanya akan berjalan secara lokal :(.

Berikut ini penjelasan tentang apa yang saya lakukan:

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
    )
}

Terima kasih untuk @Mr. Xcoder untuk menghemat 15 byte!

Caleb Kleveter
sumber
2

TI-Basic, 12 byte

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

Panggilan dengan "string":prgmNAME, di mana stringada ekspresi TI-Basic yang valid dari K.

pizzapants184
sumber
Solusi menarik dengan panjang yang sama:Ans->u:sum(u(1,5
lirtosiast
1

Ditumpuk , 16 byte

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

Cobalah online!

5~>berkisar antara 1 hingga 5 inkluif. 2/membuat func diad, "pasangan-bijaksana, dan !dieksekusi. Dengan demikian, ini memetakan kisaran [1, 5]dengan input, yang kemudian dievaluasi setelah menentukan anggota kisaran yang akan k. Kemudian, hasilnya dijumlahkan.

Conor O'Brien
sumber
1

dc , 31 24 byte

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

Input harus diberikan dalam notasi reverse-Polandia (juga dikenal sebagai notasi postfix) dan diapit tanda kurung siku ( []) dengan:

  • Kmengganti ksebagai parameter;
  • + mewakili penambahan;
  • -mewakili pengurangan dan _diikuti oleh angka yang mewakili angka negatif;
  • * mewakili penggandaan;
  • / mewakili divisi;
  • ^ mewakili eksponensial;
  • v mewakili akar kuadrat.

Misalnya, -2*k+k+3*k**2+k**0.5-k/2akan dimasukkan sebagai [_2K*K+K2^3*+Kv+K2/-]. Ini memanfaatkan fakta bahwa itu Kadalah dcperintah yang mengembalikan presisi saat ini (awalnya diatur ke 1). Oleh karena itu, pada akhirnya, ini mengembalikan output dengan presisi6 .

Cobalah online!

R. Kap
sumber
1

R , 35 byte

k=1:5;sum(eval(parse(t=scan(,""))))

Cobalah online!

TIO link juga mencakup solusi fungsi (38 byte)

JayCe
sumber
1

Tcl , 58 byte

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

Cobalah online!

Jika itu hanya bekerja dengan bilangan bulat, saya bisa golf lebih banyak!

sergiol
sumber