Di RPG meja bernama Pathfinder, ada fitur yang dapat diambil karakter yang disebut Sacred Geometry , yang memungkinkan karakter yang memilikinya untuk mengimbangi mantera mereka dengan imbalan melakukan beberapa matematika: untuk menggunakannya, karakter menggulirkan sejumlah enam sisi dadu sama dengan peringkat mereka dalam keterampilan tertentu, berkonsultasi dengan tabel berdasarkan tingkat mantera mereka untuk menentukan tiga bilangan prima yang merupakan "Perdana Konstanta" untuk tingkat mantera itu, lalu menghitung apakah mungkin untuk menghasilkan salah satu dari Konstanta Utama dengan melakukan beberapa kombinasi penjumlahan, pengurangan, perkalian, dan pembagian serta tanda kurung pada semua angka yang digulung.
Tabel Perdana Konstanta berdasarkan Tingkat Ejaan adalah sebagai berikut:
+-------------+-----------------+
| Spell Level | Prime Constants |
+-------------+-----------------+
| 1st | 3, 5, 7 |
| 2nd | 11, 13, 17 |
| 3rd | 19, 23, 29 |
| 4th | 31, 37, 41 |
| 5th | 43, 47, 53 |
| 6th | 59, 61, 67 |
| 7th | 71, 73, 79 |
| 8th | 83, 89, 97 |
| 9th | 101, 103, 107 |
+-------------+-----------------+
Jadi, misalnya, jika karakter memiliki 5 peringkat keterampilan dan mereka sedang merapal mantra tingkat ke-4, mereka akan melempar lima dadu enam sisi dan harus dapat menghitung nilai 31, 37, atau 41. Jika mereka menggulung 6, 6, 4, 3 dan 1, maka mereka dapat menghasilkan nilai 37 dengan melakukan perhitungan berikut: (6 × 6) + (4 - 3) × 1 = 37, atau mereka dapat menghasilkan nilai 41 dengan melakukan ([6 + 6] × 3) + 4 + 1 = 41. Akibatnya, casting mantra mereka akan berhasil.
Untuk puzzle pemrograman ini, tugas Anda adalah menulis fungsi dengan dua parameter input, Level Ejaan dan Skill Ranks, melempar sejumlah dadu enam sisi sama dengan parameter Skill Ranks, lalu menghitung jika Anda dapat menghasilkan (setidaknya) salah satu dari Konstanta Perdana terkait dengan parameter Level Eja, lalu menampilkan nilai Boolean.
Jawaban akan diberi peringkat terutama oleh efisiensi algoritma mereka (saya cukup yakin bahwa algoritma brute force akan berskala sangat cepat ketika parameter Skill Ranks meningkat), dan kemudian dengan ukuran kode sumber yang dikirimkan dalam byte.
sumber
Jawaban:
Python 2.7, 285 byte
Secara teknis sesuai dengan spesifikasi tantangan. Hanya mengembalikan Benar / Salah, tidak mengekspos gulungan dadu yang digunakan atau ungkapan yang digunakan untuk pemanggil.
Algoritma ini juga mengabaikan pengelompokan, karena kita dapat melakukan operasi yang sama tanpa pengelompokan dengan menggunakan pemesanan. (Ini tidak akan benar jika eksponensial adalah salah satu dari operasi yang mungkin, misalnya.)
Runtime eksponensial, karena menghasilkan semua kemungkinan dan kemudian memeriksa jika setidaknya ada satu solusi.
sumber