ใส่บรรทัดในรหัสที่คุณ nut และเขย่ามันทั้งหมด


10

การใช้ภาษาการเขียนโปรแกรมเดียวเขียน 5 โปรแกรมบรรทัดเดียวซึ่งแต่ละโปรแกรมจะแสดงบรรทัดที่แตกต่างจากข้อแรกของเพลง " Coconut " ของ Harry Nilsson ในปี 1972 เมื่อทำงานแยกกัน:

พี่ชายซื้อลูกมะพร้าวเขาซื้อให้กับ
พี่สาวน้องสาวของเขามีอีกอันหนึ่งเธอจ่ายให้มะนาว
เธอใส่มะนาวลงในต้นมะพร้าวเธอดื่มทั้งสองขึ้น
เธอใส่มะนาวลงในมะพร้าวเธอดื่มทั้งสอง
เธอ ใส่มะนาวในต้นมะพร้าวเธอดื่มทั้งคู่

( เนื้อเพลงเต็ม )

3 บรรทัดสุดท้ายมีเนื้อร้องเดียวกันดังนั้น 3 รายการสุดท้ายของคุณอาจเป็นเช่นนั้น

มี 5 แฟคทอเรียลหรือ 120 วิธีที่สามารถจัดเรียงโปรแกรมเดี่ยว 5 รายการต่อหนึ่งบรรทัดในโปรแกรม 5 บรรทัดเดียว คุณต้องปรับโปรแกรมบรรทัดเดียวของคุณให้เหมาะสมสำหรับชุดค่าผสม 120 ชุดเหล่านี้ให้มากที่สุดเท่าที่จะเป็นไปได้โปรแกรม 5 บรรทัดจะแสดงผลทั้งข้อตามลำดับที่ถูกต้องตามที่ปรากฏข้างต้น

ตัวอย่าง

คำตอบที่ง่ายที่สุดจะมี 5 คำสั่งการพิมพ์บรรทัดเดียว 3 คำสั่งสุดท้ายเหมือนกัน:

print('Brother bought a coconut, he bought it for a dime')
print('His sister had another one, she paid it for a lime')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')

เอาต์พุตไปยังโปรแกรม 5 บรรทัดจะเป็นกลอนในลำดับที่ถูกต้องตราบเท่าที่สอง liners แรกอยู่ในตำแหน่งที่ถูกต้อง มีเพียง 6 ใน 120 ข้อตกลงที่เป็นไปได้

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

การส่งกรณีที่มีการทำงานมากที่สุดจากทั้งหมด 120 ชนะ Tie breaker ไปที่ชุดของโปรแกรมที่มีจำนวนไบต์สะสมต่ำสุด(ขึ้นบรรทัดใหม่ที่ไม่นับ) ตัวอย่างมี 309 ไบต์

รายละเอียด

  • โปรแกรมของคุณอาจไม่อ่านซอร์สโค้ดของตัวเอง และไม่ควรอ่านไฟล์ภายนอกอื่น ๆ หรือต้องการการเชื่อมต่อเครือข่าย

  • ส่งออกไปยัง stdout หรือทางเลือกที่ใกล้เคียงที่สุด คุณสามารถส่งออกไปยังไฟล์ที่มีชื่อที่คุณเลือก

  • "โปรแกรมแบบบรรทัดเดียว" เป็นสตริงที่มีอักขระใด ๆ ยกเว้นตัวยกเลิกบรรทัด (คุณอาจต้องกังวลเกี่ยวกับการขึ้นบรรทัดใหม่)

  • เมื่อเขียน single-liners ลงใน 5-liners คุณควรเพิ่ม newline 4 เส้นตรงหนึ่งคู่ระหว่างแต่ละแถวของ single-liners คุณสามารถเลือกเพิ่มบรรทัดใหม่ที่ต่อท้าย


