Ну, Брексит случился . И Sky News, будучи гениями, решили создать обратный отсчет на автобусе.
Ваша задача сделать что-то подобное. Великобритания покидает ЕС 31 марта 2019 года, и вы должны создать для этого цифровой обратный отсчет, который меняется каждую секунду (с допустимым отклонением 0,05 секунды).
вход
Ваша программа не должна принимать абсолютно никаких данных. Это запрещено!
Выход
Следует вывести время до Brexit в формате ddd:hh:mm:ss
. Разрешены начальные и конечные переводы строк, но каждый раз дисплей должен оставаться на одном и том же месте. Это должно выглядеть так, как будто оно на самом деле уменьшается на месте. Как отмечает @AnthonyPham, это не означает, что нужно печатать достаточно новых строк, чтобы «очистить» экран, это означает, что вы действительно должны очистить экран.
Такой вывод не разрешен:
100:20:10:05
100:20:10:04
Это тоже не
100:20:10:05
*A thousand newlines*
100:20:10:04
так как они на более чем одной строке.
Вам не нужно беспокоиться после Brexit. Ваша программа должна работать только до 31/3/2019
правила
- Стандартные лазейки запрещены
- Это код-гольф, поэтому выигрывает самый короткий код в байтах .
- Сообщения об ошибках (хотя я не могу думать как) запрещены
- Код должен быть в состоянии запускаться через 2 года (когда Великобритания покидает ЕС) и должен отображать фактическое время, а не начинать с 730 (см. Ниже)
Правило обратного отсчета
Обратный отсчет не должен быть жестко запрограммирован и должен быть в состоянии запускаться в любое время до окончания Brexit и при этом давать правильный результат. Когда начинается новый день, час должен соответствовать следующему формату
712:00:00:01
712:00:00:00
711:23:59:59
Позвольте мне еще раз сказать, что дата окончания Brexit - 31/3/2019 в полночь для удобства (31: 3: 19 00:00:00 или 31: 3: 2019 00:00:00 или любой другой формат, который вы хотите)
NB: я думаю, что у меня есть все, но я не разместил это в Песочнице, иначе выбор времени мог бы быть выключен. Не стесняйтесь размещать любые предложения по улучшению, потому что это не идеально.
1000
если я хочу, чтобы он менялся раз в секунду. СпасибоОтветы:
JavaScript,
134129113 байтовРедактировать: 2 байта сохранены благодаря @Shaggy. Сохранено 11 байтов благодаря @ l4m2.
источник
<a id=0>
? Или что-то типа того?document.body.innerHTML
вместоo.innerHTML
<tt>
.PowerShell,
70635553 байтаИсключенные двойные кавычки, легко -2 благодаря @Joey
Выполнение этого со сном добавляет 8 байтов, но ввод в большинстве случаев невидим, если он выполняется без них, версия (63 байта) со сном:
for()
это бесконечный цикл, и внутри этого цикла ..cls
очистить экран,получить
31/3/19
какDateTime
объект и-
текущую дату от него, дать оставшееся время, затем.ToString()
(|% T*
) это с правильным форматом.это будет отображать отрицательное время после брексита.
источник
T*
работает. Я не знаком с этим.%
foreach фактически выбираетT
объект oString и принимает следующую строку в качестве аргумента. Что касается формата даты и времени, почему он не работает на машинах в США? Я думал, что иdd
т.д. были нечувствительны к культуре.3/31/19
. Также будет работать2019-03-31
где угодно, но это стоит вам несколько байтов.31Mar19
вместо31/3/19
которого следует надеяться исправить это?Excel VBA,
918482 байтаСохранено 7 байтов благодаря тому, что JoeMalpass указал, что Excel видит даты в виде чисел.
Сохранено 2 байта благодаря JoeMalpass
Вывод в ячейку
A1
в активном листе Excel.источник
("2019-3-31")
с(43555)
. Однако, когда я пытаюсь запустить это в Excel, онNow
работает без()
слишком ...Python 3.6, 146 байт
источник
C #,
173172156150127 байтовСохранено 16 байтов благодаря @Bob. Сохранено 6 байтов благодаря @ Søren D. Ptæus
Отформатированная версия:
источник
(TimeSpan)0
? На телефоне не могу проверить прямо сейчас. Вы все еще можете сбросить клир, так как возврат каретки позаботится об этом: он вернет курсор в начало строки.Clear
! Я такой глупый. И никто не может перейтиint
к тому,TimeSpan
что я уже пробовал.(t = new DateTime(2019, 3, 31) - DateTime.Now).Ticks > 0
.JavaScript ES5,
320319316305295284 байтаСпасибо @Fels за ссылки
Math
, @dgrcode за ссылкиconsole
Un-golfed
источник
g=Math;
Math
может все еще сохранить 2 байта, верно?var
. Кроме того, выбирайте более короткие имена для переменных, напримерh
вместоhours
илиm
вместоminutes
. Вероятно, выполнениеc=console
сэкономит еще пару байтов. Также1e3
вместо1000
PHP, 84 байта
Довольно просто. 1553990400 является меткой времени для 31-3-2019 00:00:00 в UTC. Он зацикливается бесконечно, используя DateTime-> diff () -> format () для вывода количества оставшегося времени. После того, как произошел Brexit, он начнет отсчитывать от 0.
Комментируемая / более читаемая версия:
источник
<?
тег здесь? 2. Я думаю, что ваши круглые скобки неверны, сейчас вы вызываете->diff
эхо, а не объект DateTime. 3. эхо работает без скобок в любом случае. 4. Даже после исправления, это не работает для меня, но я новичок в гольфе, так что я могу быть идиотом.CJam,
69625957 байтСохранено 7 байт путем преобразования в формат времени по-другому
Сохранено 3 байта благодаря предложениям Мартина Эндера
Сохранено 2 байта с использованием возврата каретки вместо пробелов
Не может быть запущен на TIO по понятным причинам.
Он постоянно перезаписывает отображение в бесконечном цикле, поэтому вид текста мигает (по крайней мере, в моей консоли), хотя фактически обновляет время только раз в секунду.
Эта 70-байтовая версия печатается только один раз в секунду:
объяснение
источник
Ab
сs
, и сохранить байт, делая1e3/
первый , а затем разделить в порядке обратном60md\60md\24md\]W%
.{60md\}2*
спасает другого.Python 3.5 (118 байт)
источник
C # 6, 149 байт
Спасибо Бобу за сохранение 57 байтов!
Нежелтая программа:
C #,
210206159 байтСпасибо Бобу за сохранение еще 47 байтов!
Спасибо Мартину Смиту за сохранение 4 байта!
Нежелтая программа:
источник
new DateTime(2019,3,31)
корочеConsole.Clear
и вместо того, чтобы предварять"\r"
в строку, например"\r"+(x-a)...
(x-a).ToString(@"d\:hh\:mm\:ss")
эквивалентно `String.Format (" \ r {0: d \\: чч \\: мм \\: ss} ", xa)` эквивалентно$@"{x-a:d\:hh\:mm\:ss}"
(более короткая интерполированная строка в C # 6.0). Если вы сделаете это, вы можете в дальнейшем сократить полный"\r"+$@"{x-a:d\:hh\:mm\:ss}"
в$"\r{x-a:d\\:hh\\:mm\\:ss}"
.C 104 байта
Сломать
Полагается на
time
возвращаемое количество секунд с 01.01.1970, что имеет место для меня (с использованием Clang / GCC на macOS) и должно иметь место для большинства вещей UNIX.Использует escape-последовательности терминала
bashдля перемещения курсора (<esc>[1A
перемещает курсор на 1 строку вверх). Было бы лучше иметь возможность просто использовать\r
, ноprintf
не будет сбрасывать, пока не увидит новую строку, а очистка вручную требует намного больше.Вероятно, самый интенсивный процессорный отсчет, который я когда-либо видел. Работает в горячем цикле, чтобы убедиться, что он всегда настолько точен, насколько это возможно. Если запустить после крайнего срока, он будет производить довольно странные вещи (негативы везде!)
источник
main(x)
недопустимая форма main, неявный int был удален из языка. Я считаю, что минимальная, безопасная версияint main(){}
.AHK , 145 байт
Это не самый короткий ответ, но результат дает очень приятное чувство обреченности, я думаю. Первоначально я пытался отправить нажатия клавиш Ctrl+ A, DELа затем, в любое время, но частота обновления была слишком медленной, и это разрушило бы любую среду, в которой вы были. Вместо этого я перешел с графическим интерфейсом. Оказалось, что для полного разрушения окна и его воссоздания потребовалось меньше байтов, чем для обновления управления снова и снова, поэтому я пошел на это. Это хороший эффект.
источник
C #,
128127 байтUngolfed код:
Я бы не понял трюк без помощи других ответов C # здесь.
Для тех, кто ищет дальнейших улучшений, вы можете также поместить выражение Write () в цикл for. Похоже, я должен быть в состоянии каким-то образом сохранить байт здесь, потому что это спасает меня точкой с запятой для этого оператора, но это работает к тому же числу, потому что вы не можете иметь полностью пустое тело:
источник
Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");
ddd
прокладок с нулями выглядит лучше, чем метод двух пробелов.Рубин (83 байта)
Ungolfed
В основном одно из представлений Python, с некоторыми улучшениями. Мы просто посылаем "\ r", чтобы перейти в начало строки перед повторным рендерингом. А что касается формата строки
"%03d:%02d:%02d:%02d"
, нам действительно безразлична ширина первого спецификатора… поэтому мы можем просто сделать это"%02d"*4
, и создать пробел и пробел, чтобы очистить лишние лишние двоеточия.Кроме того , я нашел два-символа короче
print
:$><<
.$>
является сокращенным глобальным для$defout
, который является выходным потоком дляprint
иprintf
и по умолчаниюSTDOUT
.IO#<<
пишет правую часть этого потока. Как эти два символа короче? Ну, теперь я могу опустить пробел, который был перед скобкой, заключающей строку формата.На данный момент я искренне считаю, что в Ruby нет возможности сократить эту программу дальше.
Редактировать: я был неправ. Вместо первых
Time.new(2019,3,31)
, мы можем просто использовать сырое время UNIX:1553990400
.Редактировать 2: я попытался поиграть с разложением минут и делением метки времени UNIX на эту константу, но на самом деле это не приводит к экономии байтов. :(
Редактировать 3: Оказывается, кэширование на
h=3600
самом деле больно мне два байта. Упс.Редактировать 4: 3 байта сохранены благодаря @EricDuminill. Он использовал поплавки, но рациональные работали без потери точности!
Редактировать 5:
Array#*
как псевдоним дляArray#join
, с Ruby?
-синтаксисом для отдельных символов!источник
loop{h=431664-Time.now.to_f/3600;$><<('%02d:'*4+"\b \r")%[h/24,h%24,h%1*60,3600*h%60]}
секунды могут быть отключены на 1, хотя, из-за округления.to_r
вместо того,to_f
чтобы сохранить точность..to_r
вместо.to_f
+"\r"
вправо от массива. Это позволяет вам использовать['%02d']*4*?:
вместо'%02d:'*4+"\b "
так, чтобы вы могли потерять скобки, что дает вам один байт. Сохраните еще один байт, написав+?\r
вместо+"\r"
.JavaScript + HTML, 136 + 7 = 143 байта
источник
C #, 142 байта
Нежелтая программа:
источник
ToString()
байты и вместо этогоgoto
идею.Bash + GNU date, 128 байт
2 байта были сброшены благодаря @muru, а 2 - раньше благодаря @This Guy.
Ungolfed
источник
while[1]
?line 1: [1]: command not found
ошибке. Пробелы обязательны, кажется :-(3600
переменную для сохранения 2 байта? Вы могли бы также быть в состоянии изменить ,B=3600;A=86400
чтобыB=3600;A=24*B
еще байт?A=$[24*B]
возможно, там было бы невозможно, хотяC=:%02d;printf "%03d$C$C$C\r"
сохранить байт? И переместите назначения в A и B в арифметическом контексте:D=$[B=3600,A=24*B,1553990400-`date +%s`]
чтобы сохранить другое?MATL, 45 байт
TIO, очевидно, не поддерживает очистку вывода, но, к счастью, MATL Online делает !
На 2 байта больше, немного более дружественная к процессору версия, которая делает
pause
(спит) каждую секунду:Попробуйте это на MATL Online
737515
«31 марта 2019 года» соответствует стандартному формату эпохи MATLAB - количество дней с 0 января 0000, необязательно включая дробную часть для представления времени суток. (Я попытался сократить это, рассчитав его каким-то образом, но его единственными факторами являются 5 и еще одно шестизначное число (147503), и я не мог найти способ сделать это менее чем за 6 байтов.)источник
PHP, 64 байта
Это будет считаться точно до,
0:00:00:00
а затем перерыв / выход. Беги с-r
.-2 байта, если бы мне не пришлось печатать 0.
источник
RPL,
8378 байтПредполагая, что ваш HP48 или аналогичный, настроен с правильным (Великобритания) временем и датой, форматом мм / дд и 24-часовым форматом:
Я был удивлен, что смог сэкономить 2 байта, удалив пробелы вокруг
":"
. 1.1 - самая короткая действительная дата, позже сброшеннаяSUB
. Будьте осторожны с эмуляторами, время может идти быстрее или медленнее (или не работать вообще), чем ваши настенные часы. С настоящим HP вы можете остановить эту программу, нажав клавишу ON ... или дождаться разрядки батарей.источник
PHP,
1029590 байтСохранено 7 байт благодаря @TheLethalCoder и без факторинга
Сохранено еще 5 байтов путем объединения
Это мой первый гольф, так что я, вероятно, пропускаю немало хитростей, но здесь вы все равно.
Что касается PHP-ответа @chocochaos, который иначе бы превзошел это, я считаю, что он ошибочен по причинам, которые я объяснил в своих комментариях, но, поскольку я здесь новичок, я могу ошибаться.Или я просто новичок :)источник
$a
один раз, так что можно использовать номер на месте. Я не слишком знаком с php, но похоже, что может быть больше улучшенийflawed because of reasons stated in the comments
? Если вы имеете в виду комментарии к их ответу, вы единственный, кто прокомментировал.<?=
открывающий тег и отбрасывая эхо, назначая$b
место, где вы впервые его используете. Кроме того, вы можете сохранить 3 байта, используя^0
вместоfloor
. Это побитовое или включает в себя приведение к int, это самый короткий способ приведения к int, который я видел.AWK , 78 байт
Попробуйте онлайн!
Прошло больше времени, прежде чем я понял, что смогу пересчитать время окончания. Иногда стоит немного опоздать к игре и получить идеи от других.
К вашему сведению, ссылка TIO работает не очень хорошо, поскольку она не реализована
\r
должным образом.источник
F #, 142 байта
Я вырос в Ирландии примерно в полукилометре от границы. Помимо знака «Добро пожаловать в Ферману» и смены дорожной разметки, вы не знали бы, что въехали в другую страну. Раньше пересекала его дважды по дороге в школу.
источник
c, gcc 114 байт
Ничего не опущено, полная программа. Программа компилируется в gcc на Ubuntu. Обратный отсчет не покажет длинный след операторов печати из-за системного вызова очистки и остановится, когда обратный отсчет достигнет 0 секунд.
UnGolfed
источник