Konsep
Tulis program yang mengeluarkan kode dalam bahasa pemrogramannya. Kode itu, ketika dieksekusi, harus menampilkan program aslinya.
Aturan
- Karena ini adalah quine kecurangan, Anda dapat membaca kode sumber asli.
- Program keluaran pertama harus dalam bahasa yang sama dengan program aslinya.
- Anda tidak dapat membuat quine biasa. Kedua program harus berbeda.
- Celah standar berlaku.
- Ini kode-golf sehingga jawaban terpendek menang, namun tidak akan dipilih.
Jawaban:
Bash + coreutils, 11 byte
Ini mencetak
Cobalah online!
Pada gilirannya, itu akan dicetak
sumber
tr
perintah ini diarahkan ke$0
mana kode sumbernya sendiri. Jadi itu "curang".Siput, 0 byte
Program kedua adalah
Program pertama menghitung jumlah kecocokan dari pola kosong pada input kosong (yang benar-benar memiliki area 0, tetapi polanya selalu berjalan setidaknya sekali sebagai retasan untuk memungkinkan program memutuskan apa yang ingin mereka cetak pada input kosong). Program kedua dimulai dengan kuantifier (seperti
{1}
dalam regex), yang menyebabkan kesalahan parse. Karena program tidak berhasil parse, STDOUT adalah string kosong.sumber
7 , 2 byte
7 menggunakan set karakter 3-bit, tetapi mengambil input yang dikemas ke dalam byte (dan menurut meta, bahasa dengan set karakter sub-byte dihitung menggunakan byte untuk file pada disk ). Berikut adalah
xxd
dump program:Saat memberikan file ini ke 7 interpreter, itu akan menampilkan program berikut:
yang kemudian akan menampilkan program aslinya lagi.
Jadi apa yang terjadi di sini? Tidak ada pembacaan sumber yang terlibat (sebenarnya, saya tidak berpikir itu mungkin untuk membaca sumber dalam 7), meskipun bisa dibilang program ini curang dengan cara lain; biarkan aku tahu apa yang kamu pikirkan. Begini cara program bekerja. (Perhatikan bahwa setiap perintah 7 memiliki dua varian, beberapa di antaranya tidak memiliki nama dan tidak dapat muncul dalam program asli. Ada dua belas perintah total, dalam enam pasangan. Saya menggunakan huruf tebal untuk perintah aktif, nonbold untuk pasif perintah, dan dalam kasus di mana perintah aktif tidak memiliki nama, saya memberinya nama yang sama dengan perintah pasif yang sesuai dan bergantung pada huruf tebal untuk membedakan. Dalam kasus di mana keduanya bernama, misalnya
7
yang merupakan varian aktif dari1
, setiap perintah mendapatkan namanya sendiri dan huruf tebal hanya penyorotan sintaks.)Pada titik ini, 7 penerjemah melihat bahwa bagian atas tumpukan berisi perintah (
2
dan3
) yang tidak dapat diwakili, sehingga lolos dari bagian atas tumpukan, menghasilkan723
(yang mana). Output perintah pertama memilih format output; dalam hal ini, formatnya 7, "format output dengan cara yang sama seperti program". Jadi perintah mendapatkan output dikemas dalam byte. Kemudian program berlanjut:Pada titik ini, tidak ada yang lain selain elemen stack kosong pada stack, sehingga program keluar. Kami output
23
sebelumnya. Jika kita melarikan diri237
(dan kita harus, karena itu berisi perintah yang tidak terwakili), kita dapatkan7231
. Itu mendapatkan output secara langsung, membuat output akhir dari program237231
(diformat dengan cara yang sama seperti program, yaitu dikemas dalam byte). Itu4fa67f
. (Dapat dicatat bahwa1
sepenuhnya tidak ada gunanya dalam hal mempengaruhi output; satu-satunya alasan di sana adalah untuk membuat dua program berbeda.)Menjalankan
237231
menghasilkan hampir dengan cara yang persis sama; perbedaannya adalah bahwa sia-sia1
berjalan tepat setelah cetakan pertama (dan elemen kosong akan dihapus secara implisit saat kedua akhir program saat ini tercapai). Sekali lagi,231
akhirnya keluaran itu sendiri,23
akhirnya keluaran itu sendiri didahului oleh7
, dan kita dapatkan231723
, program aslinya.Pengamat mungkin mencatat bahwa kedua program, meskipun memiliki panjang yang sama dalam oktal "asli" bahasa, adalah panjang yang berbeda pada disk. Itu karena program 7 dapat diisi dengan angka 1 bit sewenang-wenang, dan format yang dikemas membuang lapisan tambahan. Begini cara encoding terjadi:
Dengan kata lain, dua byte,
4C
F4
cukup untuk mewakili program, jadi hanya itu yang saya gunakan.sumber
Python 3,
297279251243225218208180126111 byteTidak curang:
Ini mencetak:
yang, ketika dijalankan, mencetak program asli.
sumber
Batch, 14 byte
Yang mana dijalankan sebagai
cyclicquine.bat
outputYang ketika dijalankan menghasilkan file batch asli.
sumber
RProgN , 4 Bytes.
Masyarakat tampaknya menganggap hal semacam ini sebagai selingkuh curang , yang dengan demikian memenuhi kriteria.
Dengan baris baru yang tertinggal.
Ini mencetak
Dengan baris baru tambahan, yang mencetak kode pertama.
RProgN mencetak tumpukan yang muncul, jadi dari atas ke bawah.
Cobalah online!
sumber
1\n1\n
dalam RProgN akan menjadi quine yang tidak curang, karena masing-masing 1s saling mencetak (dan itu hanya akan dianggap curang jika masing-masing 1 dicetak sendiri). Semua ini benar-benar menyiratkan bahwa menipu dalam quines kadang-kadang sulit untuk didefinisikan. (Namun, jawaban ini benar cara baik, karena pertanyaan tidak benar-benar membutuhkan yang Quine untuk menipu, hanya memungkinkan itu.)1\n
secara teknis quine yang valid, karena1
tidak konstan, tetapi panggilan ke fungsi yang mendorong1
ke stack.Jolf, 6 byte
Saat dijalankan, ini menghasilkan:
Yang pada gilirannya menghasilkan
1q_a_q
.Coba di sini!
Penjelasan
sumber
JavaScript (ES6),
696059 byteOutput:
-1 byte (@ETHProductions): gunakan 0 pada regex alih-alih \ d
sumber
n=>1-n
alih-alihn=>+!+n
.1
akhirnya akan diganti oleh regex.Bash + Sed, 15 byte
Gagasan yang sama dengan Jawaban Dennis .
sumber
Bash,
Cat,and Rev,1916 byte-3 Terima kasih kepada @izabera
sumber
Bash
,Tac
dan `Rev?rev $0 # 0$<space><space>ver
untuk beberapa alasan saya tidak dapat memberikan dua spasi dalam komentartac
rev
-ed adalahcat
.> <>, 16 byte
Coba di sini!
Keluaran
Ini adalah modifikasi dari yang disediakan di sini . Saya tidak yakin apakah itu curang, itu membaca codebox dan mengeluarkannya.
sumber