Một ví dụ kinh điển để giới thiệu cho mọi người khái niệm phân phối xác suất rời rạc là máy đậu . Cỗ máy này có một lượng lớn viên bi rơi từ một lối đi hẹp ở phía trên, sau đó chúng chạm vào các hàng của các chân xen kẽ, trong đó tại mỗi pin, viên bi chạm vào nó có thể rơi sang bên trái hoặc bên phải của pin. Cuối cùng, các chân được thu thập trong các thùng dọc ở dưới cùng của máy. Một sơ đồ đơn giản của máy này trông như thế này:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
|_|_|_|_|_|_|
Trong sơ đồ này, O
biểu thị vị trí mà các viên bi rơi xuống. Mỗi cái ^
là một cái ghim mà tại đó viên bi có 50% cơ hội di chuyển đến hình vuông ở bên trái hoặc bên phải của chiếc ghim. Các viên bi sau đó tập hợp tại các thùng dưới đáy thiết bị và với số lượng viên bi đủ lớn, chiều cao của các ngăn đá cẩm thạch trong các thùng sẽ giống như một phân phối nhị thức rời rạc.
Thử thách
Đối với thử thách này, bạn sẽ tính toán phân phối xác suất kết quả của máy đậu dựa trên sơ đồ như trên. Các sơ đồ được hiểu là một "chương trình" hai chiều mà các viên bi đi qua, hướng tới các trường ở bên cạnh hoặc các trường bên dưới trường hiện tại. Khi các viên bi chạm đến đáy của máy, chúng được tính để phân phối xác suất. Để giữ cho nó thú vị, các sơ đồ này sẽ chứa một vài trường hơn là chỉ các nguồn và chân đơn giản. Một sơ đồ ví dụ là:
| O |
| ^ |
| ^ / |
| ^ | ^ |
| <^- = v |
| ^ ^ ^ ^ ^ |
Hơn nữa, các viên bi bây giờ đều có hướng xoay. Hướng này được đặt bởi một số trường và xác định trường tiếp theo mà viên bi di chuyển trong một số trường khác.
Các trường sau được định nghĩa:
O
: Nguồn. Sinh ra viên bi ngay bên dưới nó. Hướng của những viên bi này là 50% trái, 50% phải. Mỗi nguồn tạo ra cùng một lượng bi.U
: Bồn rửa. Bất kỳ viên bi nào vào trường này đều được gỡ bỏ khỏi máy đậu.: Không gian trống. Nếu một viên bi đến trường này, nó sẽ di chuyển đến trường bên dưới.
-
: Sàn nhà. Nếu một viên bi đến trường này, nó sẽ di chuyển sang trường bên trái hoặc trường bên phải, tùy thuộc vào hướng hiện tại của nó.^
: Bộ chia. Nếu một viên bi đến trường này, nó có 50% di chuyển đến trường bên phải hoặc trường bên trái của bộ chia. Điều này cũng xác định hướng của đá cẩm thạch.v
: Tham gia. Nếu một viên bi đến trường này, nó sẽ di chuyển đến trường bên dưới./
: Miếng đệm nghiêng. Nếu một viên bi đến trường này, nó sẽ di chuyển đến trường bên trái của miếng đệm, đặt hướng của viên bi.\
: Tương tự như trước, nhưng bên phải.|
: Phản xạ. Nếu một viên bi đến trường này, nó sẽ đảo ngược hướng của viên bi, và di chuyển viên bi sang trường bên phải hoặc bên trái, dựa trên hướng đảo ngược này.=
: Pháo. Nếu một viên bi đến trường này, nó sẽ di chuyển nó sang bên phải hoặc bên trái theo hướng hiện tại, cho đến khi viên bi gặp một trường không,
-
hoặcO
.<
: Tương tự như trước, nhưng sẽ luôn đặt hướng và di chuyển về bên trái.>
: Tương tự như trước, nhưng bên phải.
Các đảm bảo sau đây được đưa ra liên quan đến sơ đồ.
- Mỗi hàng đầu vào sẽ có cùng độ dài trong các trường.
- Trường ngoài cùng bên phải và bên phải của mỗi hàng sẽ luôn là a
|
. - Sơ đồ sẽ không chứa bất kỳ đường dẫn có thể nào mà qua đó các viên bi có thể bị mắc kẹt trong máy với số lần lặp không xác định, như
\/
hoặc^^
. - Sơ đồ sẽ chỉ chứa các trường được đề cập ở trên.
- Có một hoặc nhiều nguồn
Kết quả
Nhiệm vụ của bạn sẽ là tạo một biểu đồ thanh ASCII cao 16 dòng phân phối xác suất trong đó các viên bi thoát ra phía dưới cùng của biểu đồ, được chia tỷ lệ sao cho xác suất lớn nhất bao gồm tất cả 16 ký tự. Vì vậy, đối với vấn đề sau:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
Chương trình của bạn sẽ tạo ra giải pháp sau (lưu ý rằng nó phải có cùng chiều rộng với chương trình đầu vào, bao gồm các đường ống ở bên cạnh:
# #
# #
# #
# #
# #
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # # # #
# # # # # #
Ví dụ
Sau đây là một ví dụ cần kiểm tra chức năng của tất cả các loại trường khác nhau:
| O O |
| O ^ / <^\\\ |
| ^ > ^ |
| ^ ^ ^ =|
| ^ ^ | ^ <^ O |
| ^ > ^ | ^ O ^> v |
|| ^U ^ | = ^\ |
| ^ ^ ^ ^U ^\ ---^ |
| = ^ ^ = v |
Nó sẽ dẫn đến kết quả đầu ra sau đây:
#
#
#
#
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
## # # #
## # # # #
# ### # # # #
# # ### # # # #
# # ### # # # #
Quy tắc
Cả hai chức năng và chương trình đầy đủ tạo thành câu trả lời hợp lệ cho thách thức này. Bạn sẽ nhận được sơ đồ dưới dạng một chuỗi phân tách dòng mới và bạn sẽ trả về biểu đồ đầu ra theo định dạng đã cho. Quy tắc đầu vào / đầu ra mặc định áp dụng. Mặc dù theo dõi và các dòng mới hàng đầu được cho phép trong đầu ra, mỗi hàng phải có cùng chiều rộng với đầu vào.
Để cho phép các giải pháp sáng tạo hơn, chỉ yêu cầu chương trình của bạn đưa ra kết quả chính xác hơn 90% thời gian cho cùng một sơ đồ. Nó là một mô phỏng xác suất sau khi tất cả.
Chấm điểm
Đây là môn đánh gôn , vì vậy điểm số thấp nhất tính bằng byte sẽ thắng.
v
= [space]
?
v
và [space]
khác nhau về cách các khẩu pháo tương tác xung quanh chúng.