การแสดงออกหนึ่งค่ามากมาย


26

การใช้สัญลักษณ์ทางคณิตศาสตร์ที่คุ้นเคยของเรา: +, x, วงเล็บ, และจำนวนตรรกยะใด ๆ ทำให้ง่ายต่อการสร้างนิพจน์ที่ประเมินค่าไปยังหมายเลขที่ต้องการ ตัวอย่างเช่น1+(2x3)=7, (1+2)+(3x6.5)=22.5และอื่น ๆ น่าเบื่อพอสมควร

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

  • 1±2±3 = {-4,0,2,6}เพราะ1±2±3สามารถใด ๆ ของ1+2+3, 1+2-3, 1-2+3และ1-2-3และค่านิยมของพวกเขา6,0,2,-4ตามลำดับ
  • (±2)x(2±3) = {-10,-2,2,10} ด้วยเหตุผลที่คล้ายกัน

ตอนนี้มันจะเปิดออกให้ชุดของตัวเลขจริงที่แตกต่างใด ๆ ก็เป็นไปได้ที่จะสร้างการแสดงออกด้วย+, x, (, ), ±และตัวเลขจริงที่ประเมินชุดที่กำหนด

งาน

งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นในภาษาที่คุณเลือกที่จะใช้ลำดับ (รายชื่อ / อาร์เรย์ / รูปแบบที่สะดวกใด ๆ ) ของจำนวนเต็มและผลการแสดงออก (เป็นสตริง) ประกอบด้วย+, x, (, ), ±และตัวเลขเหตุผลที่ประเมินถึงชุดของตัวเลขที่กำหนด

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

เกณฑ์การชนะ

นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง

อินพุต | ผลลัพธ์ที่เป็นไปได้
------------- + -----------------------------
[1,2,3] | 2 ± 0.5 ± 0.5                   
[-7, -3,1,21] | (1 ± 2) x (3 ± 4)

ความคิดที่นำมาจากคำถามในการแข่งขันของเมือง, ฤดูใบไม้ร่วง 2015


5
ยินดีต้อนรับสู่ PPCG! ความท้าทายแรกที่ดี! ฉันคิดว่าสิ่งนี้จะดึงดูดคำตอบได้มากขึ้นถ้ามันเป็นไปในทางอื่น (หาเซตที่แสดงออก) เพราะดูเหมือนว่านี่เป็นความท้าทายที่ค่อนข้างยุ่งยาก ความท้าทายที่ดีอย่างไรก็ตาม!
HyperNeutrino

ยินดีต้อนรับอีกครั้ง! เมื่อเพิ่มไปยัง @HyperNeutrino อาจจะมีวิธีแก้ไขปัญหาหลายอย่างสำหรับชุดบางชุดซึ่งอาจเป็นปัญหาเมื่อตัดสินใจว่าคำถามใดเป็น "ดีที่สุด" เว้นแต่ว่าปัจจัยการตัดสินใจคือความกระชับ
David Archibald

@HyperNeutrino ขอบคุณ! ฉันเข้าใจว่านี่อาจจะยากไปหน่อย แต่ฉันเชื่อมั่นในความสามารถที่เหนือกว่าของนักกอล์ฟที่นี่ เรามาดูกันว่ามันจะเปิดออก :)
Ankoganit

3
ใช่. นักกอล์ฟบางคนในเว็บไซต์นี้มีพลังวิเศษที่น่าทึ่งและเรายังสงสัยว่าบางคนกำลังเล่นบอทบอท> _>: D
HyperNeutrino

@DavidArchibald ใช่ผลลัพธ์ที่ต้องการคือโซลูชันใด ๆที่ใช้งานได้
Ankoganit

คำตอบ:


11

Python 2 , 56 ไบต์

f=lambda h,*t:t and"(.5?.5)*(%s+%%s)+"%f(*t)%-h+`h`or`h`

ลองออนไลน์!

ยืน? ±ตัวอย่างการใช้งาน:

f(-3,5,20) ->
(.5?.5)*((.5?.5)*(20+-5)+5+3)+-3

คิดคือการที่เราสามารถใช้การแสดงออกEและติดค่าใหม่ชุดของค่าด้วยการทำh(.5±.5)*(E+-h)+h


ทำไม+-hและไม่เพียง-h? นั่นคือเหตุใดจึงไม่สร้าง+a -และนำส่วน-ที่อยู่ในโปรแกรมออก
isaacg

1
@isaacg ข้อมูลจำเพาะไม่อนุญาตให้-ผู้ปฏิบัติงานในนิพจน์
xnor

9

