In ấn Hey Hey Jude Cảnh từ The Beatles


27

Nhiệm vụ của bạn là viết một chương trình in bốn câu thơ được trích từ lời bài hát từ bài hát "Hey Jude" của The Beatles (© Sony / ATV Music Publishing LLC):

Hey Jude, don't make it bad\n
Take a sad song and make it better\n
Remember to let her into your heart\n
Then you can start to make it better\n
\n
Hey Jude, don't be afraid\n
You were made to go out and get her\n
The minute you let her under your skin\n
Then you begin to make it better\n
\n
Hey Jude, don't let me down\n
You have found her, now go and get her\n
Remember to let her into your heart\n
Then you can start to make it better\n
\n
Hey Jude, don't make it bad\n
Take a sad song and make it better\n
Remember to let her under your skin\n
Then you'll begin to make it\n
\n

NHƯNG

Đầu vào duy nhất bạn được phép sử dụng để xây dựng bốn câu thơ này là danh sách mã thông báo này:

"Hey Jude, don't"
" make it bad"
" be afraid"
" let me down"
"Take a sad song and make it better"
"You"
" were made to go out"
" and get her"
" have found her, now go"
"Remember to"
"The minute you"
" let her"
" into your heart"
" under your skin"
"Then"
" you"
" can start"
"'ll"
" begin"
" to make it"
" better"

Lưu ý rằng một số mã thông báo có khoảng trắng ở trước và dấu ngoặc kép kèm theo không phải là một phần của mã thông báo. Bạn có thể sử dụng bất kỳ định dạng nào cho danh sách và sắp xếp lại thứ tự các mã thông báo.

Đầu ra được tạo của bạn phải khớp chính xác với bốn câu thơ trên. Lưu ý rằng \nđược sử dụng cho dòng mới và một dòng mới bổ sung được thêm vào sau mỗi câu. Bạn có thể sử dụng tệp này (MD5 4551829c84a370fc5e6eb1d5c854cbec:) để kiểm tra đầu ra của bạn.

Bạn có thể sử dụng sơ đồ đường sắt sau để hiểu cấu trúc của các câu thơ (mỗi yếu tố đại diện cho một mã thông báo): nhập mô tả hình ảnh ở đây

Mã ngắn nhất trong byte thắng. Chúc bạn chơi golf vui vẻ.


47
Phần đi Nah nah nah nah nah nah, nah nah nah, sẽ dễ nén hơn. ^^
Arnauld

3
@Arnauld Liên quan : P
DJMcMayhem

10
@Arnauld bắt buộc XKCD xkcd.com/851_make_it_better
Nathaniel

3
Thật khó để hát tất cả các dấu gạch chéo ngược ở cuối mỗi dòng.
Tamás Sengel

Câu trả lời:


9

Thạch , 42 byte

;⁷“Ṙç€ṘḋḷŒø|Ṁ2kḤ⁽⁼SƁẒVṿẎj]ð⁵ṀƒƤ)÷Ƒ¦Ẋ½Iɠ⁻’ṃ

Hãy thử trực tuyến!

Phiên bản mã hóa.

Đầu vào:

["Hey Jude, don't", ' make it bad', 'Take a sad song and make it better', 'Remember to', ' let her', ' into your heart', 'Then', ' you', ' can start', ' to make it', ' better', ' be afraid', 'You', ' were made to go out', ' and get her', 'The minute you', ' under your skin', ' begin', ' let me down', ' have found her, now go', "'ll"]

17

JavaScript (ES6), 108 byte

a=>`01
4
9bc
efgjk

02
567
abd
efijk

03
587
9bc
efgjk

01
4
9bd
efhij

`.replace(/./g,n=>a[parseInt(n,36)])

Hãy thử trực tuyến!


Phiên bản thay thế, 114 byte

Một nén tốt hơn một chút, nhưng đáng buồn bị phá hỏng bởi mã giải nén lớn hơn.

a=>`835fc3cbbd3
84db3db4bbdb3
85cd1cc3cbbd3
835fc4bbcb3

`.replace(/./g,n=>a[n='0x'+n,i=n%8&&n%8-2+i]+[`
`[n>>3]])

Hãy thử trực tuyến!


Tôi không biết rằng mcờ không bắt buộc đối với các mẫu chữ nhiều dòng. Hấp dẫn.
Grant Miller

7

Ruby + -p, 177 136 120 118 115 109 byte (chương trình đầy đủ)

$_="abvevjlmvopqtuvvacvfghvklnvopstuvvadvfihvjlmvopqtuvvabvevjlnvoprstv".gsub(/./){|c|(eval$_)[c.ord-97]||$/}

