The Four merangkak puzzle adalah teka-teki matematika rekreasi populer yang melibatkan menggunakan tepat empat 4s (dan tidak ada nomor lain) dan satu set didefinisikan operasi untuk mencapai setiap nomor dari 0 sampai maksimum yang diberikan.
Dalam versi ini, satu-satunya operator berikut diizinkan:
- Simbol pengelompokan apa pun dapat digunakan
- Tambahan (
+
), Pengurangan (-
), Perkalian (*
), Divisi (/
) - Factorial (
!
), Fungsi Gamma (Γ
) - Eksponensial (
^
), akar kuadrat (√
) - Concatenation (mis.
44
Adalah dua4
s) - Titik desimal (mis.
4.4
Adalah dua4
s), Overbar (mis..4~ = 4/9
)
Pesanan operasi standar berlaku.
Program Anda harus menghasilkan, diberi input antara 0 dan 100 inklusif, solusi yang tepat untuk input itu. Jika program mengeluarkan solusi yang tidak valid untuk input apa pun, program itu tidak valid.
Misalnya, dengan input 0
, program Anda mungkin menghasilkan 44-44
.
Penggunaan modul eksternal tidak diperbolehkan. Hanya _.4~
diizinkan untuk operator overbar - yaitu, hanya satu yang 4
bisa berada di belakang titik desimal.
Ini adalah kode golf, sehingga solusi terpendek menang.
Sunting : Agar lebih jelas, program harus mengeluarkan satu set operasi di atas yang diterapkan tepat empat 4
s - tidak lebih, tidak kurang. Juga, .4 = 4/10
adalah istilah yang valid, dan dianggap hanya menggunakan satu 4
.
sumber
!(4)
bukan(4)!
)?Jawaban:
GolfScript (129 karakter *)
Waktu berjalan adalah dalam urutan 4 menit pada PC saya. Percepatan moderat dapat diperoleh dengan mengorbankan dua karakter dengan menambahkan operasi keunikan
.&
segera setelah%+
.Saya menggunakan ekspresi pra-kode untuk
1
,2
,4
,6
,24
,120
, dan44
, dan membangun beristirahat dari orang-orang hanya menggunakan+
,*
dan-
. Dengan cara ini saya tidak perlu melakukan aritmatika non-integer dalam program itu sendiri. Saya sudah mencoba untuk mendapatkan ekspresi yang lebih sederhana dengan menempatkan nilai pra-kode yang lebih sederhana di awal.Semua dari nilai-nilai yang diperlukan † , dan itu perlu untuk mendukung kedua arah dari pengurangan (
complex_expression - simple_expression
dan sebaliknya). Anda juga perlu memasukkan beberapa operasi yang memerlukan tanda kurung (khusus,a*(b-c)
), jadi saya mengelompokkan semua subekspresi tanpa pandang bulu.* Saya menghitung poin kode Unicode dengan asumsi program dikodekan UTF-8, dan menyikat fakta bahwa kecuali Anda menggunakan Ruby versi terbaru untuk menjalankan interpreter, itu benar-benar memperlakukannya sebagai karakter ASCII. Jika Anda sangat khawatir tentang ini, gunakan
G
untuk Gamma danv
untuk sqrt.† Nah, ketat saya bisa menghapus
44
dalam pertukaran untuk11
sebagai44/4
dan71
sebagai√(Γ√4+(ΓΓ4+Γ√4)!)
, tapi itu bukan trade-off yang baik.sumber
Python 155 byte
Tiga byte pertama (
\xEF\xBB\xBF
) adalah tanda urutan byte UTF-8, meskipun file tersebut harus disimpan dalam format ANSI. Theû
danâ
akan diinterpretasikan sebagai√
danΓ
masing - masing dalam cp437 dan cp850 , yang seharusnya bekerja pada hampir semua kotak Windows.Runtime sekitar 0,4 detik di komputer saya.
Contoh penggunaan (beri nama file
four_fours.py
):Hasil untuk 0..100 . Karena cara hash iterasi, ia lebih suka menggunakan
4!
sesering mungkin.Sunting: menyimpan sejumlah byte dengan menambahkan
Γ√4 = 1
, yang menghilangkan kebutuhan untuk pengelompokan apa pun, dan dengan menghapus√4 = 2
, yang tidak lagi diperlukan.sumber
J,
175161 karakterFormat yang diperiksa adalah di
(v op v) op (v op v)
manav={0.4 4/9 1 2 4 6 24}
danop={+ - * /}
hasil 0,100 penuh
sumber
.4
angka yang valid untuk game ini.