Haskell , 52 ไบต์

f(h:t)=shows h"+(.5?.5)*("++f[x-h|x<-t]++")"
f e="0"

ลองออนไลน์!

ใช้สำหรับ? ±ตัวอย่าง:

f [1,3,7] ->
1+(.5?.5)*(2+(.5?.5)*(4+(.5?.5)*(0)))

ฟังก์ชั่นshowsนี้shows a b=(show a)++bเป็นเคล็ดลับที่ฉันเรียนรู้จาก Lynn

shows 12 "abc" ->
"12abc"

5

Haskell , 58 ไบต์

ใช้#สำหรับ±เนื่องจากเป็นหนึ่งไบต์ที่น้อยกว่า

f รับรายการจำนวนเต็มและส่งคืนสตริง

f[x]=show x
f(x:r)=show x++"+(.5#.5)x("++f((-x+)<$>r)++")"

ผลลัพธ์เป็นรูปแบบn+(.5#.5)x(rest)โดยที่nองค์ประกอบแรกของรายการและrestเป็นตัวแทนขององค์ประกอบอื่น ๆ ที่มีการnลบออกจากแต่ละรายการ

ลองออนไลน์!


5

เยลลี่ 29 ไบต์

“(¤)”j.⁾+×j;”(
I;@Ḣj¢;”)ẋ⁸L¤¤

พิมพ์v + (0.5¤0.5) × (ฉัน1 + (0.5¤0.5) × ((ฉัน2 + (0.5¤0.5) × (... (ฉัน ( n )))))โดยที่vเป็นหมายเลขแรกใน อาร์เรย์อินพุทและฉันnเป็นn THความแตกต่างที่เพิ่มขึ้นระหว่างองค์ประกอบของอาร์เรย์การป้อนข้อมูล

ลองออนไลน์!

อย่างไร?

“(¤)”j.⁾+×j;”( - Link 1, adjoining list: no input
“(¤)”          - literal     ['(','¤',')']
      .        - literal     0.5
     j         - join        ['(',0.5,'¤',0.5,')']
       ⁾+×     - literal     ['+','×']
          j    - join        ['+',['(',0.5,'¤',0.5,')'],'×']
            ”( - literal     '('
           ;   - concatenate ['+',['(',0.5,'¤',0.5,')'],'×','(']

I;@Ḣj¢;”)ẋ⁸L¤¤ - Main link: list a               e.g. [-1,5,2]
I              - incremental differences(a)           [6,-3]
   Ḣ           - head(a)                              [-1]
 ;@            - concatenate (rev @rgs)               [-1,6,-3]
     ¢         - last link (1) as a nilad             ['+',['(',0.5,'¤',0.5,')'],'×','(']
    j          - join                                 [-1,['+',['(',0.5,'¤',0.5,')'],'×','('],6,['+',['(',0.5,'¤',0.5,')'],'×','('],-3]
             ¤ - nilad followed by link(s) as a nilad
            ¤  -     nilad followed by link(s) as a nilad
          ⁸    -         link's left argument, a
           L   -         length                       3
       ”)      -     literal ')'
         ẋ     -     repeat                           [')',')',')']
      ;        - concatenate                          [-1,['+',['(',0.5,'¤',0.5,')'],'×','('],6,['+',['(',0.5,'¤',0.5,')'],'×','('],-3,')',')',')']
               - implicit print                       -1+(0.5¤0.5)×(6+(0.5¤0.5)×(-3))

4

05AB1E , 25 ไบต์

0¸«¥X;D"+(ÿ±ÿ)*("ý¹g<')×J

ลองออนไลน์!

คำอธิบาย

0¸«                        # prepend a 0 to input list
   ¥                       # calculate delta's
    X;D                    # push 0.5 twice
       "+(ÿ±ÿ)*("          # push this string and interpolate 0.5 where "ÿ" is
                 ý         # merge the list of delta's with this string as a separator
                  ¹g<')×J  # add the closing parenthesis


0¸«¥¤s¨RvX;Dy"ÿ+(ÿ±ÿ)*(ÿ)สร้างการแสดงออกจากขวาน่าเสียดายที่จบลงที่ว่านับไบต์เช่นเดียวกันกับ 8 ไบต์ที่ใช้สำหรับการตั้งค่าเป็นขยะใหญ่ที่นี่



2

JavaScript (ES6), 56 51 ไบต์

f=([v,...a],x=v)=>x?x+`+(.5@.5)*(${f(a,a[0]-v)})`:0

ขึ้นอยู่กับสูตรของ @ JonathanAllan ย่อมาจาก@±

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