Các nhà nghiên cứu gần đây đã phát hiện ra một đàn ong thú vị sống trong một cánh đồng tổ ong vô tận:
Mỗi tế bào có thể nuôi một con ong hoặc không. Trên thực tế, cuộc sống của những sinh vật đó có vẻ hơi ... hỗn loạn. Có thể tính toán rằng một thuộc địa luôn bắt đầu với mẫu sau:
(Bee vẽ bởi Emmanuel Boutet trên Wikimedia Commons . Hình ảnh tổ ong-and-ong này do đó được phát hành theo CC-BY-SA . Càu nhàu )
Sau đó, vòng đời của ong được chia thành các thế hệ được gọi là. Mỗi thế hệ ong cũ chết và những con mới nở và nó chủ yếu phụ thuộc vào hàng xóm của tế bào của chúng:
- Nếu một con ong có ít hơn hai người hàng xóm, nó sẽ chết vì cô đơn.
- Nếu một con ong có nhiều hơn ba người hàng xóm, nó sẽ chết vì quá đông.
- Nếu một tế bào có hai, ba hoặc bốn con ong sống trong các tế bào lân cận thì một con ong mới nở ở đó trong thế hệ tiếp theo.
Những con ong chết không chết cho đến khi kết thúc một thế hệ nên chúng vẫn ảnh hưởng đến các tế bào xung quanh có thể nở ra những con ong ở thế hệ tiếp theo.
Bây giờ chúng ta biết làm thế nào một thuộc địa như vậy hoạt động, chúng ta có thể mô phỏng nó thông qua bất kỳ số lượng thế hệ.
Đầu vào
Đầu vào là một số N duy nhất , được đưa ra trên đầu vào tiêu chuẩn, được kết thúc bằng ngắt dòng. 0 ≤ N 150. Đây là số lượng thế hệ để mô phỏng.
Đầu ra
Đầu ra là một số duy nhất, trên đầu ra tiêu chuẩn và tùy ý theo sau là ngắt dòng đơn, đại diện cho số lượng ong sống sau N thế hệ.
Đầu ra bổ sung về lỗi tiêu chuẩn được bỏ qua.
Đầu vào mẫu
0
5
42
100
Đầu ra mẫu
6
44
1029
5296
Điều kiện chiến thắng
Mã ngắn nhất sẽ thắng, như thông lệ trong golf. Trong trường hợp hòa, giải pháp trước đó thắng.
Các trường hợp thử nghiệm
Có hai tập lệnh kiểm tra, chứa các trường hợp kiểm thử giống hệt nhau:
Yêu cầu trong cả hai trường hợp : <test script> <my program> [arguments]
, ví dụ ./test ruby beehive.rb
hoặc ./test.ps1 ./beehive.exe
.
Tôi biết chỉ có 22 bài kiểm tra thay vì 151 (chủ yếu vì các giải pháp thường khá chậm). Xin vui lòng không nhúng các trường hợp thử nghiệm chính xác thay vì giải quyết nhiệm vụ. Các tập lệnh này là một thuận tiện để bạn kiểm tra xem một thay đổi có còn khiến chương trình hoạt động chính xác hay không; không phải là bạn có thể điều chỉnh mã của mình cho các trường hợp thử nghiệm cụ thể.
Một lưu ý khác
Nhiệm vụ này là một phần của cuộc thi golf được tổ chức tại trường đại học của tôi trong năm 2011-W24. Điểm số và ngôn ngữ của các thí sinh của chúng tôi như sau:
- 336 - C
- 363 - C
- 387 - C
- 389 - Haskell
- 455 - C
Giải pháp của chúng tôi là
- 230 - Ruby