Quine tugas ganda: quine! DlroW, olleH

13

Tulis program yang akan menampilkan kode sumbernya sendiri ketika dijalankan, dan tidak ada yang lain. Tampaknya mudah, bukan?

Tangkapannya adalah bahwa ketika kode sumber dibalik, program Anda harus menampilkan "Halo, Dunia!" tepatnya, tanpa tanda kutip.

Ini adalah kode-golf, sehingga jumlah byte terendah menang.

Sunting : Quine Anda harus quine yang tepat.

ericw31415
sumber
4
@Jujurlah, ini bukan jenis quine umum yang saya bicarakan di sana, karena ini bukan "fungsi cetak X dari kode sumber Anda". Yang mengatakan itu mungkin tidak akan bermain sangat berbeda dari yang lain "ketika Anda membalikkan program ..." tantangan yang kita miliki.
Martin Ender
1
@ MartinBüttner Ini cukup mirip dengan tantangan yang Anda jelaskan bahwa saya merasakan alasan yang sama berlaku.
Mego

Jawaban:

8

Y, 19 byte

Upxp"!dlroW ,olleH"

Umenangkap string dengan Udi awal hingga yang berikutnya Uterpenuhi, dalam hal ini, kode sumber. pmencetak item, dan xmerupakan tautan terminasi. Ketika dibalik, ini terlihat seperti:

"Hello, World!"pxpU

Ini menangkap string dan mencetaknya dengan p, sekali lagi mengakhiri program denganx .

Coba di sini!

Conor O'Brien
sumber
4
Umendorong Usecara implisit? ಠ_ಠ
Sp3000
1
@ Sp3000 Ini dibuat agar program dapat memodifikasi dirinya sendiri. Secara lebih teknis, Uperintahnya adalah "perintah penangkapan tautan rantai". Itu tidak dibuat untuk quining, tapi itu tidak akan menghentikan saya menggunakannya untuk quining. : P
Conor O'Brien
1
Saya tidak yakin ini dianggap sebagai quine yang tepat. Definisi kami memerlukan bagian dari program yang mengkodekan bagian yang berbeda dari program , tetapi U...hanya mengkodekan U....
Dennis
@Dennis menentukan kode? Saya pikir pbit melakukan output, yang merupakan bagian dari pengkodean.
Conor O'Brien
1
Saya mengambil encode sebagai sesuatu yang menghasilkan output, jadi pdan xtidak akan dihitung. Sebagai contoh, quine SMBF terpendek masih dianggap sebagai quine kecurangan, meskipun kode harus mencetaknya. Mungkin layak meminta Martin untuk klarifikasi.
Dennis
20

JavaScript (ES6), 42 38 byte

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

Terbalik

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

Penjelasan

Ketika dibalik, itu menjadi fungsi anonim yang mengembalikan string Hello, World! .

Regex /\//gmenjadi komentar ketika dibalik, yang memungkinkan sintaksis tidak valid >=_=funtuk dikomentari dalam kode terbalik.

pengguna81655
sumber
Ini sangat cerdas. :) Saya tidak akan memikirkan hal ini.
ericw31415
3
1 hanya untuk licik-mata: =_=.
Darrel Hoffman
6

JavaScript (ES6), 71 byte

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

Bagaimana itu bekerja:

Baris 1 mendefinisikan fungsi trelayang ketika dijalankan menghasilkan kode sumber program. Baris 2 adalah string yang tidak ditetapkan, tidak melakukan apa pun. Baris 3 dan 4 panggilantrela menyalahgunakan sintaks string templat.

Terbalik:

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

Bagaimana itu bekerja:

Baris 1 adalah string yang tidak ditetapkan, tidak melakukan apa pun. Baris 2 dan 3 menyalahgunakan sintaks string template untuk dicetak Hello, World!. Baris 4 adalah komentar.

Jrich
sumber
Saya melihat bahwa JavaScript tampaknya memiliki beberapa kelonggaran dengan sintaksisnya. Yah, setidaknya lebih dari yang dilakukan Python. Itu bagus.
R. Kap
Apakah yang kosong itu ``tidak perlu?
Rɪᴋᴇʀ
@ EasterlyIrk Tidak, perlu memanggil trelafungsi (yang mencetak quine) dalam versi ke depan
jrich
@rich oh, saya tidak menyadari bahwa ``itulah argumennya. Keren.
Rɪᴋᴇʀ
2
Saya merasa seperti saya harus terbiasa melihat trela- lihat di sini ...> _>
Conor O'Brien
3

GolfScript, 33 byte

Maju

{`".;1$~]"}"!dlroW ,olleH".;1$~]

Cobalah online!

Ke belakang


]~$1;."Hello, World!"}"]~$1;."`{

Cobalah online!

Dennis
sumber
3

GolfScript, 29 28 byte

"` '. ~]' # \ "! dlroW, olleH". ~]

Ini memiliki satu baris tambahan. Coba di sini.

Terbalik:

] ~. "Halo, Dunia!" \ # '] ~ .'` "

Coba di sini.

jimmy23013
sumber
2

KEMBALI , 94 byte

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

Terbalik:

'!'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.

Output ke STDOUT. Sampai saya menemukan kerangka quine yang lebih baik, ini harus dilakukan untuk saat ini.

Penjelasan

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

Ini berisi string quine. Secara terbalik, ini didorong ke stack tetapi tidak di-output.

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

Ini mendorong tanda kutip ke stack dan menampilkan hasilnya dua kali sampai tidak ada yang tersisa untuk output. Secara terbalik, ini akan mencetak kode-kode yang sudah ada di tumpukan.

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

Yang ini muncul item tumpukan atas (terbalik, ini akan memunculkan ruang char) dan mendorong serangkaian kode sandi ke tumpukan (secara terbalik, kode ini nantinya akan dicetak oleh seri ,'s).

Mama Fun Roll
sumber
Saya tidak tahu apakah ini kode RETURN yang benar-benar gila, atau hanya kode RETURN yang normal ._.
Downgoat
Keduanya; _; I cry everytiem
Mama Fun Roll
2

Fisi 2, 42 byte

Adaptasi quine yang luar biasa dari @ MartinBüttner dalam jawaban ini

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

Cobalah online

Dan terbalik

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

Cobalah online

Dalam versi quine, atom dimulai dari Rarah kanan. The "dimulai modus yang membungkus ke depan mencetak "(sendiri). Ini mencetak semuanya kecuali ". '!+atur atom menjadi char ". Omencetaknya dan menghancurkan atom yang mengakhiri program.

Versi terbalik dimulai di Rlagi dan untuk setiap karakter dalam Hello, Worldmengatur atom dan mencetaknya !tanpa menghancurkan atom. Untuk karakter terakhir !cetakan Omenghancurkan atom.

MickyT
sumber
1

Javascript ES6, 55 byte

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

Cukup sederhana, sungguh.

Mama Fun Roll
sumber
0

Python 2, 131 byte

Meneruskan:

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

Membalikkan:

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

Babak pertama adalah quine satu baris, diikuti oleh #untuk membentuk komentar yang memisahkan babak pertama dari babak kedua yang lebih sederhana.

csvoss
sumber
Menyesuaikan quine Python ini memberi_='_=%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
mIllIbyte
sumber
C99 saya anggap?
Neil
0

Python 2, 70 byte

_='_=%r;print _%%_#"dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Erik the Outgolfer
sumber