Напишите программу, которая отображает текущее системное время в виде аналоговых часов, используя графику ASCII. Часы должны показывать как минимум часовой и минутный указатели, и должны иметь достаточное разрешение не менее 5 минут.
Дисплей может быть таким маленьким и безобразным, как вы хотите, но показанное время должно быть легко узнаваемым.
Программа должна работать постоянно и обновлять свой статус. Если ваша система может очистить экран, используйте его, иначе достаточно перекрасить часы, когда их состояние изменится.
Вы получаете бонус -20% на количество персонажей, если часы имеют разрешение не менее 1 минуты.
Ответы:
Mathematica 207 - 42 = 165
Галочки и часовые метки размещаются на круге устройства.
H
иM
вращаются вокруг центра часов, показывая полное количество завершенных часов и минут соответственно.S
обновляет свою позицию несколько раз каждую секунду.Показаны две версии: версия, отображающая текст в декартовой плоскости, и другая, отображающая текстовые символы в сетке.
Эта версия отображает персонажей в декартовой плоскости.
Часы ниже показывают время 3:08:17 .
Версия терминала или сетки :
430316 символов (253 с бонусной скидкой)Эта версия работает практически так же, но размещает символы в сетке ячеек 61 x 61, а не в декартовой плоскости. Это все еще может быть немного в гольфе, но я просто хотел показать (небрежный) терминальный вывод в Mathematica .
Часы ниже показывают 11:06 .
Просто для удовольствия:
Вот не-Ascii версия аналоговых часов. (60 символов). Внешние библиотеки не использовались.
источник
Javascript 370 - 74 = 296
http://jsfiddle.net/wBKQ6/7/
(Это работает только в Chrome, потому что я злоупотребляю тем, что идентификаторы элементов добавляются в глобальную область).
Гольф (370):
Пример вывода (гораздо более сжатый в демо):
источник
Питон, 328 - 65 = 263
Печатает новые часы каждую секунду, а минутная стрелка обновляется каждую минуту.
Часы, которые он печатает, выглядят так (в моем терминале они растянуты не так):
источник
Только на 100% чистый удар ! Без вилки!
Доработанную и обновленную версию можно найти там или на этой странице: ascii-часы для гиков . Но не используйте это! Прочитайте примечание в конце этого ответа, вы были предупреждены! Вместо этого используйте эту версию Perl !
Первые простые часы без второго тика.
Масштабируемый и редактируемый:
Нарисуйте часы 21x21 (10x2 + 1) в 10H10 менее чем за одну секунду.
Это принимает 3 аргумента:
Usage: ascii-clock.sh [ray of clock] [Hour] [Min]
где луч по умолчанию 12, рисование часов2 x ray + 1
высота линий и двойная ширина из-за добавленного пространства, чтобы попытаться получить круглую форму.Если скрипт вызывается с аргументом
0
или1
, он будет циклически перерисовываться каждую минуту. Иначе, если указан хотя бы час (второй параметр), он будет рисовать только один раз и выходить.H
Маркер находится на уровне 70% от луча иM
маркер находится на уровне 90% от луча.Не используйте внешние двоичные файлы, такие как
date
илиbc
для розыгрыша!(Спасибо @manatwork за встроенный
read -t
на месте, если/bin/sleep
).Так что все это сделано встроенным команд оболочки.
Используется последовательность ANSI , но только для цикла и для выделения жирным шрифтом маркеров.
Это может быть выполнено как:
Это будет производить что-то вроде:
Или может быть запущен как:
Альтернатива: с полным рисованием пути:
может произвести:
или
В последней версии с Seconds отмечен рендеринг и наносон для синхронизации.
Это работает только в последних версиях Linux, так как используется
/proc/timer_list
для подсчета доли секунды для сна между каждым обновлением.Более запутанная версия (2702 байта):
В соответствии с просьбой @manatwork , существует более гольф- версия.
Эта версия раскрашена и представляет цифровое время по углам.
Примечание: не используйте это в любом случае!
Как это bash программа а bash не является языком программирования, некоторое время ее не очень удобно использовать.
Небольшая демонстрация потребления памяти всего за 5 часов с рисованием луча длиной 7 символов:
Главное преимущество в том, что когда мне нужна память, мне просто нужно убить часы.
( Примечание: я объединил это, версию perl и одну и ту же версию javascript на ascii-clock for geeks ;-)
источник
bash
4.1. На 4.2 действительно работает непрерывно и не требует параметров командной строки.bash
- демонстрация большого мастерства. (/ me берет его шляпу и щелкает ссылку upvote) Но эти 2529 символов все еще могут быть сокращены в духе задач code-golf : «Code-golf - это соревнование для решения конкретной проблемы с наименьшим количеством байтов исходного кода. ”Python 2 - 207
Это очень некрасиво, но читабельно. Печатается каждые 9 секунд (вы можете изменить на 1 секунду, если хотите), обновляется каждые 5 минут. У меня нет большого опыта в программировании кода на python, поэтому я надеюсь, что его можно улучшить.
Пример вывода:
источник
Perl 5 x 65 = 325 - 65 (20%) = 260 символов!
Чистая, круглая, со вторым галочкой и обновляемая каждые секунды.
На консоли 24 строки выглядят хорошо (это 00:12:56 ):
И есть цветная, более приятная и умная версия:
Эта версия тесно связана с другим ответом , с основным преимуществом: Вы можете запустить это спокойно, какое-то время! Так что вы можете найти обновленную версию там или на этой странице ascii-clock for geeks .
В качестве демонстрации того, что выполнение примерно одинакового в perl требует меньше ресурсов:
для примерно одинаковых функций:
s
точкой для второго обработчика.S
вверху слева, когда спите (ищите разницу с версией bash )плюс
-a
аргумент для рисования часового и минутного пути в дробной части (11 часов 59 часов, путь пути примерно в 12 часов).Позвольте другой версии Perl!
Используя следующую (красивую) картинку:
Чем вы могли бы просто:
Хорошо, это требует наличия gd2-perl. Но вы могли бы заменить
curl
наwget -O -
;-)(Примечание. Это изображение размером около 1,5 КБ. Я построил еще одно изображение, но длиной 900 байт. Вы можете найти это изображение, а также версию javascript на ascii-clock for geeks :-)
источник
eval
наprint
по порядку, прежде чем запускать неизвестный загруженный код ;-)Tcl, 288
Хорошо, вот некоторые объяснения:
while 1 {...}
- Хорошо, забудь объяснение.regsub -all \ +|. "oaosocowoeouooovoioxozom r n\n" \ {&} p
заменяет+|.
на_{\0}
и сохраняет результат вp
.p
на самом деле испорченный словарь, в котором отсутствует первый ключ (или просто список с нечетным количеством элементов).lset p [set h [expr $h%12*2]] h
устанавливает час в списке заменыlset p [set m [expr $m/5*2]] [expr $h-$m?"m":"x"]
устанавливает минуту. если часы и минуты совпадают, используйтеx
вместо этого.string map /\ $p {rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru}
/\ $p
равно"/ $p"
, поэтому я добавляю первый ключ (/
). После этого я заменяю каждое вхождение ключаrr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru
его значением.Обычная карта
(Читать как "Заменить
/
наo
, заменитьa
наo
... заменитьm
на___
(должно быть пробелы))Я repace
o
сh
и другой сm
,m
,r
иn
только для shoren выходной строки (я заменил несколько пространств с одним из них, а также\n
сn
). Позже я добавляю первый элемент, чтобы использовать вместо индекса h * 2 + 1 индекс, который я заменяю. (сохраняет 2 символа)Некоторые заметки:
{}
. Хорошо, это немного сложнее, например, вы можете избежать пробела с помощью\
, но такие подробности документированы где-то еще .key1 value1 key2 value2
источник
Javascript 2169 - 434 = 1735
Хорошо, это много, но они в порядке и работают так же, как мой предыдущий вариант в предыдущих постах ( bash и perl ).
Эта версия более запутанная, чем та, которую вы можете найти на моих ascii-часах для гиков
источник
Python, 259 - 52 = 207
Пример вывода:
источник
Рубин:
230228 символов - 46 = 182(Примечание:
^[
это один символ.)Пробный прогон (в 21:19:33):
Версия «так безобразно, как вы хотите»:
191181 символ - 36 = 145(Меньший размер, меньшая точность, без секунд, одинаковый радиус, ужасное мерцание.)
Пробный прогон (в 21:19):
Тригонометрическая версия:
130125 символов (без бонуса)(Вдохновленный Йоханнес Kuhn «ы решения Tcl . Не знаю , сколько, как я до сих пор не расшифрован его код.)
Пробный прогон (в 21:19):
источник
tr': can't convert Fixnum into String (TypeError)”? Now that you mentioned the error I dug for a version 1.8.7 and received the above error of that. Works fine on 1.9.2 and 1.9.3. Seems that
? M` интерпретировалось как Fixnum в более старых версиях и только позже было изменено на String.HTML & JS:
397 - 20% = 317.6 characters
Моя первая итерация. Я не очень доволен этим, но он работает, и он показывает время очень ясно.
источник
Ti-Basic 84, 587 - 20% = 469,6
Его вывод очень красивый и подробный.
источник
C, 554 байта, обновления примерно раз в секунду.
Результат:
источник