Spesifikasi Mathemania:
Setiap bagian dari kode Mathemania dimulai dengan angka 2
. Dari 2
, Anda dapat melakukan operasi berikut:
e
: Eksponensial. Default perintah ini adalah mengkuadratkan angka.f
: Faktorial. Default perintah ini menggunakan faktorial tunggal pada angka (using f on 2 = 2! = 2
).r
: Root. Default perintah ini adalah rooting kuadrat angka.c
: Fungsi langit-langit.l
: Fungsi lantai.
Untuk menghasilkan angka di Mathemania, Anda harus merangkai perintah-perintah ini, yang dilakukan dari kiri ke kanan pada nomor tersebut 2
.
Contoh:
ef = (2^2)! = 4! = 24
rl = floor(sqrt(2)) = floor(1.4...) = 1
er = sqrt(2^2) = sqrt(4) = 2
efrrc = ceil(sqrt(sqrt((2^2)!)))
= ceil(sqrt(sqrt(24)))
= ceil(sqrt(4.89...))
= ceil(2.21...)
= 3
Perintah e
, f
dan r
dapat diubah dengan perintah Mathemania tambahan (yang juga dimulai dengan 2
angka "dasar") untuk menghasilkan eksponensial, faktorial, dan akar yang berbeda dengan menempatkan tanda kurung setelah fungsi yang diubah dan menempatkan perintah Mathemania di dalamnya.
Sebagai contoh, untuk mem-kubus angka daripada mengkuadratkannya, Anda dapat menempatkan perintah 3
setelah e
seperti:
e(efrrc) -> cube a number, "efrrc" = 3
CATATAN: untuk tujuan kita, perintah faktorial ( f
) dimulai dengan 2
sebagai faktorial tunggal. Jadi jika Anda melakukannya f(efrrc)
, itu akan dievaluasi menjadi faktorial ganda, bukan faktorial tiga.
Untuk n
-faktorial (mis. Faktorial ganda = 2-faktorial, tiga faktorial = 3-faktorial, dll.), Bilangan dasar dikalikan dengan angka yang n
kurang dari itu, dan n
lebih sedikit dari itu, dan seterusnya sampai angka terakhir tidak dapat dikurangi dengan n
tanpa menjadi 0
atau negatif.
Sebagai contoh:
7!! = 7 * 5 * 3 * 1 = 105 (repeatedly subtract 2, 1 is the last term as
1 - 2 = -1, which is negative)
9!!! = 9 * 6 * 3 = 162 (repeatedly subtract 3, 3 is the last term as
3 - 3 = 0, which is 0)
Untuk informasi lebih lanjut, lihat di sini .
Anda dapat memasukkannya di mana saja, dan itu akan diperlakukan oleh Mathemania sebagai fungsi tunggal:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
Anda juga diizinkan untuk bersarang di dalam satu sama lain:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Untuk penerjemah kode Mathemania, klik di sini (sorakan, @ BradGilbertb2gills!)
Tugas:
Tugas Anda adalah membuat program yang, ketika diberi bilangan bulat positif n
sebagai input, menghasilkan program Mathemania yang ketika dijalankan, kembali n
.
Namun, program Mathemania yang Anda hasilkan harus sekecil (golfed) mungkin, dan skor akhir Anda ditentukan oleh jumlah dari jumlah byte dalam program Mathemania yang dihasilkan dari sampel, yang merupakan bilangan bulat 10,000
untuk 10,100
. Skor terendah menang.
Aturan dan spesifikasi:
- Program Anda harus menampilkan program Mathemania yang valid untuk bilangan bulat positif, tetapi hanya angka-angka di antara
10,000
dan10,100
akan diuji. - Anda tidak diizinkan membuat program Mathemania yang tidak menghasilkan bilangan bulat. Jika Anda melakukannya, program Anda didiskualifikasi.
- Untuk perintah
e
,f
danr
, kode Mathemania di dalam fungsi-fungsi itu (misalnyae(efrrc)
, di manaefrrc
kode di dalam fungsi) harus mengevaluasi ke bilangan bulat positif di atas2
. Jika program Anda tidak mengikuti aturan ini, itu juga didiskualifikasi. - Program Anda harus mengembalikan program Mathemania untuk salah satu dari 101 bilangan bulat pengujian paling lama 30 menit dengan laptop modern.
- Program Anda harus mengembalikan solusi yang sama untuk bilangan bulat apa pun setiap kali dijalankan. Misalnya, ketika suatu program diberikan input
5
dan outputefrc
, itu harus menampilkan bahwa setiap kali input5
diberikan. - Anda tidak boleh membuat hard-code solusi apa pun untuk bilangan bulat positif.
- Untuk memaksimalkan potensi golf pada hasil Anda, program Anda harus dapat menangani bilangan bulat besar yang sewenang-wenang. Ini bukan persyaratan, meskipun semoga berhasil jika bahasa Anda tidak mendukung ini.
Ini adalah metagolf , jadi skor terendah menang!
ef
misalnya, apakah kode diizinkan untuk "melewati" dan hanya menampilkan hasilnya sebelumef
operasi?Jawaban:
Python 3.5, Skor ??
Sampai sekarang saya tidak memiliki output untuk semua 101 input, tetapi begitu saya menjalankan program untuk semua kasus uji saya akan memperbarui dengan skor saya.
Selain itu, saya tidak dapat memverifikasi output dari beberapa kasus uji yang saya coba karena ukuran angka belaka, dan pada saat itu interpreter online @ BradGilbertb2gills habis. Semoga semua output bekerja.
sumber