Đặt dòng trong mã bạn nut và lắc tất cả lên


10

Sử dụng một ngôn ngữ lập trình, viết 5 chương trình một dòng, mỗi chương trình tạo ra một dòng khác nhau của câu thơ đầu tiên cho bài hát " Dừa " năm 1972 của Harry Nilsson khi chạy riêng lẻ:

Anh mua một quả dừa, anh đã mua nó cho một xu
Em gái anh có người khác, mẹ mua nó cho một vôi
Cô đưa vôi trong dừa, cô đã uống cả hai lên
Cô đưa vôi trong dừa, cô đã uống cả hai lên
Cô bỏ vôi vào dừa, cô uống cả hai

( lời bài hát đầy đủ )

3 dòng cuối cùng có cùng lời bài hát, vì vậy 3 chương trình cuối cùng của bạn cũng có thể như vậy.

Có 5 giai thừa hoặc 120 cách mà 5 chương trình một dòng này có thể được sắp xếp một trên mỗi dòng trong một chương trình 5 dòng đơn. Bạn phải tối ưu hóa các chương trình một dòng của mình sao cho càng nhiều trong số 120 kết hợp này càng tốt, chương trình 5 dòng sẽ xuất ra toàn bộ câu theo thứ tự đúng , chính xác như nó xuất hiện ở trên.

Thí dụ

Câu trả lời đơn giản nhất sẽ có 5 câu lệnh in đơn, 3 câu cuối giống hệt nhau:

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

Đầu ra cho các chương trình 5 dòng sẽ là câu thơ theo đúng thứ tự của nó miễn là hai lớp đơn đầu tiên ở đúng vị trí của chúng. Chỉ có 6 trong số 120 sự sắp xếp có thể thực hiện được điều này.

Chấm điểm

Việc nộp với các trường hợp làm việc nhất trong số tất cả 120 chiến thắng. Tie breaker đi đến tập hợp các chương trình có số byte tích lũy thấp nhất (dòng mới không được tính). Ví dụ này có 309 byte.

Chi tiết

  • Chương trình của bạn có thể không đọc mã nguồn của riêng họ. Họ cũng không nên đọc các tệp bên ngoài khác hoặc yêu cầu kết nối mạng.

  • Đầu ra cho thiết bị xuất chuẩn hoặc thay thế gần nhất. Bạn cũng có thể xuất ra một tệp có tên bạn chọn.

  • "Các chương trình một dòng" là các chuỗi chứa bất kỳ ký tự nào ngoại trừ các đầu cuối dòng (có lẽ bạn chỉ cần lo lắng về các dòng mới).

  • Khi kết hợp các lớp lót đơn vào 5 lớp, bạn nên thêm chính xác 4 dòng mới, một dòng giữa mỗi cặp lớp lót liền kề. Bạn có thể tùy chọn thêm một dòng mới.


"Viết 5 chương trình mà mỗi đầu ra một dòng khác nhau ..." không phải là không thể?
frageum

@feersum Các dòng khác nhau. Ba trong số chúng chỉ có cùng một văn bản.
Sở thích của Calvin

Điều gì xảy ra nếu tôi có một tệp Java chứa 5 lớp, mỗi lớp có một mainphương thức? Vậy thì nên chạy chương trình nào, khi chạy chương trình?
frageum

@feersum Trình biên dịch của bạn làm gì? Tôi không chắc Java làm gì khi nhiều lớp trong cùng một tệp đều có main.
Sở thích của Calvin

2
Cách tôi nhớ cái này là một quảng cáo của Coca-Cola nơi họ "đặt vôi vào cốc" ...
Joe Z.

Câu trả lời:


9

CJam, 120 hoán vị hợp lệ, 334 299 290 byte

"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+

Logic khá đơn giản:

  • Đặt từng dòng của bài hát vào mỗi trong số 5 chương trình
  • Gói mọi thứ trên ngăn xếp trong một mảng
  • Sắp xếp mảng
  • Giải nén mảng để chương trình tiếp theo có thể sử dụng cùng logic
  • Trong mỗi bước, chúng tôi có lời bài hát một phần trong một mảng. May mắn thay, sắp xếp các mảng cho thứ tự chính xác của lời bài hát.

CẬP NHẬT : Hóa ra bạn không cần chu trình quấn-sắp xếp sau 3 tương tự và xuất hiện ở dòng cuối của bài hát. Tôi có thể giải thích tại sao nếu nó không rõ ràng :)


8

Mở đầu , 120 hoán vị, 2045 2035 byte

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+!)