"เขียน 5 โปรแกรมที่แต่ละบรรทัดเอาต์พุตต่างกัน ... " เป็นไปไม่ได้เหรอ?
feersum

@feersum บรรทัดนั้นแตกต่างกัน มีสามคนที่มีข้อความเหมือนกัน
งานอดิเรกของ Calvin

จะเกิดอะไรขึ้นถ้าฉันมีไฟล์ Java ที่มี 5 คลาสแต่ละไฟล์มีmainเมธอดอยู่? ถ้าอย่างนั้นควรจะรันเมื่อใดที่รันโปรแกรม?
feersum

@feersum คอมไพเลอร์ของคุณทำอะไรดี? ผมไม่แน่ใจว่าสิ่งที่ Java mainไม่เมื่อหลายชั้นเรียนในไฟล์เดียวกันทั้งสองมี
งานอดิเรกของ Calvin

2
วิธีที่ฉันจำอันนี้คือโฆษณา Coca-Cola ที่พวกเขา "ใส่มะนาวในโค้ก" ...
Joe Z.

คำตอบ:


9

CJam, 120 พีชคณิตที่ถูกต้อง, 334 299 290 ไบต์

"She put the lime in the coconut, she drank them both up"N+
"Brother bought a coconut, he bought it for a dime"N+]$~
"She put the lime in the coconut, she drank them both up"N+
"His sister had another one, she paid it for a lime"N+]$~
"She put the lime in the coconut, she drank them both up"N+

ตรรกะง่ายๆสวย:

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

UPDATE : ปรากฎว่าคุณไม่จำเป็นต้องวนรอบการเรียงลำดับ - ไม่ได้ห่อหลังจากที่ทั้งสามคล้ายกันและปรากฏที่ท้ายบรรทัดของเพลง ฉันสามารถอธิบายได้ว่าทำไมถ้ามันไม่ชัดเจน :)


8

โหมโรง 120 การเรียงสับเปลี่ยน2045 2035 ไบต์

