Như tiêu đề có thể gợi ý, vấn đề này được lấy cảm hứng từ Bot say rượu cận thị lịch sự của @NP
Bot nghèo của chúng tôi được đặt trên lưới cartesian ở điểm gốc và sau mỗi phút, nó di chuyển 1 đơn vị theo một trong bốn hướng (Lên, Xuống, Trái, Phải).
Sau n phút, tất cả các mỏ tiềm ẩn trên lưới kích hoạt, giết chết bất kỳ bot nghèo nào có thể tự tìm thấy chúng. Các mỏ được đặt tại tất cả các tọa độ nguyên thỏa mãn phương trình | y | = | x |.
Thử thách
Bạn sẽ được cung cấp n , số phút trước khi nổ mìn, làm đầu vào và là đầu ra, bạn phải tìm xác suất để bot chết .
Đầu vào : Một số tự nhiên đại diện cho n .
Đầu ra : Đặt xác suất bot chết là p / q, trong đó p và q là các số nguyên tương đối nguyên tố (q không thể là 0, nhưng p có thể). Đầu ra p.
Quy tắc
- Thuật toán của bạn không được chạy theo thời gian theo cấp số nhân hoặc cao hơn. Nó lý tưởng nên chạy trong thời gian đa thức hoặc ít hơn.
- Thuật toán của bạn phải có khả năng xử lý các đầu vào
n
<20 (có thể điều chỉnh nếu quá khó) trong thời gian hợp lý. - Đây là một thách thức mã golf .
- Lặp lại tất cả các khả năng cho một n nhất định chắc chắn sẽ không được chấp nhận như một câu trả lời.
Các trường hợp thử nghiệm
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
Tính toán ví dụ cho n = 6
Chúng tôi có 4 cách di chuyển có thể: U, D, R và L. Tổng số đường có thể được thực hiện là 4 ^ 6 hoặc 4096. Có 4 trường hợp có thể xảy ra dọc theo đường y = x: x, y = ± 1; x, y = ± 2; x, y = ± 3; hoặc x = y = 0. Chúng tôi sẽ đếm số cách kết thúc tại (1,1), (2,2) và (3,3), nhân chúng với 4 để tính các góc phần tư khác và thêm điều này đến số cách kết thúc tại (0,0).
Trường hợp 1: Bot kết thúc tại (3, 3). Để bot kết thúc ở đây, nó phải có 3 bước di chuyển đúng và 3 lần di chuyển lên. Nói cách khác, tổng số cách để đến đây là các cách sắp xếp lại các chữ cái trong chuỗi RRRUUU, trong đó 6 chọn 3 = 20.
Trường hợp 2: Bot kết thúc ở (2,2). Để bot kết thúc ở đây, nó có thể có 2 lần di chuyển lên, 3 lần di chuyển phải và 1 lần di chuyển trái; hoặc 2 di chuyển đúng, 3 di chuyển lên và 1 di chuyển xuống. Do đó, tổng số cách để đến đây là tổng số cách sắp xếp lại các chữ cái trong chuỗi RRRLUU và UUUDRR, cả hai cách này (6 chọn 1) * (5 chọn 2) = 60, với tổng số 120 khả năng .
Trường hợp 3: Bot kết thúc ở (1,1). Để bot kết thúc ở đây, nó có thể có: 1 di chuyển đúng, 3 di chuyển lên và 2 di chuyển xuống. Trong trường hợp này, số cách sắp xếp lại các chữ cái trong chuỗi RUUUDD là (6 chọn 1) * (5 chọn 2) = 60.
1 di chuyển lên, 3 di chuyển phải và 2 di chuyển trái. Trong trường hợp này, số cách sắp xếp lại các chữ cái trong chuỗi URRRLL là (6 chọn 1) * (5 chọn 2) = 60.
2 di chuyển phải, 1 di chuyển trái, 2 di chuyển lên và 1 di chuyển xuống. Trong trường hợp này, số cách sắp xếp lại các chữ cái trong chuỗi UUDRRL là (6 chọn 1) * (5 chọn 1) * (4 chọn 2) = 180.
Do đó, tổng số cách kết thúc tại (1,1) là 300.
Trường hợp 4: Bot kết thúc ở (0,0). Để bot kết thúc ở đây, nó có thể đã có:
3 động tác phải và 3 động tác trái. Trong trường hợp này, số cách sắp xếp lại các chữ cái trong chuỗi RRRLLL là (6 chọn 3) = 20.
3 di chuyển lên và 3 di chuyển xuống. Trong trường hợp này, số cách sắp xếp lại các chữ cái trong chuỗi UUUDDD là (6 chọn 3) = 20.
1 di chuyển phải, 1 di chuyển trái, 2 di chuyển lên và 2 di chuyển xuống. Trong trường hợp này, số cách sắp xếp lại các chữ cái trong chuỗi RLUUDD là (6 chọn 1) * (5 chọn 1) * (4 chọn 2) = 180.
1 di chuyển lên, 1 di chuyển xuống, 2 di chuyển phải và 2 di chuyển trái. Trong trường hợp này, số cách sắp xếp lại các chữ cái trong chuỗi RRLLUD là (6 chọn 1) * (5 chọn 1) * (4 chọn 2) = 180.
Do đó, tổng số cách kết thúc tại (0,0) là 400.
Cộng các trường hợp này lại với nhau, chúng ta có được tổng số cách kết thúc trên | y | = | x | là 4 (20 + 120 + 300) + 400 = 2160. Do đó, xác suất của chúng tôi là 2160/4096. Khi phần này được giảm hoàn toàn, nó là 135/256, vì vậy câu trả lời của chúng tôi là 135 .