Tulis program dengan panjang n yang menampilkan program lain yang panjangnya adalah angka Fibonacci berikutnya setelah n. Program baru harus melakukan hal yang sama - output program lain yang panjangnya adalah angka Fibonacci berikutnya, dll.
N itu sendiri (panjang program asli) tidak harus menjadi angka Fibonacci, meskipun alangkah baiknya jika itu.
Kode terpendek menang.
Tidak diperlukan sumber daya eksternal, ASCII saja, kompiler / juru bahasa gratis diperlukan.
Jika output Anda berakhir di baris baru, itu juga dihitung.
code-golf
quine
fibonacci
code-generation
aditsu berhenti karena SE adalah JAHAT
sumber
sumber
int
atauBigInteger
)Jawaban:
CJam,
2623Saya baru saja mencoba dengan bahasa Anda.
9 adalah
(22*0.618 + 0.5 - 1)/1.618 + 1
.Itu menghitung panjangnya sendiri
*1.618
daripada berulang kali menambahkan dua angka. Di versi pertama, itu akan mengisi output sebelum{
suka1)))))))))
, yang menghitung karakter itu sendiri. Katakan hasilnyan
. Panjang total adalahn+22
, dan panjang baru sebelumnya{
harus(n+22)*1.618-22
bulat. Perkecil satu per satu untuk menghitung jumlah)
. Maka kira-kira akan sama dengan(n+8)*1.618
.Versi yang lebih lama:
Angka 14 adalah
24*0.618 + 0.5 - 1
.sumber
Python 2, 160 byte
Ini adalah quasi-quine sejati; tidak membaca sumbernya sendiri, tetapi menghasilkannya. Output pertama (memiliki baris baru):
Kedua:
Edit: Ups. Lupa untuk mengubah string ketika saya mengubah dari
;
s ke1
s, jadi output kedua mengeluarkan titik koma tambahan (yang Python tidak mendukung). Tetapsumber
CJam,
4131 byteCobalah online.
Keluaran
Bagaimana itu bekerja
sumber
Python - 89
Hitungan karakter sempurna saya hilang . ; _; Terima kasih kepada TheRare untuk menunjukkan hal baris baru dan Quincunx untuk menyarankan saya menggunakan Python 2, mengurangi 2 karakter.
EDIT : Sekarang hanya menggunakan lebih banyak
#
s bukan1
s; 12 karakter lebih pendek.EDIT 2 : 94 chars! Menghilangkan beberapa pengulangan. >: 3
EDIT 3 : Alternatif repr lebih pendek untuk Python 2.
EDIT 4 : Output adalah karakter yang lebih pendek sekarang.
EDIT 5 : Penggunaan
%r
untuk mempersingkat itu diambil dari jawaban atas pertanyaan lain oleh @primo.EDIT 6 : Lebih pendek. : D
Ini versi Python 3:
Jawaban ini mirip dengan yang ditulis oleh @Quincunx.
sumber
print
selalu menambahkan baris baru, kecuali jika Anda menentukanend=''
argumen.s,a,b="s,a,b=%s,%i,%i;o=s%%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'",89,144;o=s%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'
JavaScript, 94
Berdasarkan yang terkenal JavaScript Quine yang , ini mengembalikan fungsi yang hampir sama, hanya diikuti oleh jumlah garis miring, sehingga jumlahnya mencapai 144 yang merupakan angka Fibonacci berikutnya setelah N. Dan seterusnya ...
N bukan angka Fibonacci, tapi itu hanya "baik untuk dimiliki".
sumber
p = (my answer)
dan kemudianp = eval(p)
beberapa kali, dan mendapat sampai 196418 ... setelah itu waktu pemrosesan adalah> 1sec jadi saya berhenti pengujian: P Tapi saya kira itu bisa terus lebih.p=eval(p)
, periksa jugap.length
. Setelah mencapai 987, saya mendapatkan panjang 1598, bukan angka Fibonacci.Mathematica
Ini adalah implementasi yang sangat mudah (yaitu tidak ada kebingungan di sini). Ini adalah fungsi anonim yang mengembalikan dirinya dengan sedikit padding untuk mencapai panjang yang benar. Mathematica adalah homoikonik: kode dan data keduanya direpresentasikan sebagai ekspresi Mathematica, yang membuatnya mudah untuk memodifikasi / menghasilkan kode secara langsung. Ini juga berarti bahwa jumlah karakter bukan ukuran alami dari panjang kode. Ukuran epxression ( "jumlah daun" ) adalah. Versi ini didasarkan pada jumlah daun sebagai ukuran panjang kode.
Jika kita menetapkan fungsi anonim ini ke variabel
f
(jadi saya bisa menunjukkan apa yang terjadi dengan cara yang dapat dibaca), dan terus memanggilnya 1, 2, 3, ... kali, setiap kali mengukur panjang nilai pengembalian, inilah yang kita mendapatkan:Mengenai persyaratan juru bahasa gratis: Mathematica gratis untuk Raspberry Pi. Kalau tidak, kode ini harus langsung ke port ke Matematika (open source) . Satu-satunya hal yang hilang dari Matematika adalah
InverseFunction
, yang dapat diganti seperti di sini (tapi saya malas :).sumber
LeafCount
tampak jauh lebih menarik daripada menggunakan jumlah karakter (yang akan menyiratkan manipulasi kode yang membosankan sebagai manipulasi string). :-) Saya tidak akan mengubahnya untuk menggunakan jumlah karakter, tapi saya bisa menghapusnya tanpa perasaan buruk jika Anda mau.Python 3.8 (pra-rilis) , 78 byte
Cobalah online!
sumber