Alguém construiu um relógio realmente sofisticado usando números de Fibonacci, que parece muito bom, mas é bastante inutilizável. Apenas a maneira que nós gostamos! Vamos recriar isso.
O relógio é composto de 5 seções correspondentes aos cinco primeiros números de Fibonacci, começando de 1 (ou seja, 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
O relógio é capaz de exibir o tempo de 12 horas em incrementos de 5 minutos. Aqui está como isso funciona. Considere o tempo 7:20. A hora 7 pode ser decomposta nos números de Fibonacci dados como
7 = 2 + 5
Existem também 4 unidades de cinco minutos. Os 4 podem ser decompostos como
4 = 2 + 1 + 1
Agora, as horas são mostradas em vermelho, os minutos são divididos em verde e, se um número é usado por horas e minutos, é mostrado em azul. Se um número não for usado, ele permanecerá branco. Portanto, o acima seria mostrado como:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Mas espere, tem mais. As decomposições acima não são as únicas possibilidades. Pode-se também escrever 7 = 3 + 2 + 1 + 1
e 4 = 3 + 1
, o que daria uma das
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
dependendo de qual 1
é escolhido. Claro que existem outras combinações também. O relógio escolhe todas as decomposições válidas aleatoriamente.
Como eu disse ... isso pode não ganhar um prêmio de usabilidade, mas com certeza é bom de se ver.
O desafio
Sua tarefa é implementar esse relógio. Seu programa (ou função) deve imprimir uma representação ASCII do horário atual (arredondado para o último múltiplo de 5 minutos) conforme descrito acima para STDOUT ou a alternativa mais próxima. Você pode escolher ler a hora em qualquer formato comum como entrada ou obtê-la com as funções padrão da biblioteca. Você não deve assumir que o tempo atual / determinado é divisível por 5 minutos.
Sua solução deve escolher aleatoriamente entre todas as representações possíveis da hora atual. Ou seja, cada representação deve ser impressa com probabilidade diferente de zero.
Meia-noite e meio-dia devem ser tratados como 0:00
(em oposição a12:00
).
Opcionalmente, você pode imprimir um único caractere de nova linha à direita.
Você pode usar quaisquer quatro caracteres ASCII imprimíveis distintos (códigos de caracteres 0x20 a 0xFE) no lugar de RGBW
. Por favor, indique sua escolha na sua resposta e use-a de forma consistente.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.