Quine đôi nhiệm vụ: quine! DlroW, olleH


13

Viết chương trình sẽ xuất mã nguồn của chính nó khi chạy và không có gì khác. Có vẻ dễ dàng, phải không?

Điều hấp dẫn là khi mã nguồn bị đảo ngược, chương trình của bạn phải xuất ra "Xin chào, Thế giới!" chính xác, không có dấu ngoặc kép.

Đây là mã golf, vì vậy số byte thấp nhất sẽ thắng.

Chỉnh sửa : Quine của bạn phải là một quine thích hợp.



4
@ Công bằng mà nói, đây không phải là loại câu hỏi tổng quát mà tôi đang nói ở đó, vì đây không phải là "chức năng in X của mã nguồn của bạn". Điều đó nói rằng nó có thể sẽ không diễn ra rất khác so với các thử thách "khi bạn đảo ngược chương trình ..." mà chúng tôi có.
Martin Ender

1
@ MartinBüttner Nó tương tự như những thách thức mà bạn mô tả mà tôi cảm thấy áp dụng lý do tương tự.
Mego

Câu trả lời:


8

Y, 19 byte

Upxp"!dlroW ,olleH"

Ubắt một chuỗi với Ulúc bắt đầu cho đến khi tiếp theo Uđược đáp ứng, trong trường hợp này là mã nguồn. pin các mục, và xlà một liên kết chấm dứt. Khi đảo ngược, nó trông giống như:

"Hello, World!"pxpU

Điều này nắm bắt chuỗi và in nó với p, một lần nữa kết thúc chương trình với x.

Hãy thử nó ở đây!


4
Uđẩy Ungầm? ಠ_ಠ
Sp3000

1
@ Sp3000 Nó được tạo ra để chương trình có thể tự sửa đổi. Về mặt kỹ thuật, Ulệnh là "lệnh bắt liên kết chuỗi". Nó không được tạo ra để khai thác, nhưng điều đó sẽ không ngăn tôi sử dụng nó để khai thác. : P
Conor O'Brien

1
Tôi không chắc đây được coi là một câu hỏi thích hợp. Định nghĩa của chúng tôi yêu cầu một phần của chương trình mã hóa một phần khác của chương trình , nhưng U...chỉ mã hóa U....
Dennis

@Dennis định nghĩa mã hóa? Tôi nghĩ rằng pbit đã làm đầu ra, đó là một phần của mã hóa.
Conor O'Brien

1
Tôi đã mã hóa như một cái gì đó tạo ra đầu ra, pxsẽ không được tính. Ví dụ, quine SMBF ngắn nhất vẫn được coi là một quine gian lận, mặc dù mã phải in nó. Có thể đáng để yêu cầu Martin làm rõ mặc dù.
Dennis

20

JavaScript (ES6), 42 38 byte

f=_=>/\//g&&"f="+f||"!dlroW ,olleH">=_

Đảo ngược

_=>"Hello, World!"||f+"=f"&&g//\/>=_=f

Giải trình

Khi đảo ngược, nó trở thành một hàm ẩn danh trả về chuỗi Hello, World!.

Regex /\//gtrở thành một nhận xét khi nó được đảo ngược, điều này cho phép >=_=fnhận xét về mặt cú pháp không hợp lệ trong mã đảo ngược.


Điều này rất thông minh. :) Tôi sẽ không nghĩ về điều này.
ericw31415

3
+1 chỉ dành cho đôi mắt sắc sảo : =_=.
Darrel Hoffman

6

JavaScript (ES6), 71 byte

trela=a=>alert("trela="+trela+"\ntrela\n``")//
`!dlroW ,olleH`
trela
``

Làm thế nào nó hoạt động:

Dòng 1 xác định chức năng trelakhi chạy sẽ xuất mã nguồn của chương trình. Dòng 2 là một chuỗi chưa được gán, không làm gì cả. Các dòng 3 và 4 gọi trelalạm dụng cú pháp chuỗi mẫu.

Đảo ngược:

``
alert
`Hello, World!`
//)"``n\alertn\"+alert+"=alert"(trela>=a=alert

Làm thế nào nó hoạt động:

