การเขียนโปรแกรม Dichotomies (ตามตัวอักษร)


33

ลองพิจารณาคำถามที่เขียนเป็นภาษาอังกฤษธรรมดา ๆ ซึ่งคำตอบนั้นเกี่ยวข้องกับคำหรือวลีที่แม่นยำ (แต่อาจฉลาด) สองข้อที่สามารถแยกออกได้โดยคำว่า 'และ':

ถาม:เหรียญสองด้านคืออะไรA:หัวและก้อย

ถาม:วิธีเดินทางที่ดีที่สุดคืออะไรA:เครื่องบินและ jetpack

ถาม:ทำไมกาถึงเหมือนโต๊ะเขียนหนังสือ? A:เพราะมี 'b' ทั้งในและ n 'ในทั้งสอง

เป้าหมาย

เขียนโปรแกรมที่ทำงานตามปกติเมื่อแสดงผลคำถามดังกล่าว

เมื่อตัวละครอื่น ๆ ถูกลบออกจากโปรแกรมที่เริ่มต้นด้วยตัวอักษรตัวที่สองและผลที่ได้คือการเรียกใช้อีกครั้งผลลัพธ์ที่ได้ควรจะเป็นสิ่งที่ทางด้านซ้ายของ 'และ' ในคำตอบ

เมื่อตัวละครอื่น ๆ ถูกลบออกจากโปรแกรมที่เริ่มต้นด้วยตัวอักษรตัวแรกและผลที่ได้คือการเรียกใช้อีกครั้งผลลัพธ์ที่ได้ควรจะเป็นสิ่งที่ทางขวาของ 'และ' ในคำตอบ

(ตัวเอง 'และ' ไม่ได้ส่งออก)

ตัวอย่าง

หากเป็นโปรแกรม

A1B2C3D4E5F6G7H8I9

และผลลัพธ์ของมันคือ

What are the two sides of a coin?

จากนั้นการส่งออกของABCDEFGHIที่ควรจะเป็นheadsและการส่งออกของที่ควรจะเป็น123456789tails

กฎเกี่ยวกับคำถามและคำตอบ

  • คุณอาจใช้คำถามตัวอย่างของฉัน แต่ฉันขอแนะนำให้คุณทำขึ้นของคุณเอง
  • คำถามและคำตอบทั้งสองส่วน:
    • จะต้องมีความแตกต่าง
    • ควรเป็นภาษาอังกฤษที่มีความหมายตามหลักไวยากรณ์
    • อาจมีเฉพาะASCII ที่พิมพ์ได้ (hex 20 ถึง 7E)
  • ในอุดมคติแล้วคำถามจะได้รับการแปลงเป็นตัวใหญ่และคั่นด้วย (แต่คำตอบไม่จำเป็นต้องเป็น)
  • คำถามจะต้องมีความยาวอย่างน้อย 30 ตัวอักษรและมีเอนโทรปีด้านบนหรือเท่ากับ 3.5 (พิมพ์สตริง, กดปุ่มคำนวณ , ค้นหาH (X)ล่าสุด)
  • คำตอบสองส่วน (ไม่รวมถึง [space]and[space]ระหว่างกัน) แต่ละตัวต้องมีอย่างน้อย 5 ตัวอักษรโดยมีเอนโทรปีด้านบนหรือเท่ากับ 2
  • คำว่า 'และ' อาจปรากฏขึ้นในส่วนคำตอบอย่างใดอย่างหนึ่ง

กฎระเบียบเกี่ยวกับรหัส

  • ไม่มีตัวอย่างข้อมูลโค้ด 3 รายการใน:
    • มีความคิดเห็นหรือสิ่งอื่นใดที่ผู้แปล / ล่ามไม่สนใจแบบดั้งเดิม (ไม่ต้องกังวลกับการใส่เครื่องหมายอัฒภาคพิเศษหรือสองครั้งใน แต่ถ้าคุณคิดว่ามันเป็นความเห็น)
    • ออกจากโปรแกรมในการทำงานกลางคัน
  • รหัสอาจมีอักขระใด ๆ รวมถึง Unicode และ ASCII ที่ไม่สามารถพิมพ์ได้
  • มันอาจมีจำนวนอักขระที่คี่หรือคู่
  • เอาต์พุตไปที่ stdout หรือไฟล์หรืออะไรก็ตามที่ดูสมเหตุสมผล ไม่มีอินพุต

เกณฑ์การให้คะแนน

เนื่องจากฉันไม่ต้องการส่งเสริมคำตอบที่เล่นกอล์ฟ แต่ฉันต้องการส่งเสริมคำตอบที่ชาญฉลาดมากขึ้นการให้คะแนนจะเป็นสิ่งที่อยู่ระหว่างการแข่งขันโค๊ด - กอล์ฟและการประกวดความนิยม:

คะแนน = (upvotes - downvotes) - floor((bytes in code that outputs question) / 3)

คะแนนสูงสุดชนะ