Hãy thử trực tuyến!

-41 byte: Chuyển từ sử dụng biến sang sử dụng ký tự làm chỉ mục mảng

-16 byte: Chuyển sang định dạng đầu vào thuận tiện hơn

-1 byte: Không cần khoảng trống giữa puts"abv...

-1 byte: Sử dụng $/toàn cầu thay vì bằng ?\nchữ

-3 byte: Sử dụng gsub(/./)thay vì.chars.map

-6 byte: Gọi -pvà sử dụng $_. Cảm ơn Pavel !

Mỗi ký tự trong chuỗi ma thuật đại diện cho một chỉ mục vào mảng đầu vào. Tôi cần biến zđể tôi chỉ đọc từ STDIN một lần.

Tôi có thể tiết kiệm một số chi phí từ IO bằng cách viết lambda chấp nhận một mảng và trả về một chuỗi. Điều này đòi hỏi một sự bổ sung vvào cuối, bởi vì nó không nhận được một dòng mới miễn phí từ -p.

Ruby , 162 110 108 105 byte (chức năng)

->z{"abvevjlmvopqtuvvacvfghvklnvopstuvvadvfihvjlmvopqtuvvabvevjlnvoprstvv".gsub(/./){|c|z[c.ord-97]||$/}}

Hãy thử trực tuyến!


Tôi đã không thể tìm ra cách sử dụng String#unpackngắn hơn so .charsvới .ord-97, nhưng có thể có một cách.
benj2240

1
Dưới đây là một vài byte tắt: tio.run/##VY/ Kẻ
Pavel

Gọn gàng, cảm ơn! Hôm nay tôi đã biết về -p$_
benj2240

Tha thứ cho sự thiếu hiểu biết của tôi, nhưng làm thế nào tôi có thể chạy nó từ dòng lệnh hoặc IRB?
John Topley

1
@JohnTopley Nếu bạn muốn sử dụng IRB, bạn có thể sao chép-dán ba dòng này từng dòng một. Để sử dụng chương trình đầy đủ từ dòng lệnh, hãy bắt đầu tại đây
benj2240

4

Java 8, 241 233 141 140 138 byte

a->{a.add("\n");"01E4E9;<E>?@CDEE02E567E:;=E>?@CDEE03E587E91<E>?@CDEE01E4E91=E>?ABCEE".chars().forEach(i->System.out.print(a.get(i-48)));}

Giải trình:

Hãy thử trực tuyến.

a->{                  // Method with ArrayList<String> parameter and no return-type
 a.add("\n");         //  Add a new-line as last item (index 21) to the input-List
 "01E4E9;<E>?@CDEE02E567E:;=E>?@CDEE03E587E91<E>?@CDEE01E4E91=E>?ABCEE".chars().forEach(i->
                      //  Loop over the bytes of this String above
   System.out.print(  //   Print:
     a.get(i-48)));}  //    The String in the list at index `i-48`

Về cơ bản nó chuyển đổi các ký tự ASCII 0(48) thông qua E(69) để các chỉ số 0-lập chỉ mục 0thông qua 21với i-48.



4

05AB1E , 142 68 66 65 byte

`¶)•7/è¸ĀuVI{è:÷MDS.₁bö¼d@ÉÃƶõî›Λðë’OŒβι"žHƒö>“ÃaÈǝõöÓ∍¿þœθÀ•2ôèJ

Hãy thử trực tuyến!

-74 byte nhờ vào EriktheOutgolfer, sử dụng chuỗi nén cơ sở-255.

-2 byte bằng cách đảo ngược chuỗi đã nén để tránh phải nối ba 0

-1 byte nhờ EriktheOutgolfer, bằng cách chuyển sang hai mục trong mảng đầu vào để tránh 0 của lãnh đạo, và do đó loại bỏ Reverse R lệnh.


2

Võng mạc 0.8.2 , 115 byte

^
12F5F:<=F?@ADEFF13F678F;<>F?@CDEFF14F698F:<=F?@ADEFF12F5F:<>F?@BCDF¶
{`1(?=.*¶(.*))
$1
^(.*)¶.*
$1
}T`1-E`0-D
F
¶

Hãy thử trực tuyến! Đưa đầu vào dưới dạng danh sách các chuỗi được phân tách bằng dòng mới.


2

Stax , 59 58 byte

îòÖ╥╬╬╞:,y╓ønä⌠╦╒ï╦≤x◘‼ε╩ⁿ◙ΓZ►e«qpôr╡"╣Ü≥┤╢┴;╡ÑkAú0:=;m╠╠x

Chạy và gỡ lỗi nó

Đại diện ascii tương ứng của cùng một chương trình là đây.

