İfadeyi sigmafy


20

Bilmiyordum olanlar için, Sigma ağır toplamıdır işareti olarak matematik kullanılan bir Yunan mektup. Bağlı olarak bir ifade eden bir dizi göz önüne alındığında, , biz ifade olacağı E ( k ) , sonuçları toplamını hesaplamak E ( k ) her biri için, k { 1 , 2 , 3 , 4 , 5 } . Kısacası, sen bulmalıdır S şekilde:kE(k)E(k)k{1,2,3,4,5}S

S=k=15E(k)

Bir ifade örneği: E(k)=k2+k2


gözlük

  • Garantiniz:
    • ifadenin geçerli olduğunu, bu nedenle hiçbir hata içermediğini ve seçilen sözdizimine bağlı olduğunu belirtir (örneğin: yalnızca destekliyorsanız 2*k, hayır olmaz 2k)
    • sonuçlarınız arasında yalnızca tanımlanmış değerler olması, bu nedenle hiçbir değer gibi 1/0, infveya nangörünmeyecek
  • Yukarıdaki ifadenin seçtiğiniz programlama dilinin sınırlarına uyduğunu varsayalım; bu nedenle taşmalara veya sınırla ilgili diğer hatalara neden olmaz.
  • Yerine başka herhangi bir boşluk olmayan ASCII Karakteri kseçilebilir
  • Programınız gerekir aşağıdaki işlemleri desteklemektedir:
    • ek ( +, plus(), add(), sum())
    • çıkarma ( -, minus(), subtract())
    • üs alma işlemi ( **, ^, pow()negatif bazlar ve üstlerine destek ya da diğerleri belirtilmelidir)
    • şeklinde karekök sqrt(k), k^0.5, k**0.5veya bununla birlikte başka istediğiniz
    • Çarpma ve bölme
  • Gönderim, kullanımından bahsederken, tam bir program veya işlev olabilir
  • Çıkış sırasında herhangi bir sondaki / baştaki boşluklara izin verilir
  • Minimum hassasiyet: 2 ondalık basamak