(ใช้http://mothereff.in/byte-counterเป็นตัวนับไบต์)


6
ใช่นี่เป็นเรื่องยากที่จะทำในภาษา "ปกติ" เช่น JavaScript x0=00;;ไกลฉันจะได้รับเป็นสิ่งที่ต้องการ ท้าทายมาก!
Doorknob

@Doorknob ขออภัยที่จะทำให้เรือของคุณยุบ แต่00;โดยทั่วไปแล้วผู้คอมไพเลอร์จะถูกเพิกเฉย ...
John Dvorak

2
อย่างจริงจัง ... "แอปเปิ้ล" มีเอนโทรปีของแชนนอนที่ 1.92 ???
John Dvorak

4
It may have an odd or even number of charactersมีจำนวนอักขระที่ไม่แปลกหรือเท่ากันหรือไม่?
สแน็

1
@Sack ที่ให้คนรู้ว่าส่วนคำตอบของรหัสทั้งสองไม่จำเป็นต้องมีความยาวเท่ากัน
งานอดิเรกของ Calvin

คำตอบ:


55

Javascript (148 ไบต์)

สร้างตัวอักษรไร้สาระบางตัวโดยมีผลข้างเคียงของการสร้างการแจ้งเตือน * สำหรับคำถาม (ตัวแยกทำหน้าที่คล้ายกัน แต่สร้างการแจ้งเตือน * สำหรับแต่ละคำตอบ)

"';"+alert( 'What is the ideal breakfast???')+/ " ;apl=e"rbta(k"esnc"r.armebplleadc ee g g s(" ) + " \/)k;e"/+ ",t'hceo 'c)a;kye= ailse rat (lpi)e "

แยก:

";+lr('hti h da rafs??)/";p="baken".replace   (    /ke/ ,'co');y=alert(p) 

และ

'"aet Wa steielbekat?'+  alert("scrambled eggs")+"\);"+"the cake is a lie"

 

คำถาม: What is the ideal breakfast???

คำตอบ: baconและscrambled eggs


4
นี่คือคุณภาพที่ฉันชอบเกี่ยวกับเว็บไซต์นี้! คุณสามารถหาคนที่สามารถทำสิ่งนี้ได้ที่ไหนอีก?
Cruncher

1
ฉันได้เรียนอิมโพรฟ(อาจเห็นได้ชัด)และฉันจะให้ +1 แก่คุณที่นี่สำหรับค่าอารมณ์ขัน แต่เป็นสิ่งที่วิศวกรของรูรับแสงวิทยาศาสตร์รู้ว่าเราเป็นผู้ปฏิบัติงานของวิทยาศาสตร์ ... ดังนั้นมันเป็นส่วนหนึ่งที่สนุกที่สุดคือการทำให้ปืนเรียบร้อย :-)
Dr. Rebmu

29

Brainfuck (437 ตัวอักษร)

ฉันต้องสารภาพว่านี่เป็นโปรแกรมสมองครั้งแรกของฉันที่ทำสิ่งที่มีความหมาย โปรแกรมได้รับการปรับให้เหมาะสมอย่างมากสำหรับระบบหน่วยความจำต่ำเนื่องจากใช้หน่วยความจำเพียง 4 ตำแหน่ง

คำถาม: What are the two main groups of trees?

คำตอบ: conifersและbroadleafs

-+[[++++++++++++++++++++++[+>++++++[+>++++++++++++<>-+]+>+-+.++++++<+<+-+]+>+++++.+>++.+-..------.-<--..-+-+-+..->.-+-+-+.+<+++.+-+-+-+-+.++++.+++.+<.+>-+++-+++-+++-++.->]]++-+[[+-+-[[+++++++++++++++[>++>+++++>+++++++<<<-]>-->>---<++.+++++++++++++++++.-------.>.<<.>.>--.<++++.<.>>++.<+++.---.<.>>.+++.<++++++++++.<.>--.------------.++++++++.+++++.<.>-------.>-----.<++++++++.>+++.<+.>--.<<.>-.---------.<.>>+.--.<-..>+.<<[<++>-]<-.<]]]]

ห่วงหลัก

โปรแกรมประกอบด้วยลูปหลัก (ซึ่งไม่ใช่ลูปจริงๆเนื่องจาก [] - บล็อกทั้งหมดจะถูกเรียกใช้งานเพียงครั้งเดียว) และสองส่วน

-+[[        // let answers enter
            * SNIP interleaved answer sections *
]]
++-+[[      // let odd answer and question enter
    +-+-[[  // let question enter
            * SNIP question section *
    ]]
]]

หากคุณต้องการทดสอบส่วนอย่างอิสระคุณต้องคำนึงถึงการวนซ้ำหลัก ตำแหน่ง 0 ประกอบด้วย -1 ในการตอบคู่ 1 ในการตอบแปลกและ 2 ในส่วนคำถาม

ส่วนคำตอบ

แม้คำตอบ (ลบคำแนะนำแปลก ๆ ):

// location 0 contains minus 1 from main
// set location 1 = 10 * 10 minus 1 = 99 (c)
+++++++++++[>++++++++++<-]>-. // c
++++++++++++.-.     // on
-----.---.          // if
-.+++++++++++++.+.  // ers
<                   // goto 0 (which contains 0)
+-+-+-+-+-          // padding to match length of odd answer

คำตอบที่แปลก (ลบคำแนะนำออก):

// location 0 contains 1 from main
// set location 1 = 16 * 6 plus 2 = 98 (b)  location used for characters below 'l'
// set location 2 = 16 * 7 plus 2 = 114 (r) location used for 'l' and above
+++++++++++++++[>++++++>+++++++<<-]>++.>++. // br
---.<               // o
-.+++.              // ad
>---.<              // l
+.----.+++++.       // eaf
>+++++++.           // s
>                   // goto 3 (which contains 0)

