Tính toán hình học thiêng liêng của tôi [đóng]


10

Trong game nhập vai trên bàn có tên Pathfinder, có một kỳ tích mà các nhân vật có thể gọi là Holy Geometry , cho phép một nhân vật có được phép thuật của họ để đổi lấy việc thực hiện một số phép toán: sử dụng nó, nhân vật cuộn một số sáu mặt súc sắc bằng cấp bậc của họ trong một kỹ năng cụ thể, đặt một bảng dựa trên cấp chính tả của họ để xác định ba số nguyên tố nào là "Hằng số chính" cho cấp chính tả đó, sau đó tính toán xem có thể tạo ra một trong các Hằng số chính hay không thực hiện một số kết hợp của phép cộng, phép trừ, phép nhân, phép chia và phép chia nhóm trên tất cả các số.

Bảng các hằng số chính theo cấp chính tả như sau:

+-------------+-----------------+
| 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   |
+-------------+-----------------+

Vì vậy, ví dụ, nếu một nhân vật có 5 cấp bậc kỹ năng và họ đang sử dụng phép thuật cấp 4, họ sẽ tung năm con xúc xắc sáu mặt và sẽ cần có thể tính giá trị 31, 37 hoặc 41. Nếu họ cán 6, 6, 4, 3 và 1, sau đó họ có thể tạo ra giá trị 37 bằng cách thực hiện phép tính sau: (6 × 6) + (4 - 3) × 1 = 37 hoặc họ có thể tạo ra giá trị 41 bằng cách thực hiện ([6 + 6] × 3) + 4 + 1 = 41. Kết quả là, việc sử dụng phép thuật của họ sẽ thành công.

Đối với câu đố lập trình này, công việc của bạn là viết một hàm với hai tham số đầu vào là Cấp chính tả và Xếp hạng kỹ năng, cuộn một số súc sắc sáu mặt bằng với tham số Xếp hạng kỹ năng, sau đó tính toán nếu bạn có thể tạo ra (ít nhất) một trong số Các hằng số chính được liên kết với tham số Spell Level, sau đó xuất giá trị Boolean.

Các câu trả lời sẽ được xếp hạng chủ yếu theo hiệu quả của thuật toán của họ (Tôi khá chắc chắn rằng thuật toán vũ phu sẽ mở rộng rất nhanh khi tham số Skill Ranks tăng), và sau đó theo kích thước của mã nguồn được gửi theo byte.


Tôi không nghĩ Pathfinder yêu cầu nhân vật tung xúc xắc, mà là người chơi , phải không?
mbomb007

3
Ngoài ra, làm thế nào để bạn có ý định xếp hạng hiệu quả của thuật toán mà ai đó sử dụng?
mbomb007

Vì tò mò, tại sao chương trình lại cuốn hút bạn? Sẽ không hữu ích hơn nếu bạn cung cấp kết quả cuộn hơn là thứ hạng kỹ năng (chưa kể dễ kiểm tra hơn) ...?
Triggernometry


3
Theo mặc định, tính ngẫu nhiên không phải là công bằng, nhưng nó phải bao gồm tất cả các khả năng. Tuy nhiên, trong trường hợp này, các bước bổ sung giữa không thể quan sát được, vì vậy về cơ bản, một bài nộp sẽ chỉ phải xuất ngẫu nhiên đúng hoặc sai. Sẽ tốt hơn nếu câu trả lời lấy giá trị súc sắc làm đầu vào thay vào đó
Jo King

Câu trả lời:


1

Python 2.7, 285 byte

from itertools import*
from random import*
def f(s,r):
 p=[];n=1;k=1;P=1;d=choices('123456',k=r);D=permutations(d,r);O=product('+-*/',repeat=r-1)
 while-~s*3>n:p+=P%k*[k];n,k,P=n+P%k,k+1,P*k*k
 return any(n in{eval('int(%s)'%'%s'.join(i)%o)for i in D for o in O}for n in p[-4:-1])

Kỹ thuật phù hợp với các thông số kỹ thuật của thách thức. Chỉ trả về Đúng / Sai, không hiển thị các cuộn súc sắc được sử dụng hoặc biểu thức được sử dụng cho người gọi.

Ngoài ra, thuật toán này bỏ qua việc nhóm, vì chúng ta có thể thực hiện các hoạt động tương tự mà không cần nhóm bằng cách sử dụng thứ tự thay thế. (Điều này sẽ không đúng nếu ví dụ lũy thừa là một trong những hoạt động có thể xảy ra.)

Thời gian chạy theo cấp số nhân, vì nó tạo ra tất cả các khả năng và sau đó kiểm tra xem có ít nhất một giải pháp tồn tại không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.