Sigmafy การแสดงออก


20

สำหรับผู้ที่ไม่ทราบซิกมา เป็นตัวอักษรกรีกที่ใช้อย่างมากในวิชาคณิตศาสตร์เป็นสัญญาณรวม ได้รับสตริงที่แสดงการแสดงออกขึ้นอยู่กับว่าเราจะแสดงคำนวณผลรวมของผลการค้นหาสำหรับสำหรับแต่ละ\} โดยสังเขปคุณควรพบSเช่นนั้น:kE(k)E(k)k{1,2,3,4,5}S

S=Σk=15E(k)

ตัวอย่างของนิพจน์: E(k)=k2+k2


รายละเอียด

  • คุณรับประกัน:
    • นิพจน์นั้นถูกต้องดังนั้นจึงไม่มีข้อผิดพลาดและขึ้นอยู่กับไวยากรณ์ที่เลือก (เช่น: หากคุณสนับสนุนเท่านั้น2*kจะไม่มี2k)
    • เพียงได้กำหนดค่าในหมู่ผลลัพธ์ของคุณเพื่อให้ค่าไม่ชอบ1/0, infหรือnanจะปรากฏ
  • คุณสามารถสันนิษฐานได้ว่านิพจน์ด้านบนเหมาะสมกับขีด จำกัด ของภาษาการเขียนโปรแกรมที่คุณเลือกดังนั้นมันจะไม่ส่งผลให้เกิดการโอเวอร์โฟลว์หรือข้อผิดพลาดอื่น ๆ ที่เกี่ยวข้องกับการ จำกัด
  • อักขระ ASCII ที่ไม่ใช่ whitespace อื่นแทนkสามารถเลือกได้
  • โปรแกรมของคุณต้องรองรับการทำงานต่อไปนี้:
    • นอกจาก ( +, plus(), add(), sum())
    • ลบ ( -, minus(), subtract())
    • การยกกำลัง ( **, ^, pow()หรืออื่น ๆ ควรมีการระบุ) ด้วยการสนับสนุนไปยังฐานเชิงลบและเลขยกกำลัง
    • รากที่สองในรูปแบบของsqrt(k), k^0.5, k**0.5หรืออย่างไรก็ได้ที่คุณต้องการ
    • การคูณและการหาร
  • การส่งอาจเป็นโปรแกรมเต็มรูปแบบหรือฟังก์ชั่นในขณะที่กล่าวถึงการใช้งาน
  • ช่องว่างต่อท้าย / นำใด ๆ ที่ได้รับอนุญาตเมื่อออก
  • ความแม่นยำขั้นต่ำ: ทศนิยม 2 ตำแหน่ง