ส่วนคำถาม

ฉันตัดสินใจที่จะจัดเก็บพื้นที่เพื่อแยกตำแหน่งที่ตั้งเนื่องจากค่าแตกต่างจากตัวละครอื่นอย่างมาก <.>นี้จะช่วยให้พื้นที่ที่จะพิมพ์เพียงกับ

// location 0 contains 2 from main
// set location 1 = 17 * 2 minus 2 = 32 (space)
// set location 2 = 17 * 5 plus 2 = 87 (W)   location used for characters below 'r'
// set location 3 = 17 * 7 minus 3 = 116 (t) location used for 'r' and above
+++++++++++++++[>++>+++++>+++++++<<<-]>-->>---<++. // W
+++++++++++++++++.  // h
-------.>.<         // at
<.>                 // (space)
.>--.<++++.         // are
<.>                 // (space)
>++.<+++.---.       // the
<.>                 // (space)
>.+++.<++++++++++.  // two
<.>                 // (space)
--.------------.    // ma
++++++++.+++++.     // in
<.>                 // (space)
-------.>-----.     // gr
<++++++++.>+++.     // ou
<+.>--.<            // ps
<.>                 // (space)
-.---------.        // of
<.>                 // (space)
>+.--.<-..>+.       // trees
<<[<++>-]<-.<       // ? (value_of_space * 2 minus 1)

การปรับปรุงครั้งสุดท้าย

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


23

รุ่นที่ - 84

ค่อนข้างภูมิใจในสิ่งนี้

โปรแกรมเต็มรูปแบบ: เหรียญสองด้านคืออะไร? (คอนโซล)

echo What are two sides of a coin?  2>>xx  2>>cc&&eecchhoo  hteaaidlss  2>>xx  2>>cc

Evens only: heads (ไฟล์ 'c')

eh htaetosdso  on 2>x >c&echo heads 2>x >c

ราคาต่อรองเท่านั้น: ก้อย (ไฟล์ 'x')

coWa r w ie faci? >x 2>c&echo tails >x 2>c

ทำงานโดยเปลี่ยนเส้นทางเอาต์พุตข้อผิดพลาดไปยังไฟล์ในทั้งสองกรณี


คิดวิธีที่จะทำให้มันสั้นลง แต่นั่นจะต้องรอจนถึงวันพรุ่งนี้
Οurous

3
มีคะแนนสูงสุดจนถึงตอนนี้: 12 - 28 = -16
justhalf

20

Python - 104 96 (เล่นกอล์ฟ: 76)

โซลูชันของฉันค่อนข้างง่าย (และสามารถอ่านได้):

"";print 'What is the color of a zebra?' ;""
paraianat= "' b l a c k '"
aparaianat="'w h i t e'"

เอาท์พุท:

What is the color of a zebra?
black
white

สุจริตฉันพบความคิดสำหรับบรรทัดแรกในคำตอบของ bitpwner


ทางเลือกที่อ่านง่ายยิ่งขึ้น: - 113 105 97

"";print 'What is the color of a zebra?' ;""
"p r i n t ' b l a c k '" ;"p r i n t ' w h i t e '"

ทางเลือกที่สั้นลง: 86 76

"";print'What is the color of a zebra?';""
"""";;pprriinntt''bwlhaictke''"""

"กระดานหมากรุก" ก็ทำตามข้อกำหนดเช่นกัน
Martin Ender

3
@ MartinBüttner Zebra :-P
David Richerby

zebraโอ้ฉันชอบ และมันก็เหมาะอย่างยิ่งกับเวอร์ชั่น "กอล์ฟ" ที่มีตัวอักษร 30 ตัว ดังนั้นฉันจึงปรับเปลี่ยนโซลูชันเล็กน้อย :)
Falko

1
สตริงที่ยกมาเป็นสามไม่ใช่ความคิดเห็น แต่เป็นสตริงที่มีหลายบรรทัด เนื่องจากพวกเขายังใช้เป็นสตริง docพวกเขาอาจสับสนกับความคิดเห็น
Falko

1
คำถามที่อัพเดตมีความยาวเพียง 29 ตัวอักษร
เดนนิส

15

Rebmu : 79 ตัวอักษรหรือ (37 + ความยาว (p1) + 2 * สูงสุด (ความยาว (p2), ความยาว (p3)))

ก่อนอื่นฉันจะให้คำตอบ 79 ตัวอักษรที่ถามว่าคุณต้องเรียนภาษาอะไร (เอนโทรปี 4.0, 30 ตัวอักษรไม่รวม?) และเสนอคำแนะนำของRebol และ [Red] ให้คุณ :

DD  11  DD :do dd {dd  {p{Which languages must you learn?}qt}} pp{{[RReebdo]l}}

กลยุทธ์พิเศษที่มีให้ที่นี่ที่ไม่ได้อยู่ในภาษาอื่นมาจากการใช้ประโยชน์จากความจริงที่ว่าเครื่องหมายวงเล็บปีกกาเป็นตัวคั่นสตริงแบบอสมมาตรซึ่งสามารถซ้อนกันได้อย่างถูกกฎหมาย:

