Periode 2 Quine Terbalik

10

Tugas Anda adalah menulis program yang menampilkan kode sumbernya sendiri secara terbalik. Namun, ketika kode terbalik dijalankan, harus menampilkan kode sumber, menghadap ke arah yang benar.

Contoh

Katakan program Anda abc. Saat dijalankan, seharusnya output cba. cba, ketika dijalankan, harus menampilkan abc.

Aturan

Program Anda harus mengikuti semua aturan quine yang tepat (kecuali untuk menghasilkan kode sumber). Palindrom dilarang.

Catatan acak: Saya mengetahui hal ini tetapi saya percaya bahwa tantangan ini berbeda karena kode yang diubah harus memiliki sifat yang sama.

internet_user
sumber
Terkait
HyperNeutrino
Juga terkait.
Martin Ender

Jawaban:

9

RProgN , 3 byte

1
2

Terima kasih kepada @MartinEnder untuk mengingatkan saya tentang jawaban ini .

Cobalah online!

Bagaimana itu bekerja

Ini mengeksploitasi kelemahan potensial dalam definisi kami tentang quine yang tepat :

Harus mungkin untuk mengidentifikasi bagian dari program yang mengkodekan bagian yang berbeda dari program. ("Berbeda" yang berarti bahwa dua bagian muncul di posisi yang berbeda.)

Lebih lanjut, quine tidak boleh mengakses sumbernya sendiri, secara langsung atau tidak langsung.

Itu jelas terjadi di sini, karena output adalah kebalikan dari kode dan kode tersebut bukan palindrome.

RProgN - notasi programmer terbalik - menggunakan tumpukan LIFO dan mencetak item di atasnya dalam urutan mereka muncul. Dua token 1 dan 2 , dipisahkan oleh spasi dan / atau baris baru, muncul dalam urutan terbalik dan dicetak dipisahkan oleh baris baru.

Ini mencetak program yang terbalik

2
1

yang, pada gilirannya, mencetak yang asli.

! enilno ti thn

Dennis
sumber
Saya suka URL-nya.
Christopher
4
Kita harus memperbaikinya ... Saya akan mengirim jawaban baru (berdasarkan komentar ini ) pada pertanyaan meta, tetapi mungkin tidak akan mendapatkan perhatian yang cukup untuk bersaing dengan jawaban yang ada.
ETHproduk
2
@ ETHproductions: Lakukan. Saya merasa ada beberapa masalah dengan definisi quine yang tepat saat ini. (Bisa dibilang, bahasa saya 7 adalah studi dalam kasus tepi untuk quineness yang tepat; selain kasus khusus ini, dapat menangani beberapa orang lain.) FWIW, saya tidak yakin ini adalah reverse quine yang tepat bahkan oleh saat ini kami definisi; 1 dan 2 dikodekan dengan jelas oleh mereka sendiri, jadi satu-satunya minat potensial adalah apa yang mengkodekan baris baru. (Ini berbeda dari a 1\n1, di mana keduanya 1menyandikan satu sama lain; itu mungkin quine yang tepat tetapi bukan quine-quine yang tepat.)
9

Befunge-98 , 33 byte

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

Cobalah online!

IQuick 143
sumber
Jawaban pertama yang bagus. Tetapi gunakan #tajuk untuk membuat Anda. Juga buka Tryitonline.net dan dapatkan juru bahasa online
Christopher
2
Juga pergi di bawah tombol simpan dan gunakan satu pengiriman codegolf.
Christopher
Saya mengeditnya di TIO pada awalnya saya hanya lupa untuk menambahkan tautan tetapi sekarang sudah ditambahkan dan terima kasih atas tip Header
IQuick 143
Perhatikan bahwa opsi "pengiriman codegolf" di TIO memberi Anda template awal, termasuk header.
Ørjan Johansen
Saya pikir gtidak diizinkan di Befunge quines, karena membaca sumber program langsung dari memori?
7

Fisi 2 , 10 byte

"L;L'!+!'_

Cobalah online!

Ini mencetak:

_'!+!'L;L"

Cobalah online!

Dan sebaliknya.

Penjelasan

Ini adalah modifikasi dari quine terbalik . Ini berfungsi untuk keuntungan kami di sini yang !digunakan untuk mencetak dan juga hanya berjarak satu poin kode dari kutipan ". Itu membuatnya lebih mudah untuk membuat bagian pencetakan kutipan palindromic (the '!+!'). Mari kita mulai dengan kode pertama:

"L;L'!+!'_

Program ini memiliki dua titik masuk di Ls, yang masing-masing membuat atom yang tersisa. Namun, yang tepat langsung mengenai ;yang menghancurkannya. Yang kiri memasuki mode string dan membungkus sampai akhir, sehingga mencetak seluruh kode (kecuali ") dari belakang ke depan. Itu sudah memberi kita _'!+!'L;L. Yang tersisa adalah mencetak ". _dapat diabaikan, '!setel massa atom menjadi 33 (titik kode !), +menambahnya ", dan !mencetaknya. Itu semua yang dilakukan. The 'Lset atom massa ke titik kode Ltapi itu tidak relevan. ;menghancurkan atom ini juga dan karena tidak ada atom yang tersisa, program berakhir.

Sekarang sebaliknya:

_'!+!'L;L"

Sekali lagi, kami memiliki dua titik masuk tetapi satu atom segera dihancurkan. Kali ini kami bergerak melalui !+!'bagian pertama, jadi kami mulai dengan mencetak penawaran. The '_lagi relevan, tapi kita perlu _(atau beberapa karakter yang tidak berguna lainnya) di sini untuk menghindari 'melarikan diri ". Atom membungkus sampai akhir, melintasi kode sumber sekali dalam mode string untuk mencetak sisa program secara terbalik, yang Lkemudian diabaikan dan ;menghancurkan atom dan mengakhiri program.

Martin Ender
sumber