Điều này cuối cùng đã thuyết phục tôi rằng Prelude và CJam cần một đứa trẻ. Nếu nó không dành cho tập lệnh rất hạn chế của Prelude, bài nộp này thực sự sẽ rất cạnh tranh, nếu nó thậm chí sẽ không đánh bại được CJam.

Ý tưởng cơ bản là như sau

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

Trong Prelude, mỗi dòng là "tiếng nói" riêng với ngăn xếp riêng và các giọng nói này được thực hiện song song. Đó là, trong chương trình đầy đủ, mỗi dòng sẽ chỉ xây dựng chuỗi riêng lẻ và in nó ở cuối. Nhưng do sự bù đắp của các câu lệnh in, thứ tự của các dòng hoàn toàn không quan trọng đối với thứ tự đầu ra, vì việc thực hiện là từ trái sang phải, không phải từ trên xuống dưới.

Bây giờ, tại sao các dòng quá dài? Mở đầu chỉ lưu trữ số trên ngăn xếp của nó. Hơn nữa, nó chỉ có thể đẩy một số có một chữ số tại một thời điểm, do đó, các số lớn hơn phải được xây dựng từ phép cộng và phép trừ (không có phép nhân nào hoặc số học khác). Vì vậy, phần lớn nhất của mã chỉ đơn giản là tính toán và đẩy đúng mã ký tự. Để rút ngắn điều này một chút, tôi bù đắp cho chúng bằng cách 96. Cuối cùng, để in, tôi lặp cho đến khi ngăn xếp trống (nghĩa 0là gặp phải a), thêm 96 vào mỗi số và in nó.

Lưu ý rằng các chuỗi được đẩy ngược lại, vì chúng được in từ ký tự cuối cùng đến ký tự đầu tiên.

Điều này giả sử trình thông dịch Python với NUMERIC_OUTPUT = False(đó là cách spec xác định I / O).

Tôi đã sử dụng mã CJam sau đây để tạo cấu trúc chuỗi:

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

Cuối cùng, chỉ để cho vui, tại sao tôi nghĩ rằng điều này sẽ thực sự ngắn nếu Prelude có một khái niệm về chuỗi:

"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+!

Bây giờ các báo cáo in !đã được sắp xếp theo đúng thứ tự, vì vậy tôi thậm chí sẽ không cần phải bù chúng. Tôi nghĩ rằng tôi sẽ xuống để thực hiện điều này một thời gian.


7

Ruby, 120 hoán vị hợp lệ, 430 byte

$*[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])}

Hoạt động theo thứ tự, hoặc cá nhân. Mỗi dòng sửa đổi trạng thái toàn cục, sau đó đặt một hook được thực thi ở cuối chương trình trừ khi hook đã được đặt.


Câu hỏi cho biết "5 chương trình một dòng". Điều này không có nghĩa là mỗi dòng nên nằm trong một chương trình riêng biệt? Không phải tất cả trong một?
bacchusbeale

1
Chỉ là một câu hỏi về định dạng. Mỗi dòng hoạt động như một chương trình riêng của nó.
lịch sử

6

> <> , 120 hoán vị, 703 byte

<    /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"

Hạn chế một lớp là khá khó đối với ngôn ngữ 2D, vì vậy tôi phải tìm cách tận dụng tối đa .hướng dẫn dịch chuyển tức thời.

Ban đầu <làm cho chương trình chảy sang trái, bao quanh và thực hiện

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

Đây là một loạt các phướng dẫn (đặt) đặt ký tự cho đến khi bảng trông như thế này:

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

Các #.!50rồi flips dòng chương trình trở lại rightward một lần nữa, trước khi nhảy vào dòng 5. Điều gì sau đây là:

  • Theo /gương trên dòng 5 tìm thấy lời bài hát 5, được đẩy lên ngăn xếp. Sau đó chúng tôi dịch chuyển đến dòng 6.
  • Theo /gương trên dòng 6 tìm thấy lời bài hát 4, được đẩy lên ngăn xếp. Sau đó chúng tôi dịch chuyển đến dòng 7.
  • Theo /gương trên dòng 7 tìm thấy lời bài hát 3 ...

Điều này xảy ra cho đến khi chúng tôi đẩy lời bài hát 1, tại đó chúng tôi dịch chuyển đến dòng 10. Đây là một vòng lặp để in toàn bộ ngăn xếp cho đến khi nó trống.

Nếu chỉ có một dòng của chương trình, thì các \gương làm công việc tương tự như dịch chuyển tức thời trên mỗi dòng lyric.

Nếu chương trình bị xáo trộn, thì lời giải thích ở trên vẫn được áp dụng, vì vậy chương trình hoạt động cho tất cả các hoán vị!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.