Ai đó đã chế tạo một chiếc đồng hồ thực sự lạ mắt bằng cách sử dụng các số Fibonacci, trông thực sự đẹp nhưng khá khó sử dụng. Chỉ là cách chúng tôi thích nó! Hãy tạo lại điều này.
Đồng hồ được tạo thành từ 5 phần tương ứng với năm số Fibonacci đầu tiên, bắt đầu từ 1 (tức là 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
Đồng hồ có khả năng hiển thị thời gian 12 giờ với gia số 5 phút. Đây là cách nó hoạt động. Hãy xem xét thời gian 7:20. Giờ 7 có thể được phân tách thành các số Fibonacci đã cho
7 = 2 + 5
Ngoài ra còn có 4 đơn vị năm phút. 4 có thể được phân tách thành
4 = 2 + 1 + 1
Bây giờ giờ được hiển thị bằng màu đỏ, các phút có màu xanh lục và nếu một số được sử dụng cho cả giờ và phút thì nó sẽ hiển thị bằng màu xanh lam. Nếu một số hoàn toàn không được sử dụng, nó vẫn có màu trắng. Vì vậy, ở trên sẽ được hiển thị như sau:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Nhưng xin chờ chút nữa. Các phân tách trên không phải là khả năng duy nhất. Người ta cũng có thể viết 7 = 3 + 2 + 1 + 1
và 4 = 3 + 1
, sẽ cung cấp cho một trong
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
tùy thuộc vào cái nào 1
được chọn Tất nhiên có những kết hợp khác là tốt. Đồng hồ chọn từ tất cả các phân tách hợp lệ một cách ngẫu nhiên.
Như tôi đã nói ... điều này có thể không giành được giải thưởng về khả năng sử dụng, nhưng nó chắc chắn là tốt để xem xét.
Các thách thức
Nhiệm vụ của bạn là thực hiện một chiếc đồng hồ như vậy. Chương trình (hoặc chức năng) của bạn nên in một đại diện ASCII của thời gian hiện tại (làm tròn xuống bội số cuối cùng của 5 phút) như được mô tả ở trên để STDOUT hoặc thay thế gần nhất. Bạn có thể chọn đọc thời gian ở bất kỳ định dạng phổ biến nào dưới dạng đầu vào hoặc lấy nó với các chức năng thư viện tiêu chuẩn. Bạn không được cho rằng thời gian hiện tại / đã cho là chia hết cho 5 phút.
Giải pháp của bạn phải chọn ngẫu nhiên từ tất cả các đại diện có thể có của thời điểm hiện tại. Đó là mỗi đại diện phải được in với xác suất khác không.
Nửa đêm và buổi trưa nên được coi là 0:00
(trái ngược với 12:00
).
Bạn có thể tùy ý in một ký tự dòng mới.
Bạn có thể sử dụng bất kỳ bốn ký tự ASCII có thể in riêng biệt (mã ký tự 0x20 đến 0xFE) thay thế RGBW
. Vui lòng nêu sự lựa chọn của bạn trong câu trả lời của bạn và sử dụng nó một cách nhất quán.
Đây là mã golf, vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.