Lý lịch
Tôi có một bộ sưu tập "vớ ngày thường", đó là bảy đôi vớ được dán nhãn theo các ngày trong tuần. Khi tôi giặt tất, chúng sẽ thành một đống, và tôi phải sắp xếp chúng thành các cặp chính xác trước khi cất chúng vào tủ. Chiến lược của tôi là kéo một chiếc tất ngẫu nhiên từ đống đồ một lúc và đặt nó vào ngăn kéo. Bất cứ khi nào có một đôi vớ phù hợp trên ngăn kéo, tôi buộc chúng lại với nhau và cất chúng vào tủ. Nhiệm vụ của bạn là mô phỏng quá trình ngẫu nhiên này và trả về số lần rút cần thiết để tìm cặp phù hợp đầu tiên.
Đầu vào
Đầu vào của bạn là số nguyên N 1 . Nó đại diện cho "số ngày trong một tuần": có N đôi vớ trong đống và mỗi đôi có một nhãn riêng. Nếu cần thiết, bạn cũng có thể lấy hạt giống PRNG làm đầu vào.
Đầu ra
Đầu ra của bạn là số vớ tôi phải rút trước khi tìm thấy cặp phù hợp đầu tiên. Ví dụ: nếu hai chiếc vớ đầu tiên đã tạo thành một cặp phù hợp, thì đầu ra là 2
.
Tất nhiên, đầu ra là ngẫu nhiên, và phụ thuộc vào thứ tự vẽ. Chúng tôi giả định rằng tất cả các đơn đặt hàng bản vẽ đều có khả năng như nhau , do đó, mỗi lần rút một chiếc tất, sự lựa chọn là thống nhất và độc lập với tất cả các lựa chọn khác.
Thí dụ
Đặt N = 3 , để chúng ta có tổng cộng 6 vớ, được dán nhãn AABBCC . Một lần chạy có thể của "giao thức vẽ sock" như sau:
| Pile | Drawer | Pairs
Begin | AABBCC | - | -
Draw B | AABCC | B | -
Draw C | AABC | BC | -
Draw B | AAC | C | BB
Draw A | AC | AC | BB
Draw A | C | C | AA BB
Draw C | - | - | AA BB CC
Cặp kết hợp đầu tiên được tìm thấy sau khi vẽ B thứ hai , đó là cặp thứ ba được vẽ, do đó, đầu ra chính xác là 3
.
Quy tắc và tính điểm
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép. Đầu vào và đầu ra có thể ở bất kỳ định dạng hợp lý nào, bao gồm cả unary (chuỗi 1
s).
Bạn có thể cho rằng RNG tích hợp ngôn ngữ của bạn là hoàn hảo. Bạn không thực sự phải mô phỏng giao thức vẽ sock, miễn là đầu ra của bạn có phân phối xác suất chính xác.
"Các trường hợp thử nghiệm"
Dưới đây là xác suất gần đúng của tất cả các đầu ra cho đầu vào N = 7 :
Output 2 3 4 5 6 7 8
Probability 0.077 0.154 0.210 0.224 0.186 0.112 0.037
Để kiểm tra giải pháp của bạn, bạn có thể chạy nó, giả sử, 40 000 lần và xem liệu phân phối đầu ra có hợp lý gần với điều này không.
Draw all socks. End up with an odd number.