Ini sangat menyenangkan! Namun dengan hanya tiga digit, kesenangan itu terlalu cepat berlalu. Tantangan ini serupa, tetapi kami akan terus bersenang-senang.
Tantangan
Cetak sebanyak mungkin Rasio Emas φ sebanyak mungkin. Rasio Emas didefinisikan sebagai angka yang memenuhi φ = (φ + 1) / φ dan 100 digit pertama diberikan oleh:
1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Tantangan ini bukan tentang komputasi φ! Ini tentang mencetak angka sebanyak mungkin tanpa menggunakan metode apa pun untuk melakukan itu dua kali. Jadi temukan sebanyak mungkin cara kreatif untuk mendapatkan angka Anda!
Batasan
Dengan sendirinya, mencetak angka φ akan menjadi terlalu sederhana, jadi inilah aturannya:
- Anda harus membuat angka secara berurutan dari kiri ke kanan , baik dengan mencetaknya sepotong demi sepotong atau dengan membangun string dari kiri ke kanan dan mencetaknya di akhir - Anda bahkan dapat menghasilkan array karakter digit dan kemudian bergabung dengan dan cetak, selama Anda melakukannya secara berurutan. Dalam aturan berikut ini, "cetak" dan "keluaran" dapat merujuk ke salah satu dari proses tersebut (mis. Jika Anda sedang membangun string, dan string berisi
1.6
yang dianggap1.6
sudah dicetak). - Untuk kode Anda, Anda mendapatkan anggaran 15 karakter per digit . Periode tidak dihitung terhadap anggaran itu, tetapi harus dicetak juga. Perhatikan bahwa batasan hanya pada ukuran kode total: Anda dapat menggunakan lebih dari 15 karakter untuk setiap digit selama Anda tidak menggunakan lebih dari rata-rata. Bahkan, Anda dapat membangun "hutang" dalam karakter dan "melunasinya" nanti. Misalnya untuk mencetak
1.618
Anda memiliki 60 karakter. - Pustaka-standar termasuk / impor tidak dihitung terhadap ukuran kode. Tetapi Anda tidak dapat memberikan itu termasuk alias steno secara gratis!
- Anda tidak boleh menggunakan angka yang sedang Anda hasilkan, atau angka yang sudah Anda cetak. Misalnya
1
dapat muncul di kode sumber Anda, karena ini adalah digit pertama. Kode yang menampilkan8
dalam1.618
dapat menggunakan salah satu atau semua digit[0234579]
, tetapi tidak ada[168]
. Untuk tujuan ini, semua literal yang setara dengan satu digit diperlakukan sebagai digit itu . Jadi, jika bahasa Anda bisa mewakili9
karena'\t'
Anda tidak diizinkan menggunakannya di mana saja, di mana Anda tidak bisa menggunakannya9
. - Anda tidak boleh menghasilkan banyak digit sekaligus. Seharusnya mungkin untuk dengan jelas membagi kode Anda menjadi potongan-potongan yang menghasilkan satu digit waktu.
Anda tidak harus mengacu pada built-in fungsi, matematika operator / string / boolean / bit-bijaksana, variabel atau konstanta yang telah Anda gunakan dalam kode yang dihasilkan digit sebelumnya.Pengecualian adalah konversi bilangan bulat ke string, penggabungan string dan fungsi pencetakan yang mungkin Anda perlukan untuk setiap digit. Perhatikan bahwa tidak masalah dengan nama mana Anda merujuk ke built-in apa pun: hanya karena Anda alias built-in
PI
untuk keduanyap
danq
tidak berarti Anda bisa menggunakannyap
sekali danq
sekali. Demikian juga, Anda yang diizinkan untuk menggunakan nama dua kali jika mengacu pada dua berbeda built-in, seperti talilength
dan berbagailength
.Jika bahasa pemrograman Anda tidak memiliki fungsi gunakan penilaian terbaik Anda tentang apa yang setara akan - misalnya untuk bash scripting, memanggil program lain harus mengikuti aturan yang dikenakan pada fungsi
- Kiriman Anda harus ditulis dalam satu bahasa. Jadi, jangan mengeksekusi juru bahasa lain untuk mendapatkan akses ke built-in bahasa itu juga.
Implikasi
Poin-poin berikut semuanya tersirat oleh aturan di atas, tetapi saya menambahkannya di sini untuk menghindari pertanyaan yang telah muncul di sandbox ::
- Anda tidak diizinkan untuk menimpa bagian dari output Anda dengan mencetak beberapa spasi mundur (biasanya
'\b'
) di antaranya. - Loop yang menghasilkan / menghasilkan banyak digit dilarang. (Namun, loop yang menghitung satu digit baik-baik saja.)
- Dilarang menggunakan versi yang dikaburkan
(1 + √5)/2
atau membagi angka Fibonacci untuk mendapatkan lebih dari satu digit. - Anda tidak dapat menghitung ulang 10 digit dan menyimpannya dalam 10 variabel dan kemudian merujuknya saja, karena referensi variabel tersebut tidak ' menghasilkan digit - kode yang mengisi variabel, jadi ini merupakan pelanggaran aturan 6.
- Bahkan, Anda tidak dapat menggunakan kembali hasil sebelumnya (atau hasil antara), karena itu berarti dua digit akan berbagi kode dihasilkan .
- Jika tidak, Anda dapat menggunakan segala cara apa pun (yang tidak harus murni matematis) untuk menghasilkan angka. (Dan kamu harus!)
- Bahkan tidak perlu menghitung apa pun, jika Anda dapat menarik digit yang benar dari berbagai tempat menggunakan perpustakaan standar Anda.
- Anda dapat menggunakan operator beberapa kali sambil menghasilkan satu digit, begitu
2+2+2
juga permainan yang adil untuk menghasilkan yang pertama6
(meskipun itu bukan yang terpendek). - Anda dapat menggunakan literal apa pun sesering yang Anda inginkan, karena konstanta itu tidak ada. Jadi, selama Anda tidak harus mencetak
5
, Anda dapat sebanyak mungkin5
dalam kode yang Anda inginkan. - Anda tidak dapat membuat hardcode output, karena itu akan melibatkan menggunakan digit yang Anda outputkan.
Singkatnya: jangan gunakan metode apa pun untuk menghasilkan digit dua kali dan jangan gunakan digit yang saat ini Anda hasilkan atau yang sudah dicetak.
Jika Anda menemukan celah yang memungkinkan Anda untuk mendapatkan skor (kuasi-) tanpa batas, tolong jangan merusak tantangan dengan mengeksploitasinya, tetapi beri tahu saya agar saya dapat melihat apakah celah itu dapat diperbaiki tanpa merusak apa pun.
Mencetak gol
Program yang mencetak angka tertinggi dengan benar akan menang. Dalam kasus seri, kode yang lebih pendek akan merusak seri.
Harap tambahkan versi komentar yang tidak diklik yang mengidentifikasi bagian mana dari kode Anda yang menghasilkan digit mana.
PS: Jika ada yang mengalahkan 100 digit di atas, berikut ini ada beberapa lagi .
x = (x+1)/x
(atau x^2 = x+1
) (atau x^2-x+1
).