my-string: {"It's cool," said {Dr. Rebmu}, "for MANY reasons--like less escaping."}

ที่ให้ฉันสร้างทางออกทั่วไปที่สามารถทำงานได้อย่างง่ายดายในโปรแกรมใด ๆ ที่ไม่ได้ใช้ลำดับหนี เวอร์ชันตัวละคร 79 นั้นง่ายพอที่จะใช้ทางลัด แต่การมีแหล่งโปรแกรมโดยพลการสำหรับโปรแกรม p2 และ p3 อย่างถูกต้องคุณต้องมีเทมเพลตเต็มรูปแบบ ถ้าเราใช้มันก็จะเป็น 87 ตัวอักษร:

DD  11  DD :do dd {dd  {p{Which languages must you learn?}qt}} ddoo{{pp{{[RReebdo]l}}}}

รูปแบบสำหรับการใช้รูปแบบทั่วไปนี้คือถ้าคุณมีข้อความแหล่งที่มาสามตัวของอักขระเรียงตามลำดับความยาวตัวแปร (ลองใช้ตัวอย่างเช่น AAA , BBBBB, CCCCCCC) คุณสามารถเข้ารหัสพวกเขาเป็นสิ่งที่ตามสายของ:

DD  11  DD :do dd {dd  {AAAqt}} ddoo{{BCBCBCBCBC C C}}

