Кто-то создал по-настоящему причудливые часы, используя числа Фибоначчи, которые выглядят действительно красиво, но довольно непригодно для использования. Просто так, как нам нравится! Давайте воссоздадим это.
Часы состоят из 5 секций, соответствующих первым пяти числам Фибоначчи, начиная с 1 (т.е. 1, 1, 2, 3, 5):
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
Часы способны отображать 12-часовое время с шагом 5 минут. Вот как это работает. Рассмотрим время 7:20. Час 7 можно разложить на заданные числа Фибоначчи как
7 = 2 + 5
Есть также 4 единицы по пять минут. 4 может быть разложен как
4 = 2 + 1 + 1
Теперь часы отображаются красным цветом, минуты - зеленым, а если число используется для часов и минут, то синим цветом. Если номер не используется вообще, он остается белым. Таким образом, выше будет показано как:
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
Но подождите, это еще не все. Вышеуказанные разложения не единственные возможности. Можно также написать 7 = 3 + 2 + 1 + 1
и 4 = 3 + 1
, который дал бы один из
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
в зависимости от того, который 1
выбран. Конечно, есть и другие комбинации. Часы выбирают из всех допустимых разложений наугад.
Как я уже сказал ... это может не выиграть награду за удобство использования, но на это приятно смотреть.
Соревнование
Ваша задача - реализовать такие часы. Ваша программа (или функция) должна напечатать ASCII-представление текущего времени (округленное до последнего кратного 5 минутам), как описано выше, до STDOUT или ближайшей альтернативы. Вы можете прочитать время в любом общем формате в качестве входных данных или получить его с помощью стандартных функций библиотеки. Вы не должны предполагать, что текущее / данное время делится на 5 минут.
Ваше решение должно выбрать случайным образом из всех возможных представлений текущего времени. То есть каждое представление должно быть напечатано с ненулевой вероятностью.
Полночь и полдень должны рассматриваться как 0:00
(в отличие от 12:00
).
При желании вы можете распечатать один завершающий символ новой строки.
Вы можете использовать любые четыре различных печатных символа ASCII (коды символов от 0x20 до 0xFE) вместо RGBW
. Пожалуйста, укажите свой выбор в ответе и используйте его последовательно.
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
Ответы:
CJam, 61 байт
Принимает два целых числа через пробел через STDIN и использует
3.14
вместоWRGB
соответственно. Попробуйте онлайн .Вот "нормальная"
RGBW
версия для нескольких дополнительных байтов:объяснение
Алгоритм такой же, как мой ответ Python - выборка отклонения путем генерации часов, пока мы не получим тот, который является правильным.
источник
Python 2,
194182 байтаАлгоритм - это просто выборка отклонения, поэтому он продолжает генерировать часы, пока не получит правильные. Часы строятся, начиная с нуля, затем 5 раз добавьте квадрат сверху и поверните по часовой стрелке.
Принимает два целых числа через запятую через STDIN.
источник
Python 2, 421 байт
Тьфу, я уверен, что это может быть в гольфе больше.
Прецедент:
источник
Рубин, 286 байт
Это может быть пригодным для игры в гольф, но попробую в другой раз.
Объяснение:
источник
(0..5).to_a
на[*0..5]