Tujuan Anda adalah membuat program yang mencetak sendiri tanpa batas, dengan baris baru setelah masing-masing. Dengan demikian, jika program Anda adalah satu-liner, itu akan diulang pada setiap baris output.
Contoh
Program:
A
Keluaran:
A
A
A
...
Aturan
- Itu harus berupa program yang lengkap, bukan cuplikan atau fungsi.
- Program harus berulang selamanya tanpa stack-overflow atau kesalahan batas rekursi.
- Output adalah ke stdout atau alternatif terdekat.
- Tidak ada input program yang diterima.
- Celah standar tidak diizinkan, seperti membuka file program atau mengakses sumber daya eksternal. Program kosong tidak diizinkan sebagai celah standar.
- Jika kode program Anda berakhir dengan baris baru tambahan, ini tidak dihitung sebagai baris baru yang diperlukan di antara quine, dan Anda harus mencetak yang lain.
- codegolf - Kode terpendek menang!
while(1)println(your_code)
;Jawaban:
Fission, 7 byte
Modifikasi yang agak sederhana dari quine Fisi terpendek yang saya temukan sejauh ini : Saya hanya menggunakan non-destruktif
!
alih - alihO
dan menambahkanN
baris baru.Jadi semuanya, inilah cara kerjanya: kontrol aliran dimulai
R
dengan atom yang berjalan dengan benar."
matikan mode string, yang berarti segalanya sampai yang berikutnya"
dicetak: dalam hal ini'!+!NR
. Yang meninggalkan"
dan baris baru untuk dicetak.'!
mengatur massa atom menjadi 33,+
menambahnya menjadi 34 (kode karakter"
) dan!
mencetak kutipan.N
mencetak baris baru, danR
sekarang menjadi no-op dalam kasus ini, sehingga loop dimulai kembali.Solusi 7-byte berikut juga berfungsi:
sumber
> <> , 16 byte
Quine> <> tradisional menggunakan terlalu banyak
o
, jadi kami menggunakan loop untuk mencetak. Sebelum setiap lompatan, kita mendorong 5 dan 0 (koordinat tempat lompat ke), setelah itu kita lompat dengan.
apakah masih ada sesuatu untuk dicetak, atau muncul dua nilai teratas dengan~~
.(Dikembalikan ke versi 16 karena saya lupa tentang aturan stack overflow.)
sumber
"ar00go50l2)?.[
, bukan?d3*
karenag
membaca kode sumber Anda sendiriCJam, 13 byte
Juru bahasa online tidak mencetak apa pun sebelum program berakhir, jadi Anda harus mengujinya di Java interpreter.
Penjelasan
Akhirnya quine CJam umum yang tidak berakhir pada
_~
.Ini hanya mendorong satu blok.
_g
menduplikasi blok dan menjalankannya berulang kali sementara bagian atas tumpukan benar (membuang kondisi).Sekarang di dalam blok, salinan lain dari blok itu masih ada di tumpukan. Kami menduplikat dan mencetaknya dengan
_o
dan kemudian kami mencetak_g
diikuti oleh baris baru (baris tambahan yang diperlukan antara quines) dengan"_g\n"o
. Akhirnya kita dorong a1
ke stack untuk mengulangi loop, karena sayangnya, blok tidak benar (atau salah) di CJam.sumber
Python 2, 39
Bukan tugas yang sangat menarik dalam Python karena itu sepele untuk menambahkan loop sementara ke quine normal.
sumber
Perl 5.10+,
4037 byteatau (juga 37 byte)
Meminta dengan
-M5.010
atau-E
baris bendera perintah, misalnyaTerima kasih kepada Ilmari Karonen karena mencukur 3 byte dari solusi asli saya, yaitu:
Ini, serta solusi 37-byte yang lebih pendek di atas, adalah semua variasi sederhana dari quine berikut, yang pertama kali saya lihat di salah satu postingan Ilmari lainnya :
Karena semua yang saya tambahkan dalam solusi asli saya adalah satu
while
lingkaran, dia benar-benar layak mendapatkan sebagian besar kredit. :-)sumber
$_=q{say"\$_=q{$_};eval"while 1};eval
atau$_=q{{say"\$_=q{$_};eval";redo}};eval
akan lebih pendek beberapa byte. ($_=q{say"\$_=q{$_};eval";eval};eval
Akan lebih pendek lagi, tapi saya curiga akhirnya akan kehabisan tumpukan.)print
alih-alihsay
).Brainf *** (SMBF) modifikasi diri , 14 byte
Baris tambahan
\n
harus berupa literal, Unix, baris baru (kode ASCII 10).Penjelasan:
Kode memindahkan pointer ke paling kiri kode sumbernya, lalu mencetak semuanya, termasuk baris baru (dua kali b / c dari aturan). Lingkaran berlanjut.
sumber
\r
?\n
adalah baris baru, dan kode ASCII 10, jadi dump hex-kode sumber akan memiliki nilai0A
untuk byte itu. code.cside.com/3rdpage/us/newLine.html\n
umumnya dihitung sebagai 2 karakter, dan 2 byte dalam kode Anda. Saya mengetik seperti ini agar mudah dibaca, karena pemformatan tidak berfungsi dengan baik untuk menunjukkan baris kosong di akhir kode sumber saya. Jadi saya harus menentukan bahwa itu SATU byte, bukan dua.\n
selalu merupakan karakter tunggal, disebut linefeed . Sebuah baris baru , bagaimanapun, adalah urutan byte bergantung pada platform./
"Solidus", dan saya tidak tahu siapa yang tahu. "Newline" dimulai dengann
, dan itulah karakter pelarian, jadi saya menyebutnya. Ini lebih dekat ke "umpan baris" daripada "carriage return".PowerShell, 143 Bytes
Didasarkan pada quine Rosetta Code PowerShell , saya cukup yakin ini bukan yang sesingkat mungkin. Pemformatan penggantian string di PowerShell sangat menjengkelkan untuk ini, karena pembatas yang sama untuk tempat penggantian
{}
juga membatasi blok kodewhile{}
, jadi kita harus menggunakan[char]
casting, yang membengkokkan banyak kode.sumber
Underload, 25 byte
Pertama kali saya mencoba sesuatu seperti ini dan saya tidak yakin apakah mengikuti semua aturan karena beberapa baris. Baris baru itu agak menyakitkan.
sumber
Befunge ,
3020 byteVariasi dari befunge quine populer yang mencetak baris baru dan muncul -1 pada tumpukan jika itu menyelesaikan garis.
Sayangnya, Befunge mendapat kata-kata kasar ketika melakukan sesuatu dalam satu baris. Saya mencoba untuk menghapus semua launchpads (
#
) yang saya bisa, tetapi beberapa harus dibiarkan masuk untuk melewati perintah tertentu (seperti,
).Perubahan:
30-20 -> mengubah quine dasar menjadi custom yang saya buat yang menggunakan input string. Dengan cara ini, percabangan jauh lebih mudah.
Tua:
Saya pikir ini tidak optimal, tetapi masih bisa diterima untuk saat ini.
sumber
98+2/
: <, + 55, + 2g1_ #!, #: <"-1g0:+5<>:#,_1"
K, 30 byte
sumber
R, 34 byte
untuk memanggil dari baris perintah sebagai berikut:
sumber
> <>,
3129 byteModifikasi sederhana dari quine> tradisional > .
Untuk menjalankan, tempel di sini , klik 'Kirim', lalu 'Mulai' (berjalan tanpa animasi tidak berfungsi). Jangan ragu untuk meningkatkan kecepatan eksekusi.
sumber
"ar00gc0.0+feooooooooooooooo|
lebih pendek dua byte.Python 2, 48 byte
sumber
GolfScript, 16 byte
Ini akhirnya tampak seperti entri CJam Martin Büttner . Fitur yang menarik adalah bahwa, ternyata, cara terpendek untuk menambahkan
".do"
blok ketika dicetak adalah dengan menugaskannya ke terminator garisn
. (Tentu saja, kita juga perlu memasukkan baris baru yang sebenarnya dalam string, untuk mengganti yangn
biasanya berisi.) String yang sama (menjadi benar dalam GolfScript) juga dibiarkan di tumpukan agardo
loop terlepas, memastikan bahwa loop berjalan selamanya.sumber
BASH, 76 byte
Tidak bisa menolak, terutama dengan PowerShell di sini :)
Spasi putih penting untuk salinan EXACT.
sumber
Javascript (ES6), 64
Atau (juga 64)
sumber
arguments.callee
tidak ada dan melempar kesalahan.!
alih - alih melampirkan tanda kurung dan meletakkan fungsi eksekusi setelah loop untuk menghindari kebutuhan untuk loop tubuh titik koma yang akan menghemat (saya pikir) 4 byteMikroskrip , 22 byte
Berdasarkan Quine dari artikel Esolangs:
"fCqxah"fCqxah
. Mengeksploitasi fakta bahwa bahasa secara otomatis menambahkan kawat gigi penutup sesuai kebutuhan, yang tanpanya ini akan menjadi dua byte lebih lama.sumber
Batch, 10 (+ 4 untuk panjang nama file)
Tidak yakin apakah ini memenuhi syarat karena dua alasan:
Kode (untuk program bernama q.bat):
sumber
echo on&&%0
walaupun saya takut untuk mencobanya.echo on&&%0
tidak berfungsi.%0
ditampilkan sebagai diperluas dalam output, dan windows (7, 32 bit, berjalan dalam VM) mengakhiri semuanya dengan sangat cepat..bat
bagianCeylon ,
210208 byteTentu saja ini tidak akan memenangkan apa pun ...
Asli:
shared void u(){value q="\"\"\"";value t="""shared void u(){value q="\"\"\"";value t=""";value b="""while(true){print(t+q+t+q+";value b="+q+b+q+";"+b);}}""";while(true){print(t+q+t+q+";value b="+q+b+q+";"+b);}}
Saya memodifikasi Quine saya dari dua hari yang lalu dengan menambahkan
while(true){...}
loop, jadi saya datang dari 185 byte dari Quine polos ke 210 (saya tidak perlu lagi karakter baris baru). Tapi kemudian saya menemukan bahwa satuwhile(1<2){...}
loop bahkan lebih pendek dua byte:shared void u(){value q="\"\"\"";value t="""shared void u(){value q="\"\"\"";value t=""";value b="""while(1<2){print(t+q+t+q+";value b="+q+b+q+";"+b);}}""";while(1<2){print(t+q+t+q+";value b="+q+b+q+";"+b);}}
(Ceylon tidak memiliki
for(;;)
loop seperti Java, dan kawat gigi juga diperlukan untuk loop ini.)sumber
PowerShell,
132107 BytesDidasarkan dari Rosetta Quine (Sama seperti @AdmBorkBork) meskipun tidak menggunakan format untuk penggantian string ... mungkin beralih ke loop untuk dan menggunakan format akan lebih baik?
Saya yakin jika AdmBorkBork kembali mereka akan mengalahkan ini banyak: P
EDIT Menemukan loop dan penggantian, semua berkat pendahulu saya :)
Usaha lama:
sumber
Ruby,
4139 byteModifikasi salah satu quines Ruby ditemukan di sini .
sumber
Java 10, 194 byte
Penjelasan:
Cobalah online (waktu habis setelah 60 detik).
quine -part :
s
berisi kode sumber yang tidak diformat.%s
digunakan untuk memasukkan String ini ke dalam dirinya sendiri dengans.format(...)
.%c
,%1$c
dan34
digunakan untuk memformat tanda kutip ganda.s.format(s,34,s)
menempatkan semuanya bersama-samaBagian tantangan:
for(;;)
digunakan untuk loop tanpa batas.System.out.println(...)
digunakan untuk mencetak dengan mengikuti baris barusumber
Funky , 29 byte
Cobalah online!
sumber
RProgN 2 , 7 byte
Cobalah online!
sumber
Jelly , 14 byte
Cobalah online!
sumber
Pyth, 11 byte
Coba di sini!
sumber
Brachylog , 16 byte
Anda tidak dapat mencobanya secara online , tetapi saya telah memverifikasi bahwa itu berfungsi pada instalasi saya.
Brachylog , 18 byte
Cobalah online!
Diadaptasi dari versi alternatif quine ini , dengan hack backtracking saya awalnya dirancang untuk bogosort dari semua hal. Menghabiskan dua byte pada
~n
karenaẉ
(cara biasa untuk mencetak dengan baris baru) menyentuh beberapa masalah aneh dengan pengkodean karakter pada TIO, dan baris baru yang sebenarnya dimasukkan ke dalam string literal akan dicetak~k
sebagai\n
.Karena
w₁
mengambil input sebagai daftar[string to be formatted, formatting arguments]
, membungkus string dalam daftar dengang
kemudian menyatukannya dengan dirinya sendirij
memungkinkan untuk diformat dengan dirinya sendiri. Dan karena tidak ada input yang diberikan ke program, variabel input yang secara implisit hadir pada awal program dapat mengambil nilai apa pun, sehingga dapat dibatasi ke salah satu dari daftar tak terhingga banyaknya yang berisi"∋~kgjw₁⊥~n"
sebagai elemen, membuat satu titik pilihan untuk mundur ke saat setelah mencetak sumbernya program hits⊥
.sumber
Python 3.6,
4843 byte.-5 byte terima kasih kepada @ Jo King
sumber
%r
untuk menghemat melarikan diri'
itu. 43 byteGol> <> , 10 byte
Cobalah online!
Ini mungkin bisa diturunkan lebih banyak
sumber