(หมายเหตุ: แม้ว่ารูปแบบนี้จะใช้งานไม่ได้หากไม่ได้ปรับแต่งโปรแกรมที่ใช้อักขระเลี่ยง แต่นี่ไม่ใช่ข้อบกพร่องที่ร้ายแรงการได้รับวงเล็บปีกกาซ้ายที่ไม่ตรงกันในสตริงที่คั่นด้วยวงเล็บปีกกาต้องการบางสิ่งเช่น{Foo ^{ Bar}... แต่คุณสามารถเขียนใหม่ได้ง่าย สัญกรณ์สตริงทางเลือก"Foo { Bar"และกรณีรวมสามารถจัดการได้ด้วยการติดกาวส่วนผสมของสตริงที่ไม่ใช้ค่า Escape)

ดังนั้น ... แล้วตัวอย่างล่ะ เมื่อแบบฟอร์มทั่วไปพร้อมใช้งานโปรแกรมตัวอักษร 573 นี้ประกอบขึ้นในเวลาเพียงไม่กี่นาทีจาก 3 โซลูชั่นกอล์ฟรหัสก่อนหน้า:

DD 11 DD: ทำ dd {dd {rJ N 0% rN Wa1m2j S {\ x /} D00 Hc & [u [Ze? Wa Qs ~ rpKw [isEL00c [skQd2k] [eQ? kQ [tlQ]] pcSeg - b00 [ eZ 1 5] 3] prRJ [si ~ dSPscSqFHs] eZ 1 [s + dCa + wM2cNO]]] Va | [mpAp2j] prSI ~ w { } Ls2w Wl h01tiVsb01n -1 chRVs { } [sn [{N sbeo [tIt0l1eV} 0e5gXN1 01L {5s0} C {1} 0 {0 Do5f0 0bMe1e0r0} 0]]] tMw9C9 Numz Jl [paN + [KperlCJBn [ba sWS {b}] {K, j} b P { } lf EZ - - n [N m {G อื่น ๆ อีกมาก}} {{akeonedownandpassitar ound} c B w P lf]]}}

  • หากคุณไม่ได้ปรับเปลี่ยนโปรแกรมมันเป็นนาฬิกาทรายโซลูชั่น

  • หากคุณใช้ตัวละครที่แปลก ๆ และวิ่งไปมันก็จะพิมพ์บทกวีเบียร์ 99 ขวด

  • เฉพาะอักขระคู่เท่านั้นที่จะทำการแปลงตัวเลขโรมันเล็กน้อยสำหรับคุณ

หากใครต้องการลองเขียนโปรแกรมในภาษาที่พวกเขาเลือกและคิดว่าพวกเขาสามารถเอาชนะ 573 ได้โปรดแจ้งให้เราทราบ ฉันจะทำให้คุณมีชื่อเสียงอย่างมากถ้าคุณทำ - สมมติว่าภาษาที่คุณเลือกไม่ใช่ Rebmu เพราะฉันรู้ว่าโปรแกรมเหล่านั้นไม่ได้น้อยที่สุด :-)

ระยะห่างที่ "สิ้นเปลือง" ที่คุณได้รับในตอนท้ายคือสิ่งที่เกิดขึ้นเมื่อ p2 และ p3 มีความยาวไม่สมดุล แต่ทั้ง 3 โปรแกรมมีขนาดแตกต่างกันในกรณีนี้ดังนั้นจึงไม่มีการจับคู่ที่ดีพอที่จะเลือกสำหรับ p2 / p3 (ฉันเลือกสิ่งเหล่านี้เพราะไม่มีข้อมูลภายนอกเป็นอินพุตเช่นเขาวงกตหรืออะไรก็ตามไม่ใช่ว่าพวกเขามีความยาวเท่ากันในขณะที่ฉันสามารถเขียนโปรแกรมใหม่ที่เหมาะสมที่สุดได้ฉันใช้เวลามากพอและประเด็นก็คือ คุณทำไม่ได้ต้องเขียนโปรแกรมใหม่ ... )

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

(หมายเหตุ: ฉันเริ่มต้นด้วยวิธี "สร้างสรรค์" มากกว่าที่ไม่คล่องตัว แต่ดูน่าสนใจกว่าฉันย้ายมันไปยังรายการในบล็อกของฉันตามที่อธิบายถึงวิธีการนี้ยาวเกินไป)

กุญแจสำคัญในที่นี้คือเล่ห์เหลี่ยม "รหัส eval เป็นสายอักขระ" เช่นเดียวกับรายการอื่น ๆ เพียงแค่มีทรัมการ์ดของตัวคั่นสตริงแบบอสมมาตร ฉันจะเริ่มต้นด้วยการอธิบายการทำงานของตัวละคร 80 ตัว

นี่คือโปรแกรม "ทั้ง" ปรับช่องว่างสำหรับการอ่านของกรณีนี้:

DD 11                    ; assign 11 to dd (about to overwrite again)
DD :do                   ; make dd a synonym for DO (a.k.a. "eval")

; eval a string as source code that ends with QUIT (QT)
dd {dd  {p{Which languages must you learn?}qt}}

; we'll never get here, but whatever's here must be legally parseable
pp{{[RReebdo]l}}

ที่นี่เราไขการตั้งค่า DD เป็นคำพ้องสำหรับ DO (aka "eval") แต่เคล็ดลับคือเมื่อโปรแกรมลดลงครึ่งหนึ่งพวกเขาปิดท้ายการเรียกใช้โค้ดที่มีผลเพียงอย่างเดียวคือการกำหนด D ให้กับตัวอักษรที่ไม่เป็นอันตราย 1

นี่คือสิ่งที่รหัสตัวอักษรคี่ทำให้ช่องว่างปรับอีกครั้ง:

D 1                      ; assign 1 to d
D d                      ; assign d to itself, so it's still 1
d                        ; evaluates to integer, no side effect
{d pWihlnugsms o er?q}   ; string literal, no side effect
p {Rebol}                ; print "Rebol"

และนี่คือรหัสตัวอักษร:

D 1                      ; assign 1 to d
D:od                     ; URL-literal (foo:...), no side effect
d                        ; evaluates to integer, no side effect
{{hc agae utyulan}t}     ; string literal (well-formed!), no side effect
p {[Red]}                ; print "[Red]"

เป็นจริงในกรณีที่โปรแกรมที่ไม่ได้ลดลงครึ่งหนึ่งdd {dd {(arbitrary code)qt}}จะรันโค้ดอะไรก็ตามที่คุณต้องการ อย่างไรก็ตามมีการเรียกสองสายเพื่อประเมินแทนการโทรเพียงครั้งเดียว นั่นเป็นเพราะในขณะที่วงเล็บปีกกาซ้อนกันทำงานได้ดีในโค้ด interleaved พวกมันทำพฤติกรรมที่ไม่ดีของ DO เพราะ:

do {{print "Hello"}}

จะโหลดสตริงเป็นโปรแกรม {print "Hello"}แต่ลมโปรแกรมที่ขึ้นเป็นเพียงค่าคงที่สตริง ดังนั้นเคล็ดลับที่ฉันใช้ที่นี่คือการใช้ DD ของฉัน (ถือค่าฟังก์ชั่นเดียวกับ DO) และเรียกใช้มันสองครั้ง Halvers เคี้ยวที่ส่วนต่าง ๆ ของสาย แต่พวกเขาไม่ได้เคี้ยวทั้งคู่ถ้าคู่ / คู่นั้นถูกต้องสำหรับเนื้อหาและเนื่องจากสิ่งที่เหลืออยู่นอกสายหลังจากหยุดครึ่งเป็นเพียงค่าคงที่หนึ่งdไม่เป็นอันตราย

ด้วยรูปแบบนี้ไม่มีความท้าทายในการเขียนพฤติกรรมของโปรแกรมเมื่อมันไม่ลดครึ่ง - คุณสามารถใส่อะไรก็ได้ตราบใดที่ความยาวของอักขระของโค้ดนั้นเป็นเท่ากัน (แปลกถ้าคุณนับ QT ซึ่งเป็น QUIT) หากคุณต้องการที่จะได้รับแม้กระทั่งจากจำนวนคี่หนึ่งโยนในพื้นที่(เพื่อให้มีจริงเป็น 1 ในสูตรของฉันข้างต้นใน p1 สำหรับความยาวโปรแกรมคี่ของ p1) เคล็ดลับดูเหมือนว่าจะเขียนโค้ด interleaved หลังจากนั้นซึ่งจะต้องผ่านการแยกวิเคราะห์ถ้ามันไม่ได้ลดลงครึ่งหนึ่ง (มันจะไม่ทำงานเพราะ QT แต่ต้องโหลดได้ก่อนที่จะถูกเรียกใช้)

กรณีนี้เป็นเรื่องเล็กน้อย ppโหลดได้ดีเป็นสัญลักษณ์แม้ว่าจะไม่ได้กำหนดและจะแบ่งออกเป็นpสำหรับการพิมพ์ในแต่ละโปรแกรมครึ่ง แต่เราสามารถทำเคล็ดลับอื่นได้โดยใช้สตริงตัวอักษรอีกครั้ง โปรแกรมที่ลดลงครึ่งหนึ่งยังคงมีการกำหนดค่า DO ตามปกติดังนั้นเราจึงอาจกล่าวได้ว่า:

ddoo{{pp{{[RReebdo]l}}}}

โดยมีส่วนเดียวที่ parser หยิบขึ้นมาในกรณีทั้งหมดเป็นคำที่เป็นสัญลักษณ์ ddooเป็นและตัวอักษรสตริงเราสามารถแทรกโปรแกรมสองโปรแกรมใด ๆ ที่เราต้องการภายในสตริงตัวอักษรนั้นและไม่โกรธ parser รุ่นลดลงครึ่งหนึ่งจะพูดว่า:

do{p{Rebol}}

..และ...

do{p{[Red]}}

อย่างที่ฉันพูดส่วนนี้ดูคุ้นเคยกับโซลูชันอื่น ๆ ที่ปฏิบัติต่อโปรแกรมเป็นสตริงและประเมินพวกเขา แต่ในกรณีของการแข่งขันเมื่อโปรแกรมที่คุณบรรจุมีสตริงที่ซ้อนอยู่ นี่คือสิ่งเดียวที่จะทำให้คุณมีปัญหาคือการใช้การหลบหนีผ่าน carets (^ ) ... ซึ่งสามารถได้ง่าย


(หมายเหตุ 'โกง' เล็กน้อย: ฉันเพิ่ม QT สำหรับ "QUIT" เพื่อตอบสนองต่อปัญหานี้จริง ๆ แล้วฉันได้ลบตัวย่อสำหรับการเลิกก่อนหน้านี้อย่างเด็ดเดี่ยวเนื่องจาก ... ฉันคิดว่ามันดีสำหรับการใช้คอนโซลเท่านั้น ช่องว่างสองตัวอักษรถ้ามันไม่ได้อยู่ใน REPL ฉันกำลังเพิ่มเพราะฉันเห็นว่าฉันคิดผิดไม่ได้เพิ่มมันสำหรับกรณีนี้โดยเฉพาะอย่างไรก็ตามก่อนที่จะมีการเปลี่ยนแปลงมันจะมีความยาว 2 ตัวอักษรอีกด้วย เมื่อฉันโพสต์โซลูชันเป็นครั้งแรกมีข้อผิดพลาดใน Rebmu ที่ป้องกันไม่ให้ทำงานได้แม้ว่ามันควรจะมี ... ตอนนี้มันใช้งานได้)


คุณสร้างภาษาการเขียนโปรแกรมของคุณเอง?
เสียง

2
@ tjt263 ก็คิดที่ดีขึ้นของรหัสกอล์ฟ "เข้ารหัส" ของภาษาที่มีอยู่REBOL ผู้คนได้ทำสิ่งที่คล้ายกันเช่นกับPythซึ่งโดยทั่วไปย่อ Python แต่ Rebmu มีข้อแตกต่างที่น่าสนใจพอสมควรซึ่งมันสามารถโหลดได้โดยตัวแยกวิเคราะห์ Rebol และ "เข้ากันได้" คุณสามารถบุกเข้าไปใน REBOL ในเวลาใด ๆ ในช่วงกลางของมันให้ดูเช่นนาฬิกาทราย ยินดีที่จะพูดคุยในRebol และ Red chatหากคุณต้องการ
ดร. Rebmu

15

Perl 186 139 135

"";print'What are the best things in life?';""&&pprriinntt("'hceraurs ht hyeo ulra meennetmaiteiso'n s   o f   t h e i r   w o m e n ")

อะไรคือสิ่งที่ดีที่สุดในชีวิต?

"pitWa r h ettig nlf?;"&print('crush your enemies'                 )

บดขยี้ศัตรูของคุณ

";rn'htaetebs hnsi ie'"&print"hear the lamentations of their women"

ได้ยินเสียงคร่ำครวญของผู้หญิง

ใช้คำตอบที่มีความยาวน้อยกว่า:

Perl 79 72

"";print'What are my preferred weapons?';""&&pprriinntt("'smwaocredss'")

What are my preferred weapons?(30Byte, H (X) = 3.76) swords(H (X) = 2,25) และmaces(H (X) = 2,32)


9

Python - 139 103

"";print'What are the ingredients for success?';""; ";" ;id=='"RUaniincboorwnss'";;pprriinntt  id++"'"'

What are the ingredients for success?-> UnicornsและRainbows

ทดสอบ:

c="\"\";print\'What are the ingredients for success?\';\"\"; \";\" ;id==\'\"RUaniincboorwnss\'\";;pprriinntt  id++\"\'\"\'"
exec c        # What are the ingredients for success?
exec c[::2]   # Unicorns
exec c[1::2]  # Rainbows
print 
print c[::2]  # ";rn'htaeteigeinsfrsces'";"";d="Unicorns";print d+''
print c[1::2] # "pitWa r h nrdet o ucs?;" ; i='Rainbows';print i+""

เวอร์ชั่นเก่า:

# What are the ingredients for success?
"";print(('What are the ingredients for success?'));""; ";" ;"pHrEiRnEt (C'OUMnEiSc oZrAnLsG'O)"; ";" ; "p,r iTnOtN(Y' RTaHiEn bPoOwNsY'.)"
# Unicorns
";rn('htaeteigeinsfrsces')";"";print('Unicorns');"";", TONY THE PONY."
# Rainbows
"pit(Wa r h nrdet o ucs?);" ; "HERE COMES ZALGO" ;  print('Rainbows')

6

Haskell, 117

การทำงานกับกระบวนทัศน์การทำงานของ Haskell หมายความว่าทุกอย่างจะต้องถูกกำหนดให้กับตัวแปรหรือแสดงความคิดเห็นด้วยบรรทัด--หรือบล็อก{- -}ความคิดเห็น มีฟังก์ชั่นไร้สาระทำงานโดยไม่ได้รับมอบหมาย ดังนั้นเพื่อให้ตัวเองมีสติฉันได้เก็บคำถามและคำตอบให้สั้นที่สุดเท่าที่กฎอนุญาต

คำถาม: ฉันมีอะไรไม่พอ

main=putStrLn{---}"What can I not have enough of?"{- }
=u"Scrank=e"sS"h
omeasi"n
=mpauitnS=tpru taSntprt tmLi

-----}

