atau: Bangun quine vertikal
Terinspirasi oleh Berpegang teguh pada antrean panjang .
Tugas Anda adalah membuat quine vertikal dengan panjang garis sesingkat mungkin.
Mencetak gol
Panjang garis terpendek (tidak termasuk baris baru) menang, dengan kriteria kode-golf sebagai tie-breaker.
Panjang garis ditentukan sebagai garis terpanjang dalam program Anda kecuali karakter garis putus.
Sebagai contoh:
$_=
Q.
P
memiliki panjang garis 3 dan hitungan byte 8, sementara:
Q
$
_
P
Memiliki panjang garis 1 dan hitungan byte 7 (dengan asumsi tidak ada baris baru).
Aturan
Quine harus memenuhi definisi komunitas quine .
Celah standar dilarang.
code-challenge
quine
source-layout
Dom Hastings
sumber
sumber
Jawaban:
Bahasa , panjang garis 0, ≈ 1,01 × 10 805 byte
Kode sumber terdiri dari
linefeeds, yang menyandikan program brainfuck yang mengikuti.
Kode sumber sebagian besar identik dengan quine Lenguage yang dilembutkan oleh @ jimmy23013 , dikurangi
.
di akhir, dengan++++++++++.[-]
mengganti.
untuk mencetak linefeeds alih-alih null byte, dan perubahan yang sesuai dengan bagian data pada baris 1.sumber
"about 1.75*10**76 yottabytes in ASCII"
]++++++++ ++.-->
JavaScript, panjang baris 1,
960956928 byteVersi yang lebih mudah dibaca yang juga merupakan quine (newlines asing dihapus):
Penjelasan
Wah. Duduklah di sini, karena ini akan menjadi perjalanan yang berbahaya ...
Saya menghabiskan banyak waktu untuk mencari tahu bagaimana menyelesaikan tantangan ini dengan panjang 1 — tidak ada built-in (secara langsung, toh), kata kunci, atau bahkan fungsi panah — sebelum menyadari bahwa itu mungkin dengan JSF *** , yang dapat dilakukan dengan mudah. mengevaluasi kode JavaScript apa pun sambil menghindari token multi-byte. Tetapi solusi JSF akan dengan mudah panjangnya ribuan byte, jika tidak puluhan atau ratusan ribu. Untungnya, kami tidak terbatas hanya pada —
()[]+!
kami memiliki semua ASCII yang kami miliki!Saya memutuskan untuk memulai dengan bermain-main blok bangunan penting JSF — karakter yang dapat dibangun menjadi string untuk "membuka lebih banyak fitur," jadi untuk berbicara. Kami tidak dapat menggunakan string secara langsung untuk mendapatkan karakter, karena itu membutuhkan garis panjang 3. Jadi, kami mencuri trik dari JSF, mendapatkan beberapa karakter dari literal yang dapat dibangun dengan token byte tunggal:
Dari ini kita dapat memperluas ke luar, dimulai dengan
[].find
, yang merupakan objek Function. Konversi ini untuk stringfunction find() { ...
memberi kita akses kec
,o
, ruang (_
), dan tanda kurung (y
danz
). Mungkin yang lebih penting, kami sekarang memiliki akses ke nyaconstructor
, yangFunction
fungsi-yang, inceptional kedengarannya, memberikan kita kemampuan untuk mengeksekusi kode dengan membangun string, lewat keFunction()
, dan kemudian memanggil fungsi yang dihasilkan.Saya mungkin harus menyebutkan metode keseluruhan yang digunakan oleh program itu sendiri. Pada 2015, JavaScript memiliki fitur yang sangat keren ini disebut " tagged templates ," yang tidak hanya memungkinkan baris baru yang tidak terhapus dalam string, tetapi juga memungkinkan kita memanggil fungsi dengan string literal secara langsung (dengan cara;
myFunc`abc`;
kira-kira setara denganmyFunc(["abc"])
). Jika kita menempatkan pemanggilan fungsi sebagai hal terakhir dalam program, struktur umum akan terlihat seperti ini:Yang
func
harus dilakukan adalah mengeluarkan argumennya, diikuti backtick, lalu argumennya lagi, dan backtick kedua. Dengan asumsi kita memiliki argumena
dan backtick tersimpanf
, kita dapat menyelesaikan ini dengan kodealert(a+f+a+f)
. Namun, saat ini, kami hilang+
dan backtick itu sendiri.+
(disimpan dalamP
) tidak sulit; kami mencuri trik lain dari JSF, membuat string1e23
, mengonversi ke angka, lalu kembali ke string, memberi"1e+23"
.Mendapatkan backtick sedikit lebih rumit. Pada awalnya, saya mencoba mendapatkan
String.fromCharCode
, tetapiC
ternyata ternyata hampir sama sulitnya. Untungnya,atob
cukup mudah untuk memperoleh (Function("return atob")()
;b
dihasilkan dari0+{}
, yang memberi[object Object]
) dan dapat memberikan arang ASCII, jika string sihir yang tepat ditemukan. Sebuah script singkat memberi saya12A
sebagai salah satu pilihan, yang dapat mudah ditemukan di12Array
(a bit lebih pendek untuk menghasilkan, berkat[].constructor[n+a+m+e]
;m
ditemukan dalam0 .constructor+0
:"function Number() { ..."
).Akhirnya, kami menggabungkan semuanya. Kami menetapkan backtick ke variabel
f
, tetapi karena kami tidak dapat menggunakannya secara langsung dalam string fungsi, kami malah mengatur variabelq
ke huruff
dan menggunakannya. Ini membuat string terakhir kitaa+l+e+r+t+y+a+P+q+P+a+P+q+z
, atau"alert(a+f+a+f)"
. Kami kemudian mengumpankan ini keFunction()
, memberi makan kode jadi kami ke hasilnya, dan voila, kami memiliki quine JavaScript dengan tidak lebih dari satu char per baris!Kepalaku merasa tidak enak saat ini, jadi tolong tanyakan tentang kesalahan yang telah saya buat atau hal-hal yang saya lewatkan dalam penjelasan ini, dan saya akan menghubungi Anda setelah saya beristirahat ...
sumber
f=
baris itu.f
backtick tunggal. Garis itu sendiri setara denganf=atob("12Array")[1]
. Trik lainnya adalah bahwaq
sebenarnya diatur ke huruff
di baris pertama, sehingga diF(...)
baris itu, saya bisa menggunakannya untuk meletakkan huruff
di string yang dievaluasi, karena variabelf
tidak lagi diatur ke huruf itu. Inia+l+e+r+t+y+a+P+q+P+a+P+q+z
setara dengan"alert(a+f+a+f)"
.0+{}
dan0[E]
menyesuaikan untuk mendapatkanb
danm
.Haskell , panjang baris 6,
400343336 byteCobalah online! Saya tidak mengetahui adanya jalan
putStr
memutar, sehingga panjang garis 6. Kurung kurawal luar memungkinkan untuk menyingkirkan indentifikasi yang diperlukan setelah baris baru dalam satu deklarasi.sumber
> <> , 22 byte, panjang baris 1
Cobalah online!
-6 byte terima kasih kepada Emigna .
sumber
CJam , panjang baris 1,
1613 byteCobalah online!
Ini adalah keajaiban kecil bahwa memasukkan baris baru ke dalam
standar quine standar yanglebih pendek quine{"_~"}_~
"_p"␊_p
melakukan hal yang benar. (Terima kasih, Martin!) Baris baru yang tertinggal diperlukan.Penjelasan (dengan • sebagai baris baru)
Pada penghentian, apa yang tersisa di tumpukan dicetak (
•_•p•
), menghasilkan total output"•_•p•"••_•p•
.sumber
Haskell + CPP, panjang baris 2,
705237 byteCobalah online! Menggunakan bendera
-CPP
yang memungkinkan pra-prosesor C memungkinkan kita untuk menggunakan garis miring terbalik di akhir baris untuk melanjutkannya di baris berikutnya.Kode aktualnya adalah
main=putStr$(:"\\\n")=<<s++show s;s="<data>"
.Sunting: Santai -468 byte berkat Ørjan Johansen !
sumber
main=putStr$(:"\\\n")=<<s++show s;s="<data>"
. Cobalah online!Karat, panjang garis: 5, byte:
301299Cobalah online
Terlepas dari tampilannya, ini bukan bahasa pemrograman esoterik, hanya ada banyak derau format line.
Panjang vertikal 5 dipilih untuk dapat digunakan
print
. Saya tidak berpikir ada cara untuk mencetak yang akan memiliki panjang vertikal lebih pendek, menyatakan fungsi C menggunakanextern
kata kunci,stdout
panjangnya 6 byte, panjangwrite
5 byte, panjangno_main
7 byte (utama biasanya fungsi;)).sumber
cargo fmt
bahkan tidak akan membantu di sini ...05AB1E , Panjang baris: 1, Jumlah Byte: 43
Cobalah online!
sumber
Japt , panjang baris 1, 20 byte
Didasarkan pada standar Japt quine oleh ETHproductions .
Coba di sini!
sumber
JavaScript (ES6), panjang baris 3, 17 byte
sumber
Merah , panjang garis: 10, 49 byte
Cobalah online!
Ini sebenarnya adalah quine Rebol
Penjelasan: Merah / Rebol
mold
mengikuti gaya pengkodean menempatkan 4 spasi offset.sumber
RProgN , 3 byte, panjang baris 1
Cobalah online!
Salinan jawaban Dennis di sini (angkat dia juga)
Ini sesuai dengan definisi quine yang tepat saat ini, karena 0 pertama mengkodekan 0 kedua dan sebaliknya.
sumber
RProgN 2 , L = 1, B = 15 byte
Ini setara dengan program:
Kerusakan
«
pertama mendorong fungsi yang secara implisit mewakili sisa program ke stack, dan kemudian melanjutkan eksekusi.Ø.
menambahkan string kosong ke fungsi, yang membuatnya menjadi string. Ini akan selalu ketat seperti program equivilent, karena baris baru menjadi no-ops.`\n-
Menghapus semua baris baru dari string, sekarang tampak seperti«Ø.`=S`.
.S
kemudian mengonversinya menjadi tumpukan karakter tunggal, dan`\n.
bergabung dengan tumpukan dengan baris baru, mengembalikan program yang diharapkan.Cobalah online!
sumber
Underload , panjang jalur 1, 20 byte
Cobalah online!
Ini hanya standar Underload quine dengan baris baru ditambahkan. Membutuhkan implementasi seperti TIO yang mengabaikan karakter perintah yang tidak dikenal.
Bagian dalam
()
adalah string literal yang diletakkan di tumpukan,:
menduplikatnya,a
membungkus entri tumpukan atas dalam tanda kurung, danS
mencetak.sumber
Perl 5 , 259 byte
Cobalah online!
Verifikasi .
sumber
Javascript (ES6 REPL), program lengkap, panjang garis: 3, byte-hitung: 31
Ini adalah port jawaban @ kamoroso94 untuk program lengkap mandiri.
Jika ada yang menemukan cara untuk menghapus beberapa byte tanpa menambahkan lebih ke panjang-line, jangan ragu untuk berkomentar :)
sumber
Pip , panjang garis 1, 35 byte
Cobalah online!
Berdasarkan Pip Quine terpendek dikenal,
V Y"`V Y`.RPy"
. Kesulitan utama dalam memadatkannya ke garis panjang 1 adalahRP
, yang tidak dapat dibagi menjadi dua garis. Tetapi dalam kasus ini, semuaRP
(repr) yang dilakukan adalah membungkus string dengan tanda kutip ganda, yang dapat kita lakukan secara langsung.Berikut penjelasan berdasarkan versi horizontal:
sumber
Befunge-98 , 41 byte
Cobalah online!
Benar-benar hanya quine normal yang berbalik ke samping, dengan beberapa hal tambahan untuk mencetak baris baru.
sumber