Lurker lama, poster pertama kali. Jadi begini.
Di halaman Wikipedia untuk quine , dikatakan bahwa "quine dianggap 'curang' jika melihat kode sumbernya sendiri." Tugas Anda adalah membuat salah satu dari "quating quines" yang membaca kode sumbernya sendiri.
Ini adalah kode-golf , jadi kode terpendek dalam byte - dalam setiap bahasa - menang. Ini berarti bahwa skrip Pyth 5 byte tidak akan mengalahkan skrip Python 21 byte - tetapi skrip Python 15 byte akan melakukannya.
Anda harus menggunakan file I / O untuk membaca kode sumber, jadi kode JavaScript berikut, yang diambil dari halaman Wikipedia resmi, tidak valid:
function a() {
document.write(a, "a()");
}
a()
Itu harus mengakses kode sumber file pada disk .
Anda tidak diizinkan menentukan nama file. Anda harus membuatnya mendeteksi nama file itu sendiri.
Semuanya bersih? Pergi!
Jawaban:
Zsh , 4 byte
Shell Z memiliki fungsionalitas kucing built-in. Karakter keempat adalah linefeed.
Cobalah online!
Kode sama sekali tidak bergantung pada nama file; ini berfungsi bahkan jika nama file berisi karakter khusus, seperti spasi atau baris baru.
Uji coba
sumber
feline functionalities
:)Bash, 6 byte
Pada dasarnya
sumber
cat
tidak menambahkan baris baru (setidaknya di sistem saya).cat
mencetak konten byte file yang disediakan per byte.cat
solusi, bukanbash
solusi? Dan kucing tidak benar-benar memenuhi syarat sebagai bahasa pemrograman-e
?Loader yang dapat dieksekusi UNIX, 10 byte
Jika Anda tidak peduli tentang spam pada kesalahan standar, Anda bisa membuatnya lebih pendek satu byte:
sumber
cat
. Dan saya kira jika Anda ingin menjadi sangat spesifik, sebuahcat
program cukup mencetak sendiri, dan kompatibel dengan setiap format file yang ada :)sudo install /bin/cat /c
. Kau tahu, kalau-kalau/bin
tidak ada di sistem file root. Harus memilikinyacat
dalam pengguna tunggal ...C, 52
Tentu saja, ini membaca kode sumber dan bukan program yang dikompilasi - saya berasumsi itu dalam spesifikasi.
sumber
printf
alih-alihputs
untuk menghindari baris baru yang tertinggal.puts
bisa digunakan, Anda hanya perluread
karakter yang lebih sedikit.PHP, 21 Bytes
file
membaca baris demi baris file menjadi array dan file hanya memiliki satu baris. Ini menghemat satu byte dibandingkan denganreadfile(__FILE__)
.sumber
readfile
juga 21:<?readfile(__FILE__);
.<?=
Perl, 15 byte
Disimpan 3 byte berkat @ ThisSuitIsBlackNot !
sumber
open 0;print<0>
0
asumsi$0
lalu?perldoc -f open
: "Sebagai pintasan panggilan satu argumen mengambil nama file dari variabel skalar global dengan nama yang sama dengan filehandle:$ARTICLE = 100; open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";
"Perl 6, 20 byte
Saya belum pernah bekerja dengan Perl 6 terlalu lama, jadi saya tidak yakin apakah ada trik untuk membuatnya lebih pendek.
sumber
osascript (AppleScript dari baris perintah),
403332 byteMenjalankan pada file yang disebut dengan
osascript a
.Mendapat paragraf pertama (baris) file dan mencetaknya ke STDOUT dengan baris baru, sehingga baris baru dalam kode.
sumber
read path to me
sepertinya bekerja untuk saya. El Cap.Python 2, 32 byte
Ada baris baru di akhir file.
Python 3, 33 byte
Ada baris baru di akhir file.
Berkat feersum untuk menangkap masalah dan penyediaan
__file__
, Loovjo untuk pendekatan baru pada solusi Python 2 yang menghemat 17 byte, dan Skyler untuk solusi yang menyimpan byte lain dan bekerja di Python 2 dan 3 (tertunda)print
fungsi pada Python 3)!Tautan dokumen untuk
readline
sumber
end
parameter.print
?print(open(__file__).readline())
diikuti oleh baris baru.Batch,
98 BytesMenyimpan satu byte berkat @ Yosua
sumber
Python 2.7, 30 byte
Sunting: Hanya untuk menjadi jelas, kode di atas seharusnya memiliki baris baru pada akhirnya sebagai byte ke-30. Saya tidak terbiasa dengan penurunan harga cukup untuk mengetahui cara menampilkannya di blok kode.
Saya menggunakan trik yang sama di sini seperti yang ada di pengiriman C saya. Ini membaca seluruh file sumber tidak termasuk baris baru yang tertinggal ke akun untuk baris baru tambahan yang
print
akan ditambahkan ke output.sumber
print
tidak akan asing.Java,
212196 Bytes (171 Bytes dengan aturan hard-coding yang dipertanyakan)Terima kasih kepada @Cruncher untuk mempersingkatnya ~ 15 byte!
Saya tidak ragu ini bisa golf.
Atau, metode lain, menggunakan metode statis (dan nama kelas), saya mendapatkan 171 byte. Saya tidak yakin apakah ini memenuhi syarat sebagai hard-coded.
Menggunakan konstruktor untuk mendapatkan nama kelas dengan metode non-statis. Menggunakan metode statis (
A.class.getName()
) sangat sulit dikodekan, jadi saya menggunakan cara yang 'tepat'. Dengan menggunakanA.class.getName()
, kode ini lebih pendek menjadi 171 byte.Versi yang dapat dibaca:
Menggunakan konstruktor dan
this.getClass()
:Menggunakan metode statis
A.class.getName()
:Raih semua byte file sekaligus dan output ke STDOUT. Cukup mudah.
sumber
A.class.getName()
?AutoIt, 34 byte
Output sendiri ke clipboard:
sumber
Ruby, 14
sumber
.
untuk menghindari tanda kurungPergi,
111105 byteGolf kode pertama saya di Go - hanya beberapa trik yang dapat Anda gunakan di sini.
sumber
PowerShell,
39363125 BytesTentang sekencang yang saya bisa mendapatkannya:
gc $MyInvocation.MyCommand.Path | oh
Didukung oleh permintaan populer, ini telah diubah menjadi:
mencetak ke
hostkeluaran standarshell.sumber
gc $MyInvocation.MyCommand.Path
cukup. Ini akan secara otomatis mencetaknya.gc
adalah alias dan hanya akan digunakancat
, jadi Anda punya byte pada saya di sana.gc $PSCommandPath
17 byte. Masalah yang saya lihat adalah bahwa ini memunculkan baris baru (yang tidak ada di sumber). Ini ambigu sekarang jika membuntuti baris baru OK atau tidak ... tergantung bagaimana aturan itu, kita mungkin perlu melakukan sesuatu yang rumit sepertigc $PSCommandPath|write-host -n
untuk 31 byte.Ruby, 15 byte
Sumber: https://stackoverflow.com/questions/2474861/shortest-ruby-quine
sumber
C, 49 byte
Sunting: Untuk memperjelas, byte ke-49 adalah baris baru.
Ini membaca kode sumber minus baris baru di akhir akun untuk baris baru yang
puts
akan ditambahkan ke akhir output.sumber
int main() {*0;}
mungkin bekerja bahkan pada kompiler yang ada, karena mengandung perilaku yang tidak terdefinisi. Demikian pula, solusi xsot mungkin berfungsi pada kompiler yang ada, karena berisi perilaku yang tidak terdefinisi. Tidak ada yang dijamin untuk menyelesaikan masalah. (Meskipun xsot memang diakui lebih cenderung melakukannya, mungkin saja mudah crash). Argumen saya yang sebenarnya adalah bahwa kita harus mengizinkan solusi yang bergantung pada implementasi atau perilaku yang tidak ditentukan, tetapi tidak perilaku yang tidak ditentukan.Mathematica, 16 byte
Jalankan dalam mode skrip .
sumber
Pyth, 25 byte
Ini membaca nama file-nya. Pada dasarnya, ia mencari argv, membuka file yang sesuai dengan argumen terakhirnya, dan mencetak baris pertama.
sumber
h'$__file__$
?NameError: name '__file__' is not defined
. Pyth dikompilasi ke Python, dan kemudian string yang dihasilkan dieksekusi. Jadi saya tidak berharap itu berhasil.Pergi, 133 Bytes
sumber
r"runtime"
.> <> , 13 Bytes
Diuji baik pada penerjemah online dan offline. Itu
g
perintah adalah yang paling dekat untuk dapat membaca dari file sumber dan jika tidak dihitung untuk tujuan tantangan ini saya akan menandai entri saya non-bersaing; Saya percaya itu biasanya dianggap "curang" untuk quines.Cobalah online.
sumber
Haskell, 63 byte
Untuk sains!
sumber
runhaskell
perintah. Sangat keren> <> , 31 byte
Penafian: tidak ada file I / O di> <>, namun saya pikir akan menarik untuk memamerkan ruang kode I / O yang diwarisi dari Befunge, salah satu bahasa yang menginspirasi> <>.
Quine yang membaca sendiri yang saya buat beberapa waktu lalu, Anda dapat mencobanya di sini .
Saya baru saja melihat ada quine membaca pendek> <> . Walaupun jelas lebih baik dalam standar kode-golf, saya ingin menunjukkan bahwa kode itu memiliki panjang kode yang dikodekan, sedangkan milik saya akan menyalin baris tambahan atau kolom kode (selama mereka tidak melanggar kode asli).
sumber
F #, 54 Bytes
Pemakaian:
sumber
Perl 5,
1513 byteKredit untuk solusi Bash untuk menginspirasi ini:
EDIT: Tidak perlu semi-kolon atau spasi pertama.
sumber
cat
, sekarang dan dapat ditemukan di Internet$PATH
. Tetapi jika ada, itu dapat dianggap hanya sebagai perintah yang tersediaperl
, jadi mengapa tidak.Node.js,
6663 byteTidak digunakan
console.log
, yang menambahkan baris baru.sumber
p=process;p.stdout.write(require('fs').readFileSync(p.argv[1]))
console.log(require('fs').readFileSync(process.argv[1]))\n
untuk 57 byte?test.js
. Ini valid untuk menjalankannya dengan menjalankannode test
, yang akan menyebabkan ini membuang kesalahan.C, 31 byte
Solusi bash sangat singkat, jadi mengapa tidak mendasarkan solusi C di atasnya?
sumber
Haskell , 49 byte
Cobalah online!
(GHC) Haskell memiliki ekstensi untuk menggunakan preprocessor C (biasanya digunakan untuk portabilitas antara versi dan arsitektur.) Mudah-mudahan cukup jelas.
sumber
HTML dengan JavaScript, 115 byte (tidak benar-benar masuk hitungan)
Apakah ini masuk hitungan? Saya tidak keberatan, itu menyenangkan :)
Secara teknis itu tidak membuka file. Ini juga merupakan dokumen HTML5 yang baik. XMLSerializer adalah satu-satunya alat yang juga mengembalikan porsi DOCTYPE, tetapi tidak standar. Tetap saja, ini bekerja pada chrome dan firefox, dan saya bertaruh browser lain.
Dan sebagai bonus:
JavaScript, 41 byte
sumber