"รองเท้า" และ "เค้ก":

mi=uSrn--"htcnInthv nuho?{ 
uSrn="Shoes"
main=putStr mi
--}
anpttL{-}Wa a  o aeeog f"-}="cakes"
main=putStr anpttL
---

NB การปรากฏตัวของcrankภายใต้ "สิ่งที่ฉันไม่สามารถมีเพียงพอหรือไม่" ไม่ควรถูกมองว่ามีความหมาย


1
ไม่อนุญาตให้แสดงความคิดเห็น
ภูมิใจ haskeller

และวิธีที่สองคือไวยากรณ์ haskell ที่ถูกต้อง?
ภูมิใจ haskeller

รหัสเดิมมีบล็อกความคิดเห็น unclosed เพราะคู่ปิดอยู่ในความคิดเห็นบรรทัด รหัส "เค้ก" ไม่ได้ดูเหมือนรหัส - ไม่ใช่ฟังก์ชั่น anpttL? นิยาม = ลงชื่อเข้าใช้อยู่ที่คำจำกัดความ ไม่ได้เรียกว่า anpttLWa จริง ๆ หรือ
ภูมิใจ haskeller

@proudhaskeller พลาดกฎเกี่ยวกับความคิดเห็น ขอโทษสำหรับเรื่องนั้น. โปรแกรมแรกไม่มีบล็อกความคิดเห็น unclosed มันแยกวิเคราะห์ได้ดี ความคิดเห็นในบรรทัดไม่มีความหมายภายในความคิดเห็นในบล็อก รายการที่สองนั้นถูกต้องเนื่องจากความคิดเห็นของบรรทัดนั้นถูกต้อง anpttL เป็นสตริง นำความคิดเห็นบล็อกออกแล้วคุณจะเห็นว่าเท่ากับ "เค้ก" Wa อยู่ในความคิดเห็นบล็อกดังนั้นไม่ไม่ใช่ anpttLWa จริง ๆ
comperendinous