9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4-                                                                          (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-594+9409-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-99+96+609-9-9-9-9-9-9-1-992++909-9-9-9-9-9-9-1-992++87993++96+209-9-9-9-9-9-9-1-5809-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-992++87993++96+209-9-9-9-9-9-9-1-99+58992++96+99+09-9-9-3-                                             (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4-                                                 (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-594+993+09-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-99+96+609-9-9-9-9-9-9-1-992++909-9-9-9-9-9-9-1-49197+09-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-595+96+09-9-9-9-9-9-9-1-99+58992++96+95+109-9-9-9-9-9-9-1-41809-9-9-9-9-9-9-1-99+5992++991++9991++09-9-9-9-9-9-9-1-991++909-9-6-                                                           (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4-                                                                                                   (9+9+9+9+9+9+9+9+9+9+6+!)

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

แนวคิดพื้นฐานมีดังต่อไปนี้

"push line 4"               print
"push line 1"print
"push line 3"          print
"push line 2"     print
"push line 5"                    print

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

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

โปรดทราบว่าสตริงนั้นจะถูกส่งกลับเนื่องจากมีการพิมพ์จากอักขระตัวสุดท้ายถึงตัวแรก

นี้จะถือว่าล่ามหลามด้วยNUMERIC_OUTPUT = False(ซึ่งเป็นวิธีการที่กำหนดสเป็ค I / O)

ฉันใช้รหัส CJam ต่อไปนี้เพื่อสร้างโครงสร้างสตริง:

"Brother bought a coconut, he bought it for a dime
"W%{i96-_0<{zLa*9/:,'-*'-+0\+}{La*9/:,_,'+*W<}?}%

สุดท้ายนี้เพื่อความสนุกทำไมฉันคิดว่านี่จะสั้นมากถ้า Prelude มีแนวคิดเรื่องสตริง:

"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
"emid a rof ti thguob eh ,tunococ a thguob rehtorB"N+!
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
"emil a rof ti diap ehs ,eno rehtona dah retsis siH"N+!
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!

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


7

Ruby, การเปลี่ยนลำดับที่ถูกต้อง 120 ครั้ง, 430 ไบต์

$*[1]='His sister had another one, she paid it for a lime';a||=at_exit{puts($*-[p])}
$*[0]='Brother bought a coconut, he bought it for a dime';a||=at_exit{puts($*)}
$*[2]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}
$*[3]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}
$*[4]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}

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


คำถามที่ว่า "5 โปรแกรมบรรทัดเดียว" สิ่งนี้ไม่ได้หมายความว่าแต่ละบรรทัดควรอยู่ในโปรแกรมแยกต่างหากหรือไม่? ไม่ใช่ทั้งหมดในที่เดียวใช่ไหม
bacchusbeale

1
เพียงคำถามของการจัดรูปแบบ แต่ละบรรทัดทำงานเป็นโปรแกรมของตัวเอง
ประวัติศาสตร์

6

> <> , 120 พีชคณิต, 703 ไบต์

<    /a"emid a rof ti thguob eh ,tunococ a thguob rehtorB"0a.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
<   / a"emil a rof ti diap ehs ,eno rehtona dah retsis siH"09.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
<  /  a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"08.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
< /   a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"07.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
</    a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"06.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"

ข้อ จำกัด หนึ่งซับค่อนข้างยากสำหรับภาษา 2D ดังนั้นฉันจึงต้องหาวิธีที่จะใช้ประโยชน์จากการ.สอนทางไกลสูงสุด

เริ่มต้น<ทำให้การไหลของโปรแกรมด้านซ้ายล้อมรอบและดำเนินการ

"o;?=0l>\\\\\\/////"15p26p37p48p59p75p76p77p78p79p7ap8ap9apaapbapcapdap

นี่คือชุดของpคำสั่ง (ใส่) ที่วางแผนภูมิไว้จนกว่าบอร์ดจะมีลักษณะดังนี้:

<    /<lyrics1>0a.#.!50<blah>
<   / <lyrics2>09.#.!50<blah>
<  /  <lyrics3>08.#.!50<blah>
< /   <lyrics4>07.#.!50<blah>
</    <lyrics5>06.#.!50<blah>
 /     \
  /    \
   /   \
    /  \
     / \
       >l0=?;o

#.!50แล้วพลิกไหลของโปรแกรมกลับไปทางขวาอีกครั้งก่อนที่จะกระโดดไปยังเส้น 5. สิ่งต่อไปนี้คือ:

  • การติดตาม/มิเรอร์ในบรรทัดที่ 5 จะค้นหาเนื้อเพลง 5 ซึ่งถูกผลักลงบนสแต็ก จากนั้นเราเคลื่อนย้ายไปยังบรรทัดที่ 6
  • การติดตาม/มิเรอร์ที่บรรทัด 6 จะพบเนื้อเพลง 4 ซึ่งถูกผลักลงบนสแต็ก จากนั้นเราเคลื่อนย้ายไปยังบรรทัดที่ 7
  • ตาม/กระจกในบรรทัด 7 พบเนื้อเพลง 3 ...

สิ่งนี้จะเกิดขึ้นจนกว่าเราจะกดเนื้อเพลง 1 ตรงจุดที่เราเคลื่อนย้ายไปยังบรรทัดที่ 10 นี่คือลูปเพื่อพิมพ์สแต็คทั้งหมดจนกว่าจะว่างเปล่า

หากมีเพียงหนึ่งบรรทัดของโปรแกรมอยู่มิ\เรอร์จะทำงานเช่นเดียวกับเทเลพอร์ตในแต่ละบทกวี

หากโปรแกรมนั้นมีสัญญาณรบกวนคำอธิบายข้างต้นจะยังคงมีผลบังคับใช้ดังนั้นโปรแกรมนี้ทำงานสำหรับการเปลี่ยนลำดับทั้งหมด!

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