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.
Respostas:
CJam, 61 bytes
Toma dois números inteiros separados por espaço via STDIN e usa em
3.14
vez deWRGB
respectivamente. Experimente online .Aqui está a
RGBW
versão "sã" para alguns bytes extras:Explicação
O algoritmo é o mesmo que minha resposta em Python - amostragem por rejeição, gerando relógios até obtermos o que está correto.
fonte
Python 2,
194182 bytesO algoritmo é apenas uma amostra de rejeição, por isso continua gerando relógios até encontrar o que é certo. O relógio é construído começando com nada e, em seguida, "adicione um quadrado acima e gire no sentido horário" 5 vezes.
Toma dois inteiros separados por vírgula via STDIN.
fonte
Python 2, 421 bytes
Ugh, eu tenho certeza que isso pode ser jogado mais.
Caso de teste:
fonte
Ruby, 286 bytes
Pode ser jogável, mas tentará outra hora.
Explicação:
fonte
(0..5).to_a
por[*0..5]