2
@proudhaskeller หัวของฉันอนุญาตให้ GHCi ทำงานแทนได้
comperendinous

4

เสียงกระเพื่อม (76 ตัวอักษร)

คำถาม 31 ตัวอักษร 6 ตัวในแต่ละคำตอบ⟹ความยาว - payload = 33

'(: (pprriinncc''fmuacghesnitaa))':(princ "What is your favorite pink hue?")

ฉันต้องการใช้“ สีโปรดของคุณคืออะไร” แต่ถึงแม้จะมีการสะกดคำภาษาอังกฤษ แต่ก็มีความยาวของคำถามเพียง 30 ตัวอักษรเท่านั้นและฉันต้องการคำถามที่มีความยาวคี่เพื่อปรับสมดุลของคำพูดสองเท่า

พวกเขาบอกว่า Common LISP เป็น verbose แต่คุณคงไม่คิดว่ามันจะเป็นไปได้ด้วยสายการบินเดียว มันไม่ได้ทำให้งงมากคุณเพียงแค่ต้องแทรกช่องว่างเล็กน้อยเพื่อดูว่ามีอะไรที่ยกมาและสิ่งที่จะถูกดำเนินการ

การใช้งานเสียงกระเพื่อมหลายอย่างจะส่งเสียงสีออกมาเพราะมันเป็นสัญลักษณ์ของการบิดตัวพิมพ์ใหญ่ หากสิ่งนั้นรบกวนจิตใจคุณ''fmuacghesnitaa""fmuacghesnitaa""ไป


เนื่องจากคำถามนี้มีองค์ประกอบการลงคะแนนฉัน bountied เพื่อดึงดูดความสนใจลองและได้รับคะแนนเสียงเพิ่มเติม แต่เงินรางวัลก็หมดลงแล้วและเนื่องจากฉันไม่สามารถให้คะแนนตัวเองได้ :-) ฉันจะมอบมันให้กับผลงานของคุณตามภาษาบรรพบุรุษของ Rebmu และสนับสนุนให้คุณลองดูถ้าคุณยังไม่เคยทำมาก่อน! codegolf.stackexchange.com/a/36114/57
Dr. Rebmu