Test Kılıfları (ile 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 bayt sayısıdır (kaynak + derleyici bayraklarının sayısı). En düşük puanlama geçerli gönderim, bu boşluklar kesinlikle yasaktır olduğunu dikkate alarak kazanır .İşte bir Python sözde kodu, işlerin daha net görünmesi için.


Alabileceğimiz plus()yerine +? (Diğer tüm operatörler için de aynı sorular)
Stewie Griffin 11

@StewieGriffin Evet, plus(), add(), sum()ve benzerleri izin verilir. Düzenlemeye bakınız.
Bay Xcoder,

Hayır, ifadeyi yalnızca bir kez alabilirsiniz, @ComradeSparklePony
Bay

Postfix notasyonu kullanabilir miyiz? Örneğin, üstten test durumu 3 gibi bir şey olurdu N N2/+N2**+.
Yoldaş SparklePony 13:17

Bu çok garip, ama E(x)@ComradeSparklePony'in "biçimini" açıkça belirttiğiniz sürece izin veriliyor
Bay

Yanıtlar:


3

Jöle , 5 bayt

vЀ5S

Çevrimiçi deneyin!

Geçerli bir Jelly monadik zinciri girin (bağlantıya onları aşağı attım).

Nasıl çalışır

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

9

Mathematica, 17 14 13 bayt

3 bayt tasarrufu için Ian Miller teşekkür ederiz.

1 byte tasarruf için LegionMammal978 teşekkürler.

#~NSum~{k,5}&

Girdi k, örneğin aşağıdakileri içeren gerçek bir ifade olmalıdır :

#~NSum~{k,5}&[Sqrt[k]^3+4]

2
Mathematica'nın bunun için yerleşik olduğunu tahmin etmeliydim
Bay Xcoder

2
Mathematica'da her zaman durumlar için yerleşikler vardır. : P
totallyhuman

Buna gerek yok 1,çıkarım Sum.
Ian Miller

Aslında kısaltabilirN@#~Sum~{k,5}&
Ian Miller

@IanMiller Tabii ki doğru. Teşekkür ederim!
Martin Ender


7

JavaScript (ES7), 31 30 bayt

Kullanımları k**0.5için 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"))

Çevrimiçi deneyin!


Yine Ninjaed! Güzel bitti.
Shaggy,

3

05AB1E , 8 7 6 bayt

6G¹.VO

Çevrimiçi deneyin!

Giriş postfix notasyonunda ve N değişkenini kullanıyor . 05AB1E yığın tabanlı bir dildir, bu nedenle yalnızca postfix notasyonu çalışır.

Biçimi E(N): İşlemi yapmak istediğiniz sayıları yazın, ardından işlemin işaretini yazın. Örneğin, 3+4olurdu 3 4+, 3*4+2*3olurdu 3 4* 2 3* +. Ayrıca, bu kullanımlar dikkat tyerine sqrtve myerine **, bu yüzden sqrt(N)olacaktır Nt.

Açıklama:

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

3

Octave , 50 46 31 29 bayt

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

Çevrimiçi deneyin!

Üst üs, şapka .^ile gösterilir ve çarpma ile gösterilir .*.

Bu argüman alır anonim bir işlev bildirir d. Aralığa keşit olacak şekilde ayarlanır 1:5ve değerlendirilenleri toplar dve döndürür.


3

Japt , 10 bayt

6ÆK=XOxUÃx

Giriş dizgisi büyük harf olarak değişken olmalıdır K. sqrt(K)şeklinde girilmelidir K**0.5.

Çevrimiçi deneyin!

açıklama

evalkapsam benim lehime işe yaramadı; sayma değişkenini Xglobal olarak yeniden tanımlamak zorunda kaldım 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

Hmm, Oxdoğrudan nakil için eval(yardımcı olur mu acaba ...
ETHproductions


2

APL (Dyalog) , 9 bayt

+/⍎⎕⊣k←⍳5

Çevrimiçi deneyin!

Toplama +, çıkarma -, çarpma ×, bölme ÷üstel *ve yürütme sağdan sola olduğu ()için ifadeleri gruplandırmak için kullanın .

Giriş cinsindendir k.

açıklama

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)

Ve burada (Jelly cevap gibi) girdi olarak trenler alan bir çözüm: +/(⍎⎕)¨⍳5.


2

Ortak Lisp, 55 bayt

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

Çevrimiçi deneyin

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

farklı, daha uzun (58 bayt) sürüm - 1'den 7'ye toplamı yaparsanız kısalmaya başlar.

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

daha başka ve daha uzun bir yöntem ( 65 64 bayt) - işlevi tanımlamaz - yalnızca ifadenizi bir döngüye ekler. Daha büyük meblağlar için kısalması gerekir.

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

2

Swift, 202 184 bayt

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

Nedense bu sadece yerel olarak çalışacaktır :(.

İşte ne yaptığımın bir açıklaması:

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

@ Mr'a teşekkürler. 15 byte tasarruf için Xcoder!


2

TI-Basic, 12 bayt

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

Herhangi bir geçerli TI-Basic ifadesi olan "string":prgmNAME, ile arayın .stringK


Aynı uzunluktaki ilginç çözüm:Ans->u:sum(u(1,5
lirtosiast

1

Yığılmış , 16 bayt

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

Çevrimiçi deneyin!

5~>1 ila 5 arasında bir aralıktır. 2/bir func dyadic yapar ", çift bilge ve !yürütülür. Bu sayede [1, 5], giriş yapılacak aralığın eşleştirilmesi gerçekleştirilir ve daha sonra yapılacak ara eleman tanımlandıktan sonra değerlendirilir k. Sonra, sonuçlar toplanır.


1

dc , 31 24 bayt

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

Giriş, Polonya dili notasyonunda (postfix notasyonu olarak da bilinir) verilmelidir ve aşağıdakilerle birlikte köşeli parantez ( []) içine alınmalıdır :

  • Kkparametre olarak değiştirilir ;
  • + ilaveyi temsil eden;
  • -çıkarma işlemini temsil eder ve _ardından negatif sayıyı temsil eden herhangi bir sayıyı takip eder;
  • * çarpımı temsil eden;
  • / bölünmeyi temsil etmek;
  • ^ üstelleştirmeyi temsil eden;
  • v karekökü temsil eder.

Örneğin, -2*k+k+3*k**2+k**0.5-k/2olarak girdi olurdu [_2K*K+K2^3*+Kv+K2/-]. Bu , geçerli kesinliği (başlangıçta ayarlanmış ) döndüren Kbir dckomuttan kaynaklanmaktadır 1. Bu nedenle, sonunda, çıktıyı kesin olarak döndürür 6.

Çevrimiçi deneyin!



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.