`ORIpY$T&z{m6Y=>mR)_ .VQ)eN70e[:0yO8j$^RN[ Bp{IN/$|"3^;G#^&lv!`FAx+@]p

`ORIpY$T&z{m6Y=>mR)_ .VQ)eN70e[:0yO8j$^RN[ Bp{IN/$|"3^;G#^&lv!`là một nghĩa đen nén với giá trị là "CDBGBLNOBQRSVWBBCEBHIJBMNPBQRUVWBBCFBHKJBLNOBQRSVWBBCDBGBLNPBQRTUVBB". Các ký tự đại diện cho các chỉ mục vào bảng mã thông báo. Chương trình này thêm một mã thông báo khác để thể hiện một dòng mới. Nó không có trong đầu vào, nhưng được thêm vào trong khi thực hiện. Phần còn lại của chương trình hoạt động như thế này.

F           for each character, execute the rest of the program
 A          integer literal 10, character code of newline
  x+        append 10 to the input array
    @       get element at index, using wrap-around
                the list is size 22, and B is 66, so B gets the first token
     ]      wrap the result in a singleton array.
                this effectively turns 10 into "\n"
      p     print without newline

2

Hàm C (gcc), 139 byte

i,m;f(char**s){for(i=0;i<68;)m="AB@E@JLM@OPQTU@@AC@FGH@KLN@OPSTU@@AD@FIH@JLM@OPQTU@@AB@E@JLN@OPRST@@"[i++],printf(m^64?"%s":"\n",s[m-65]);}

Hãy thử trực tuyến!


Tốt đẹp. Bạn có thể giải thích mã?
arminb

@arminb Không có gì quá lạ mắt, Chuỗi "AB @ E ..." dài chứa các chỉ số của mã thông báo và dòng mới ABC ... = mã thông báo [012] .. '@' = dòng mới, mã thông báo hoặc dòng mới được in dưới dạng ' tôi lặp lại qua chuỗi đó.
PrincePolka

hợp nhất printftrongfor
l4m2

1
đảo ngược mã hóa
l4m2


1

Màu đỏ , 133 byte

foreach c{abzezjlmzopqtuzzaczfghzklnzopstuzzadzfihzjlmzopqtuzzabzezjlnzoprstzz}[prin either c =#"z"["^/"][t/(to-integer c -#"a"+ 1)]]

Hãy thử trực tuyến!

Bị đánh cắp

t là một khối với danh sách các mã thông báo

s:{abzezjlmzopqtuzzaczfghzklnzopstuzzadzfihzjlmzopqtuzzabzezjlnzoprstzz}
foreach c s[                           ; for each character in s
    prin either c = #"z"               ; if it's a 'z' 
        ["^/"]                         ; print CR
        [t/(to-integer c - #"a" + 1)]  ; otherwise find which token to print
]                                      ; by mapping its offset to the alphabet


1

Toán học, 102 byte

""<>Append[#,"
"][[36^^ajikrj7lg8pya7wgtt43pvrilsik1dea1uht6mx3go33m4mjj02hb4wi9w3~IntegerDigits~23]]&

Chức năng thuần túy. Lấy danh sách các chuỗi làm đầu vào và trả về một chuỗi làm đầu ra. Chỉ cần mã hóa tất cả các chỉ số mã thông báo, tương tự như các câu trả lời khác.


1

Ruby , 97 byte

->a{112.times{|i|$><<a[i%7-1+i%28/7*5]*("0@Xg(44k$,Xg0@Tz"[i/7].ord>>~i%7&1)+$/*(i%7/6+i%28/27)}}

Hãy thử trực tuyến!

Đã lưu một vài byte với cách tiếp cận khác với hầu hết các câu trả lời khác.

Số lượng mã thông báo có thể có trong mỗi dòng như sau

Line number   Tokens 
1             4
2             5
3             5
4             7

Chuỗi ma thuật chứa một ký tự trên mỗi dòng, được hiểu là một bitmap trong đó có tới 7 mã thông báo có sẵn sẽ được in cho mỗi trong số 16 dòng của bài hát.

a[i%7-1+i%28/7*5] Lặp lại thông qua các mã thông báo của mỗi dòng, thay đổi 5 cho mỗi dòng mới và với độ lệch là 1 để tính đến thực tế là dòng đầu tiên chỉ có 4 mã thông báo.

Đối với các dòng 1-3, chỉ các bit 64 đến 4 được sử dụng - không sử dụng các bit 2 và 1 để tránh in mã thông báo từ dòng tiếp theo. đối với dòng 4, tất cả 7 bit từ 64 đến 1 được sử dụng.

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.