กรณีทดสอบ (พร้อม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           |
+---------------+--------------+

คะแนนจะเป็นจำนวนไบต์ (ของธง + คอมไพเลอร์) การให้คะแนนที่ถูกต้องที่สุดจะเป็นสิ่งที่ชนะในขณะเดียวกันก็ต้องระวังช่องโหว่เหล่านี้อย่างเคร่งครัด นี่คือโค้ดหลอกของ Python เพื่อทำให้สิ่งต่าง ๆ ชัดเจนยิ่งขึ้น


เราสามารถใช้plus()แทนได้+หรือไม่ (คำถามเดียวกันสำหรับผู้ให้บริการรายอื่นทั้งหมดด้วย)
Stewie Griffin

@StewieGriffin ใช่plus(), add(), sum()และรายการเทียบเท่าได้รับอนุญาต ดูการแก้ไข
นาย Xcoder

ไม่คุณสามารถใช้นิพจน์ได้ครั้งเดียวเท่านั้น @ComradeSparklePony
Mr. Xcoder

เราสามารถใช้รูปแบบ postfix ได้หรือไม่? ตัวอย่างเช่นกรณีทดสอบ 3 N N2/+N2**+จากด้านบนจะเป็นสิ่งที่ชอบ
สหาย SparklePony

มันแปลกมาก แต่จะได้รับอนุญาตตราบใดที่คุณระบุ "รูปแบบ" ของE(x)@ComradeSparklePony ไว้อย่างชัดเจน
Mr. Xcoder

คำตอบ:


3

เยลลี่ 5 ไบต์

vЀ5S

ลองออนไลน์!

ใส่เชน monadic ของเยลลี่ที่ถูกต้อง (ฉันใส่ลงในลิงค์ของฉัน)

มันทำงานอย่างไร

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 ไบต์

ขอบคุณ Ian Miller สำหรับการบันทึก 3 ไบต์

ขอบคุณ LegionMammal978 สำหรับการบันทึก 1 ไบต์

#~NSum~{k,5}&

อินพุตควรเป็นนิพจน์จริงที่มีkเช่น:

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

2
ฉันควรจะเดาได้ว่า Mathematica ได้สร้างสิ่งนี้
Mr. Xcoder

2
Mathematica เสมอมี built-ins สำหรับสถานการณ์ : P
มนุษย์

คุณไม่จำเป็นต้องอยู่ในนั้น1, Sum
เอียนมิลเลอร์

ในความเป็นจริงมันสั้นลงได้N@#~Sum~{k,5}&
เอียนมิลเลอร์

@IanMiller โอ้ใช่แล้วแน่นอน ขอขอบคุณ!
Martin Ender


7

JavaScript (ES7), 31 30 ไบต์

ใช้สำหรับk**0.5sqrt(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"))

ลองออนไลน์!


Ninjaed อีกครั้ง! ทำได้ดีมาก
Shaggy

3

05AB1E , 8 7 6 ไบต์

6G¹.VO

ลองออนไลน์!

การป้อนข้อมูลที่อยู่ในสัญกรณ์ postfix และใช้ตัวแปร N 05AB1E เป็นภาษาแบบสแต็กดังนั้นเครื่องหมาย postfix จะทำงานได้เท่านั้น

รูปแบบของE(N): เขียนหมายเลขที่คุณต้องการดำเนินการด้วยแล้วเขียนสัญลักษณ์ของการดำเนินการ ยกตัวอย่างเช่น3+4จะ3 4+, จะเป็น3*4+2*3 3 4* 2 3* +นอกจากนี้ทราบว่าการใช้งานนี้tแทนsqrtและmแทน**ดังนั้นจะsqrt(N)Nt

คำอธิบาย:

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 bytes

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

ลองออนไลน์!

ยกกำลังจะเขียนแทนด้วยลูกศรและการคูณมีการแสดงด้วย.^.*

dประกาศนี้ฟังก์ชั่นที่ไม่ระบุชื่อที่ใช้ในการโต้เถียง มันตั้งค่าkให้เท่ากับช่วง1:5และผลรวมการประเมินdและส่งกลับ


3

Japt , 10 ไบต์

6ÆK=XOxUÃx

Kสายป้อนควรมีตัวแปรเป็นตัวพิมพ์ใหญ่ ควรจะกรอกข้อมูลsqrt(K)K**0.5

ลองออนไลน์!

คำอธิบาย

evalขอบเขตไม่ทำงานในความโปรดปรานของฉัน; มีที่จะกำหนดตัวแปรนับเป็นระดับโลกXK

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

อืมฉันสงสัยว่า transpiling Oxโดยตรงeval(จะช่วยได้หรือไม่
ETHproductions


2

APL (Dyalog)ขนาด 9 ไบต์

+/⍎⎕⊣k←⍳5

ลองออนไลน์!

การ+บวกคือการลบคือการ-คูณคือการ×หารคือการ÷ยกกำลังคือ*และการดำเนินการเป็นขวาไปซ้ายดังนั้นใช้()กับการแสดงออกของกลุ่ม

kการป้อนข้อมูลเป็นในแง่ของ

คำอธิบาย

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)

และนี่คือวิธีการแก้ปัญหาที่ใช้รถไฟเป็น input (เช่นคำตอบ Jelly) +/(⍎⎕)¨⍳5คือ:


2

Common Lisp, 55 ไบต์

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

ลองออนไลน์

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

เวอร์ชันที่ต่างกันยาวขึ้น (58 ไบต์) - เริ่มสั้นลงถ้าคุณหาผลรวมจาก 1 ถึง 7

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

อีกวิธีหนึ่งและอีกต่อไป ( 65 64 ไบต์) - ไม่ได้กำหนดฟังก์ชั่น - เพียงแค่แทรกนิพจน์ของคุณลงในลูป ควรสั้นลงเพื่อผลรวมที่มากขึ้น

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

2

สวิฟต์, 202 184 ไบต์

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

ด้วยเหตุผลบางอย่างสิ่งนี้จะทำงานภายใน :(

นี่คือคำอธิบายของสิ่งที่ฉันทำ:

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 Xcoder สำหรับบันทึก 15 ไบต์!


2

TI-Basic, 12 ไบต์

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

โทรกับ"string":prgmNAMEที่stringใด ๆ แสดงออก KTI-พื้นฐานที่ถูกต้อง


วิธีแก้ปัญหาที่น่าสนใจที่มีความยาวเท่ากัน:Ans->u:sum(u(1,5
lirtosiast

1

ซ้อนกัน , 16 ไบต์

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

ลองออนไลน์!

5~>คือช่วงจาก 1 ถึง 5 incluive 2/ทำให้ func dyadic "เป็นคู่ที่ชาญฉลาดและ!ดำเนินการ นี้จึงแผนที่ช่วงมีการป้อนข้อมูลที่ได้รับการประเมินแล้วหลังจากกำหนดสมาชิกช่วงที่จะเป็น[1, 5] kจากนั้นสรุปผลการทดลอง


1

dc , 31 24 ไบต์

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

ข้อมูลจะต้องได้รับในสัญกรณ์ย้อนกลับโปแลนด์ (หรือที่เรียกว่าสัญกรณ์ postfix) และล้อมรอบในวงเล็บเหลี่ยม ( []) ด้วย:

  • Kแทนที่kเป็นพารามิเตอร์;
  • + เป็นตัวแทนนอกจากนี้;
  • -แทนการลบและ_ตามด้วยหมายเลขใด ๆ ที่แทนจำนวนลบ;
  • * แทนการคูณ
  • / เป็นตัวแทนของแผนก;
  • ^ แทนการยกกำลัง;
  • v คิดเป็นสแควร์รูท

ยกตัวอย่างเช่นจะมีการป้อนข้อมูลเป็น-2*k+k+3*k**2+k**0.5-k/2 [_2K*K+K2^3*+Kv+K2/-]สิ่งนี้ใช้ประโยชน์จากความจริงที่ว่าKเป็นdcคำสั่งที่ส่งคืนความแม่นยำในปัจจุบัน (เริ่มแรกตั้งเป็น1) 6ดังนั้นในท้ายที่สุดนี้ส่งกลับเอาท์พุทที่มีความแม่นยำของ

ลองออนไลน์!



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.