Dòng 1 là một chuỗi chưa được gán, không làm gì cả. Dòng 2 và 3 lạm dụng cú pháp chuỗi mẫu để in Hello, World!. Dòng 4 là một nhận xét.


Tôi thấy rằng JavaScript dường như có một số chậm trễ với cú pháp của nó. Chà, ít nhất là nhiều hơn Python. Điều đó thật tuyệt.
R. Kap

Là trống ``không cần thiết?
Rɪᴋᴇʀ

@EasterlyIrk Không, cần phải gọi trelahàm (in ra quine) trong phiên bản chuyển tiếp
jrich

@jrich oh, tôi đã không nhận ra rằng đó ``là những tranh luận. Mát mẻ.
Rɪᴋᴇʀ

2
Tôi cảm thấy mình nên làm quen với việc nhìn trelaquanh đây ...> _>
Conor O'Brien



2

TRẢ LẠI , 94 byte

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'

Đảo ngược:

'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"

Try it here.

Đầu ra cho STDOUT. Cho đến khi tôi tìm thấy một khung quine tốt hơn, điều này sẽ phải làm ngay bây giờ.

Giải trình

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"

Điều này có chứa chuỗi quine. Ngược lại, điều này được đẩy lên ngăn xếp nhưng không xuất ra.

34¤¤,,,,,,,,,,,,,

Điều này sẽ đẩy một trích dẫn char vào ngăn xếp và đưa ra kết quả hai lần cho đến khi không còn gì để xuất ra. Ngược lại, điều này sẽ in các mã đã có trên ngăn xếp.

% 'H'e'l'l'o',' 'w'o'r'l'd'!'

Cái này bật mục ngăn xếp trên cùng (ngược lại, cái này sẽ bật một ký tự không gian) và đẩy một loạt các mã hóa vào ngăn xếp (ngược lại, các mã này sau đó sẽ được in bởi các chuỗi ,).


Tôi không thể biết đây có phải là mã RETURN thực sự điên rồ không, hay chỉ là mã RETURN bình thường ._.
Hạ cấp

Cả hai; _; Tôi khóc everytiem
Mama Fun Roll

2

Phân hạch 2, 42 byte

Sự thích nghi không biết xấu hổ của một câu chuyện tuyệt vời của @ MartinBüttner trong câu trả lời này

'!+O!'!d'!l'!r'!o'!W'! '!,'!o'!!l'!e'!H'R"

Dùng thử trực tuyến

Và đảo ngược

"R'H!'e!'l!!'o!',!' !'W!'o!'r!'l!'d!'!O+!'

Dùng thử trực tuyến

Trong phiên bản quine, nguyên tử bắt đầu ở Rtiêu đề bên phải. Các "bắt đầu in chế độ mà kết thúc tốt đẹp tiếp theo "(chính nó). Điều này in tất cả mọi thứ ra ngoài trừ ". '!+đặt nguyên tử thành char ". Oin nó ra và phá hủy nguyên tử kết thúc chương trình.

Phiên bản đảo ngược bắt đầu Rlại và cho mỗi nhân vật trong Hello, Worldthiết lập nguyên tử và in !ra mà không phá hủy nguyên tử. Đối với nhân vật cuối cùng !, bản in Ophá hủy nguyên tử.


1

Javascript ES6, 55 byte

$=_=>`$=${$};$()//"!dlroW ,olleH"`;$()//"!dlroW ,olleH"

Khá đơn giản, thực sự.


0

Python 2, 131 byte

Ở đằng trước:

print(lambda x:x+repr(x)+")#'!dlroW ,olleH' tnirp")('print(lambda x:x+repr(x)+")#\'!dlroW ,olleH\' tnirp")(')#'!dlroW ,olleH' tnirp

Đảo ngược:

print 'Hello, World!'#)'()"print '\Hello, World!'\#)"+)x(rper+x:x adbmal(tnirp'()"print 'Hello, World!'#)"+)x(rper+x:x adbmal(tnirp

Nửa đầu là một quine một dòng, tiếp theo là một #để tạo một nhận xét tách nửa đầu với nửa thứ hai đơn giản hơn.


Thích ứng Quine Python này cho_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Sp3000

0

C, 108 byte

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}//};)"!dlroW ,olleH"(stup{)(niam

C99 tôi giả sử?
Neil

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.