Anda harus menulis program atau fungsi yang menerima bilangan bulat positif N
sebagai input dan mencetak N
karakter pertama dari kode Anda. Jika N
lebih besar dari panjang kode Anda, Anda harus melanjutkan menampilkan kode Anda secara siklis.
Membaca kode sumber Anda dengan cara apa pun dan membaca dari file, stdio, dll. Tidak diizinkan.
Contohnya
(dengan asumsi kode Anda adalah yourcode
)
Input => Output:
5
=> yourc
10
=> yourcodeyo
22
=>yourcodeyourcodeyour
Klarifikasi
Panjang program Anda minimal 1 byte.
Jawaban:
Python 2, 61 byte
Cobalah online!
sumber
> <> , 49 byte
Setengah kode mengkonversi input dari string ke int. Jika kita diperbolehkan menggunakan titik kode dari char tunggal yang dibaca dari STDIN, maka program ini akan jauh lebih pendek dengan 21 byte:
Penjelasan
Saya akan menggunakan program kedua untuk penjelasannya.
'
mulai string parsing, mendorong setiap char hingga kutipan penutupan ditemukan. Karena sisa baris tidak memiliki'
kuotasi, setiap karakter kecuali inisial'
didorong ke stack.Tapi> <> adalah bahasa 2D toroidal, jadi setelah baris selesai pointer instruksi kembali ke awal, memukul
'
lagi dan berhenti mengurai string. Hasilnya adalah kami telah mendorong semua yang diperlukan kecuali kutipan awal, yaitu'
adalah ASCII 39, jadi kami mendorong kutipan awal dengan mendorong3d* = 3*13 = 39
. Kami kemudian menggeser tumpukan ke kanan (}
) dan membalikkan (r
), memberikan:Sekarang kita semua siap untuk mulai mencetak.
i
membaca dalam char input, tetapi> <> karakter pada dasarnya adalah bilangan bulat. Dalam program pertama,i
diganti dengan loop yang mengubah string digit dari STDIN menjadi integer.Kami kemudian menjalankan loop berikut untuk mencetak karakter N pertama:
sumber
CJam,
34 1716 byteIni bisa bermain golf banyak ..
Perluasan kode :
Akhirnya, semua yang ada di stack dicetak ke STDOUT secara otomatis
Cobalah online di sini
sumber
Python 2, 117 byte
Life protip: jangan dieksekusi
list(itertools.cycle(x))
. Untuk beberapa alasan, saya tidak bisa membayangkan mengapa, itu membuat penerjemah jatuh.sumber
itertools.cycle()
adalah generator tanpa batas, jadi kecuali komputer Anda memiliki memori tak terbatas, Anda akan mengalami masalah :)JavaScript (ES6),
655250474139Menggunakan ES6
repeat()
untuk mengkloning kode, lalu memotong. Menggunakan hardcoded length.Versi lama (50):
Menciptakan fungsi
q
, mengambil satu parameter.Ini meringkas teks fungsi, dan secara rekursif memanggil fungsi jika
n
lebih besar dari panjang teks. Jika tidak, ia mengembalikan substring dari teks.Versi Non ES6 (65):
sumber
.repeat
, untuk persyaratan siklus hanyalah kejeniusan.repeat()
memungkinkan saya untuk memotong banyak, jadi saya menggunakannya sebagai gantinya./39+1
? kenapa tidak tinggalkan saja tali yang cukup panjang?q=n=>('q='+q).repeat(n).slice(0,n)
berfungsi dengan baik di firefoxJ - 24 char
Membawa argumen integer positif tunggal dan mengeluarkan string.
J tidak memiliki trik referensi diri, jadi kami lakukan saja dengan cara quine. Dijelaskan oleh ledakan:
$
Operator dyadic dalam J secara siklis mengambil item dari argumen kanannya agar sesuai dengan dimensi yang ditentukan di sebelah kiri. Ketika dimensi adalah angka tunggal, ini adalah daftar karakter 1D sederhana, jadi kami melakukan persis apa yang ditanyakan.Cobalah sendiri di tryj.tk .
sumber
quote
kata kerja?''''&,@(,&'''')@(#~ >:@(=&''''))
, atau dalam bahasa Inggris, "gandakan'
karakter apa pun , lalu tambahkan satu ke awal dan akhir." J menggunakan string literal seperti Ada sehingga ini lolos dari string.k2 - 7 char
Dalam bahasa Inggris, ini adalah fungsi dengan argumen
x
yang definisinya adalah "x
take string self"._f
) adalah fungsi terdalam yang sedang dieksekusi. Ini dia fungsinya{x#$_f}
.$
) mengubah argumennya menjadi string. Dalam kasus fungsi, ini menciptakan string dengan definisi asli fungsi.#
) mengambil item - item arg kiri dari daftar di arg-kanan . Dalam kasus string, item adalah karakter, jadi ini melakukan persis apa yang kita inginkan.Ini tidak akan berfungsi di sumber terbuka Kona, karena tampaknya membuat lubang hitam yang memakan semua upaya untuk menggunakannya sebagai argumen untuk apa pun. Saya tidak yakin dengan semantik k3 yang tepat tetapi mereka mungkin tidak lebih ramah.
Di Q, ini
{x#string .z.s}
dan di k4{x#2_$.z.s}
. Kita harus menggunakan2_
untuk menjatuhkan dua karakter awal dalam k4, dengan alasan hanya seorang ibu yang bisa mencintai.sumber
Ruby,
66 6463 bytePenggunaan fungsi yang sama untuk menghindari panggilan
gets
sedikit lebih lama (81 byte):Versi Lambda yang sama adalah 69 dan 65 byte:
sumber
.cycle
rapi, saya harus ingat itu. :) Anda mungkin dapat mempersingkat.join
ke*''
.String#format
alih-alih interpolasi:eval s="$><<('eval s=%p'%s).chars.cycle.take(gets.to_i)*''"
Mathematica, 65 byte
Semua ruang diperlukan untuk menjadikan ini quine yang tepat, termasuk yang tertinggal. Ini adalah fungsi murni, yang dapat Anda gunakan sebagai berikut:
yang mencetak
Sayangnya, menerapkan
ToString
ke fungsi tidak menghasilkan persis seperti yang Anda memasuki fungsi, jadi saya tidak bisa mempersingkat ini dengan menghapus spasi, memperpendek#1
ke#
atau menggunakan notasi prefix untuk panggilan fungsi.sumber
#
menjadi#1
"?MATLAB,
319141 karakterSaya berhasil memeras beberapa byte dari yang asli:
sumber
JavaScript, 34 byte
Fungsi rekursif yang mengulang kode
n
kali, lalu mengiris hasilnya.sumber
Japt , 2 byte
Cobalah online!
Yang pertama
î
adalah metode angka yang mengambil satu parameter, dan mengulanginya dengan panjangn
. Karena itu adalah metode pertama,n
menjadi input. Yang keduaî
dilemparkan ke dalam string, dan diulang.Ini transparan ke:
n.î("î")
-> Ulangi"î"
sampai mencapai panjangn
Solusi 8 byte
Cobalah online!
îQi"îQi"
transparansi ken.î(Qi"îQi")
sumber
R, 203 byte
Ketika N = 203, kode sepenuhnya dicetak sendiri.
Ketika N = 50, kode akan terpotong sendiri.
Ketika N = 300, kode ini mengulangi sebagian.
sumber
(f=function(N){s=paste0("(f=",paste0(capture.output(f),collapse=""),")");cat(rep(s,N%/%nchar(s)),substr(s,1,N%%nchar(s)),sep="")})(200)
Matlab (57)
1
Indeks awal (bukan0
) pada baris terakhir adalah karena fungsi Matlabtype
memperkenalkan umpan baris awal, yang harus dihapus. Terima kasih kepada Dennis untuk koreksi (indeks terakhir) dan untuk sarannya (nnz
lebih pendek darinumel
).sumber
-1
). - Saya pikir Anda juga dapat menghapus baris kedua dan swap keluarnumel
untuknnz
.type f
bagian itu berbenturan dengan persyaratan Membaca kode sumber Anda dengan cara apa pun dan membaca dari file, stdio, dll tidak diizinkan ?type
mungkin mengakses hard disk. Apakah Anda pikir saya harus menghapus jawabannya?mod
Ngomong - ngomong, aku mencuri ide -indeksmu)Unary (versi 1-8) , 23855 byte
Mengambil input sebagai unary dari '1's, dan kodenya 23855' 1's (
,[.,]
)sumber
Japt ,
4028 bytePertama kali menulis quine, jadi ini mungkin bisa dipersingkat sedikit. Di sisi lain, saya cukup senang bisa bekerja sama sekali.
Leading newline disengaja, baris kedua adalah data dan sisanya membuka bungkus data, kemudian mengulangi seluruh string yang dihasilkan hingga mencapai panjang yang sama dengan input.
Mencukur 12 byte kekalahan berkat Oliver .
Cobalah online!
sumber
tTU
dengan¯U
dan Anda dapat menggunakanî
di tempatp
dengan bergerak ke depan: Cobalah onlineîR+Q+V+Q+R+V
harus bekerja dengan baik.î
, itu sangat berguna. Terima kasih banyak!C ++, 305
Penjelasan Selain dari karakter pelarian semua karakter lain dicetak. Metode utama adalah di dalam string s dan di dalam main string penuh dibangun dan dicetak ke stdout
sumber
Pyth,
151314 byteCobalah online!
Versi modifikasi dari standar Pyth quine .
sumber
<jN*Q]"<jN*Q]<jN*Q]"<jN*Q]<jN
salah?<jN*Q]"<jN*Q]"
sepertinya berhasil?Hoon , 185 byte
Setel
f
ke kode program sebagai kaset, tetapi dengan "k" untuk dirinya sendiri. Pisahkan rekaman itu pada karakter 5, mengatur variabel[p=left q=right]
. Mengelas stringp
, string aslif
, dan semuanya setelah karakter pertamaq
. Ulangi string itun
kali, lalu kembalikann
karakter pertama itu.Melakukan ini sedikit terhambat oleh stdlib Hoon yang tidak memiliki fungsi format atau temukan-dan-ganti ... Juga, saya tidak yakin mengapa kita perlu pemeran lain setelah
scag
, karena itu harus menyimpan informasi jenis. Begitu seterusnya.sumber
Jstx , 7 byte
Cobalah online!
sumber
Perl 5 dengan
-pa
, 48 byteCobalah online!
sumber
Gol> <> , 12 byte
Cobalah online!
Bagaimana itu bekerja
k
dapat membungkus beberapa kali, jadi kami tidak perlu menduplikasi seluruh tumpukan tergantung pada input.sumber
SmileBASIC,
10666 bytesumber
KSFTgolf - 4 karakter, 6 byte
KSFTgolf jika saya mencoba mendesain kode untuk golf. Saya sudah banyak mengubahnya, jadi ini mungkin seharusnya tidak benar-benar masuk hitungan.
sumber
☃
kode Anda , yang benar-benar terlihat seperti sesuatu yang telah secara khusus dilakukan untuk tantangan ini (karena tidak ada blok kode berbasis unicode lain di seluruh file Anda).Stax , 24 byte
Jalankan dan debug itu
Adaptasi
"34bL"34bL
quine.sumber
J, 41 Bytes
Sekarang itu asah otak!
Penjelasan:
Contoh:
sumber
Ly , 28 byte
Cobalah online!
sumber
Java 10,
193176 bytePenjelasan:
Cobalah online.
quine -part :
var 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-sama.Bagian tantangan:
for(int i=n;i>n;i/=176)
loopceil(n/176)
kali, di mana176
panjang kode sumber.s+=s;
secara eksponensial meningkatkan ukuran String kode sumber. (ab
menjadiabab
;abab
menjadiabababab
;abababab
menjadiabababababababab
; dll.)s.subtring(0,n);
mengambiln
karakter pertama dari String.sumber
> <> ,
2219 byteCobalah online!
Mengambil input melalui
-v
flag.sumber
Stax , 8 byte
Jalankan dan debug itu
sumber