3

STAT 295

คำถาม: ขนมที่ดีที่สุดที่จะอบตอนนี้คืออะไร? คำตอบ: บราวนี่และคุกกี้

คำสั่ง: คำสั่งใน STATA ถูกคั่นด้วยบรรทัดใหม่
ในขณะที่ "//" เป็นความคิดเห็นใน STATA "///" บอกคอมไพเลอร์ให้ดำเนินการต่อไปยังบรรทัดถัดไปและรวมเนื้อหาไว้ในคำสั่งปัจจุบัน

คำสั่งใน STATA สามารถย่อไปยังจุดที่พวกเขาถือว่าไม่ซ้ำกันมากพอที่จะ differentiable (ดังนั้น "สร้าง" กลายเป็น "g", "ทั่วโลก" กลายเป็น "gl" หรือ "glo", "จับ" กลายเป็น "หมวก", " แสดง "กลายเป็น" di "ฯลฯ ) คำสั่ง display แสดงข้อความไปที่หน้าจอ คำสั่ง capture บันทึกข้อผิดพลาดทั้งหมด (รวมถึงข้อผิดพลาดทางไวยากรณ์) ซึ่งเป็นสาเหตุที่โปรแกรมนี้คอมไพล์อย่างถูกต้อง

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

ขอบคุณที่อ่านคำอธิบายที่ยาวนานของฉัน ตอนนี้สำหรับรหัส:

"ขนมที่ดีที่สุดที่จะอบตอนนี้คืออะไร?"

g   a = "g   q   /b/a/" 
g l= "b = ""b r o w n i e s "
g   c = "g   /b/a/" 
g lpo= "d = ""c o o k i e s "
g   e = "c a p  "  /////
 +  "d i ""$ b "
g   f = "c a p  "  /////
 +  "d i ""$ d "
g   g = "c a p  "  /////
 + "c a p   / / /  "+ "/ / /"
di "What are the best desserts to bake right now?"

"บราวนี่"

g a="    ba"
gl b="brownies"
    g /// 
 p="  "       
g e="   " //
 di "$b"
    cap ///
+" "  
g g="   " //
  cap ///   +"  "
i"htaetebs esrst aergtnw"

"คุ้กกี้"

    g q /// 
 ="  "        
g c="  ba"
glo d="cookies"
    cap ///
+" "  
g f="   " //
 di "$d"
    cap  ///
+ "       " ///
d Wa r h etdset obk ih o?

2

Ksh (82 ตัวอักษร)

คำถาม 35 ตัวอักษร 5 ตัวในแต่ละคำตอบ⟹ความยาว - payload = 37

ec=\'o'(;)eehc(h)oe cChroi m$e1;; '\'
echo  What\'s the  country\'s worst problem?

ฉันใช้ไวยากรณ์คำจำกัดความฟังก์ชันเกิน POSIX ขีดกลางและทุบตีไม่สามารถทำได้ แต่ ksh (โดเมนสาธารณะหรือ ATT) สามารถทำได้

ไม่มีอะไรโดดเด่นเกิดขึ้นเพียงเล็กน้อยก้อง ไม่ต้องเสียไม่ต้องการ


2

PowerShell 88

"" > $x;{What is my favorite equipment?};"" >> ${x}

${XsXwXoXrXdX};;;${XsXhXiXeXlXdX}

อุปกรณ์โปรดของฉันคืออะไร? (30 ตัวอักษร H (X) = 4.0314)

"  x{hti yfvrt qimn?;"> {}
{sword};$XXXXXXX

ดาบ (5 ตัวอักษร H (X) = 2.32193)

">$;Wa sm aoieeupet}" >$x
$XXXXXX;;{shield}

shield (5 chars, H (X) = 2.58496)

ในโปรแกรมเต็มรูปแบบมันเปลี่ยนเส้นทางสตริงว่างไปยังตัวแปรที่ไม่มีอยู่${x}(คำพูดสำหรับสตริงว่างเหล่านั้นจะใช้ในรูปแบบสตริงไร้สาระที่ได้รับการเปลี่ยนเส้นทางทั้งบล็อกว่างเปล่า{}หรือตัวแปรที่ไม่มีอยู่$xในรุ่นคู่ / คี่) จากนั้นพิมพ์คำถามและ ประกาศ 2 ตัวแปรที่ไม่ได้ใช้งาน (ซึ่งถูกพิมพ์และวางไว้ถัดจากตัวแปรที่ไม่ได้ใช้งานอื่น$XXXXXXหรือ$XXXXXXXในกรณีอื่น)


1

GolfScript, 51 ไบต์

"Which are the sides of a coin? ".;""thaeialdss""

เอาท์พุต

Which are the sides of a coin? 

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

.;ทำซ้ำสตริงและลบสำเนา ""ดันสตริงว่าง thaeialdssไม่ได้กำหนดดังนั้นจึงไม่ทำอะไรเลย

ตัวอักษรแปลก

"hc r h ie faci?";"heads"

เอาท์พุต

heads

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

; ลบสตริงแรกออกจากสแต็ก

แม้แต่ตัวอักษร

Wihaetesdso  on ."tails"

เอาท์พุต

tails

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

Wihaetesdsoและonเป็น noops .ทำซ้ำสตริงว่างบนสแต็ก

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