Latar Belakang
Teka-teki ini adalah variasi dari empat merangkak puzzle (itu sendiri topik pertanyaan masa lalu ). Seperti puzzle itu, tujuannya adalah untuk menemukan ekspresi matematika untuk bilangan bulat yang berbeda, hanya menggunakan empat digit dan operator matematika tertentu. Namun dalam kasus ini, angka yang diizinkan hanya 2, 0, 1 dan 5 . Masing-masing harus muncul tepat sekali dalam solusi dan dalam urutan yang benar. Secara mengejutkan banyak bilangan bulat dapat direpresentasikan dengan cara ini. Pemecah masalah disarankan untuk mencoba menyelesaikannya dengan tangan terlebih dahulu, karena ini anehnya menyenangkan.
Aturan
Konstanta dapat dibangun dari satu atau beberapa digit:
- Integer: mis. 2, 0, 15, dll.
- Desimal: misalnya .2, .01, 1.5, dll.
- Pengulangan desimal : mis. .2 ~ (= 0.222 ...), .15 ~ (= 0.1555 ...), 20.15 ~~ (= 20.1515 ...)
Operasi unary berikut diizinkan:
- Negasi unary: -x
- Root kuadrat: sqrt (x)
- Faktor integer: x!
Operasi biner berikut diizinkan:
- Operator aritmatika standar: x + y, xy, x * y dan x / y
- Eksponensial sewenang-wenang: x ^ y
- Akar sewenang-wenang: rt [x] (y) (= akar ke-x y)
Tugas
Program Anda harus mencetak ekspresi sebanyak mungkin dari bilangan bulat antara 0 dan 100, dan kemudian menampilkan jumlah ekspresi yang telah dihasilkan.
- Solusi harus dicetak dalam format n = [expr].
- Ekspresi harus menggunakan semua digit 2, 0, 1, 5, sekali masing-masing dalam urutan itu.
- Ekspresi harus dicetak menggunakan notasi yang dijelaskan di atas. Tanda kurung yang tidak perlu diizinkan tetapi tidak diperlukan, seperti halnya spasi putih. Urutan operator yang didahulukan adalah negasi unary, faktorial, eksponensial, perkalian / pembagian dan penambahan / pengurangan.
- Program tidak perlu mengembalikan solusi untuk semua angka. Program yang hanya menghasilkan 0 karena itu valid; namun, lihat bagian penilaian di bawah ini.
- Program harus berjalan dalam waktu kurang dari 15 menit di komputer modern.
Anda dapat menulis suatu program atau fungsi. Ekspresi harus dicetak ke STDOUT (atau alternatif terdekat). Jumlah ekspresi dapat dicetak ke STDOUT atau dikembalikan sebagai integer. Berlaku pembatasan standar kode golf.
Contoh output
0=2*0*1*5
10=20*1*.5
42=((2+0!)!+1)!/5!
100=20*1*5
4
Mencetak gol
Pembaruan : @orlp telah mencatat kesalahan dalam sistem penilaian. Lihat http://meta.codegolf.stackexchange.com/questions/5106/way-of-salvaging-two-zero-one-five-puzzle-challenge untuk diskusi tentang bagaimana atau apakah ini harus diperbaiki.
Solusi diberi skor pertama dengan jumlah ekspresi yang mereka hasilkan dan kemudian oleh panjang kode mereka dalam byte. Oleh karena itu, program 1000 byte yang menghasilkan 80 hasil akan mengalahkan program 100 byte yang hanya menghasilkan 79 (meskipun yang terakhir dapat dengan mudah diperluas untuk memasukkan hasil yang hilang).
Bagi mereka yang ingin target yang memotivasi, di bawah ini adalah batas bawah pada jumlah ekspresi yang dapat diwakili. Saya tidak berencana untuk mengirimkan entri, jadi mungkin menang dengan lebih sedikit!
Setidaknya 85 (dari 101), meskipun mungkin lebih tinggi.
Papan angka
Sebagai insentif tambahan, berikut adalah ringkasan perkembangan skor. Setiap kali Anda mengalahkan skor tertinggi, jangan ragu untuk menambahkan diri Anda ke atas meja (atau meminta orang lain melakukannya).
- 0 ekspresi, 1 byte (Pyth): implementasi yang hanya menghasilkan 0
Jawaban:
85, ~ 2400 byte
Saya agak sedih ini adalah tantangan kode golf, karena saya merasa bahwa semua upaya saya sebelumnya sudah tidak berguna sekarang karena saya akan memposting ini:
Dari sini, itu hanya tantangan kompresi. Mungkin saya akan bersaing nanti, mungkin saya tidak akan. Bagi saya sebagian besar kesenangan adalah tantangan untuk menemukan formula terbanyak.
Petunjuk bagi mereka yang kesulitan menulis solver - runtime seharusnya tidak menjadi masalah. Jika Anda memiliki terlalu banyak rumus untuk diperiksa, Anda perlu heuristik yang lebih baik untuk membuang solusi dan duplikat yang tidak ada harapan. Kode yang saya tulis untuk menghasilkan menjalankan di atas dalam ~ 5 detik pada Python.
sumber