Компьютеры сейчас повсюду - в автомобилях, поездах, скейтбордах, даже в ядерных реакторах. Возможность того, что ваше программное обеспечение будет работать на устройстве, путешествующем во времени, - это вопрос времени. Вы можете справиться с этим? Вы можете по крайней мере обнаружить это?
Твое задание:
- Напишите программу, которая зацикливается и продолжает запрашивать системное время, чтобы обнаружить путешествие во времени.
- Если время перемещается вперед на день или более между двумя последовательными запросами, это перемещение во времени вперед. В этом случае ваша программа должна напечатать:
TS TS: YYYY? You mean we're in the future?
- Если время перемещается назад на любую величину между двумя последовательными запросами, это обратное путешествие во времени. В этом случае ваша программа должна напечатать:
TS TS: Back in good old YYYY.
TS TS
являются временными метками до и после путешествия во времени.YYYY
год назначения.- Метки времени могут быть в любом формате, который включает в себя как минимум год, месяц, день, час, минуту и секунду, состоящие из 4 цифр, разделенных не цифрами.
Ограничения:
- Вы должны поддержать даты в 19, 20 и 21 веках, по крайней мере.
- Вы должны использовать язык, который существовал до публикации этого задания.
- Вы должны оставлять свои ответы только после того, как этот вызов был опубликован.
- Вы должны использовать язык, существовавший до публикации вашего ответа.
- Вы можете редактировать свой ответ только после публикации.
- Ваша программа не должна печатать какие-либо выходные данные, кроме требуемого. Случайный "Великий Скотт!" разрешено.
Это код-гольф. Самый короткий ответ выигрывает.
Соответствующие ссылки на фильмы, вероятно, сделают ваш ответ слишком длинным, но, возможно, вы получите положительные отзывы.
Ответы:
CJam, 118 байт
Это не работает с онлайн-переводчиком.
Пример вывода после настройки времени моего компьютера дважды:
источник
Python 2, 210 байт
Метки времени печатаются в
YYYY-MM-DD HH:MM:SS
формате, разделенном точкой с запятой. Переключился на Python 2 с 3, так как он на 2 буквы короче для печати. Спам вымогаетGreat Scott!
для тех,ктоне путешествует во времени, так как это проще и дешевле сделать, чем создать условную печать.источник
JavaScript (ES6), 263 байта
Это, вероятно, можно сделать с некоторым переписыванием, чтобы сделать его более эффективным / маленьким.
Источник:
источник
now()
звонков он может пропустить событие путешествия.o=(n=Date).now()
.8.64e+7
на два символа длиннее, чем86400
.Питон 3, 195
В настоящее время не печатает Грейт Скотт, потому что я не могу найти хороший способ сделать его случайным.
источник
Баш + coreutils, 177
источник
Рубин, 194 байта
У меня еще не было времени, чтобы действительно сократить это до размера. Я уверен, что там есть несколько оптимизаций.
Ungolfed (и намного более читаемый):
Изменить: исправлено, чтобы спросить у ОС время, а не человека.
источник
loop{}
вместоwhile 1...end
и попробуйте использовать+
для конкатенации строк вместо интерполяции.Lua 5.3, 174 байта
Это сильно противоречит правилу «Временные метки могут быть в любом формате» ... которое я позволил себе использовать в формате «секунд с 1 января 1970 года».
Если я оставлю свое дрянное толкование печати временных меток и приму структура MeepDarknessMeep, я могу (неэтично) сжать это до ...
155 байт
источник
Timestamps may be in any format, that includes at least the 4-digit year, month, day, hour, minute and second, separated by non-digits.
- это не позволяет секунды с эпохи.Back in good ol YYYY
но он должен печататьBack in good old YYYY
. (Обратите внимание на d в старом)Lua 5.3,
179178173171169168163 байтаПримечание: если вы откажетесь от необходимости полного номера года, вычтите шесть байтов. Причина в том, что lua (или windows или чей-то!)% C не выводит полный год. Из-за этого временные метки могут выглядеть странно!
Это также позволяет использовать метки времени, которые могут быть разделены любыми нецифровыми символами!
Спасибо, что сообщили мне о моей старой ссылке на math.abs и других улучшениях @thenumbernine :)
Lua 5.3, 151 байт
Это «копирование» из метода отображения @ thenumbernine путем отображения только временной метки вместо фактической даты. Это неконкурентоспособно, так как я думаю, что это немного обманывать, просто разместив его здесь, чтобы показать мою работу :)
источник
C: 363 байта
Сокращено с помощью этого удобного скрипта :
Оригинал:
Пример выполнения:
Я мог бы избавиться от 10 байтов, удалив,
sleep
я думаю.Кстати, некоторые удобные для Mac / Linux возможности:
источник
sleep
.JavaScript (ES6)
181174170 байтПримечание: не был протестирован с машиной реального времени.
Этот код работает в Firefox, Chrome, Edge, Node.js Harmony (или io.js в этом отношении). Но я использую
alert
, так что придется заменитьconsole.log
на Node и Io Suport: (187 байт)Разъяснение:
источник
Python,
170165 байтЭто во многом связано с ответом Моргана Треппа. Основной трюк здесь - это нормализация timedelta, которая удобно делает timedelta.days отрицательным при движении даже немного в сторону прошлого, и 0 при перемещении менее чем на день в будущее.
источник
import*
того, как вам не нуженdatetime.
префикс.import*
позволяет писатьdatetime.now()
вместоdatetime.datetime.now()
. Это имеет смысл, в некотором смысле ...Cache ObjectScript, 199 байт
Эта проблема разрешима в простой старой свинке, но была бы необоснованно длительными, поскольку ANSI MUMPS не хватает на
$ZD[ATE]T[IME]
внутреннюю функции для форматирования даты в человек считываемых метки времени.Эта программа будет , вероятно , не обнаружить путешествие во времени , чтобы до 1 января 1841 года , ни времени поездки после 31 декабря 9999, так как эти границы в
$H[OROLOG]
хронометраж собственной потенциирующей . Эта программа также имеет только точность второго уровня; обратные временные сбои на уровне ниже второго, скорее всего, останутся незамеченными.источник
TSQL, 355 байт
На работе, так что никакие модные крутые языки не останавливаются на вашем рабочем сервере SQL Server =)
Гольф версия
Более читаемая версия с небольшими изменениями.
SQL не так уж плох в отношении временных меток, поскольку это тип данных первого класса.
Ради гольфа мы используем тип с точностью до 3 миллисекунд. Сам цикл занимает итерацию меньше (в зависимости от вашего сервера). Ключевым моментом здесь является то, что отметка времени является плавающей точкой, а целочисленный тип подсчитывает, сколько дней прошло. Он работал нормально с 1 января 1753 года по 31 декабря 9999 года.
источник
VBA, 258 байт
Работал с: Excel 2007 в Windows 7
305 байт, если требуется юзабилити
Если вы хотите, чтобы этот код был "тестируемым", добавьте
Application.Wait (Now() + TimeValue("0:00:01"))
послеh=t
Выход
Ниже тестовый файл, который я использовал. Я честно поражен тем, как мало иногда бывает в Windows. Может не работать должным образом на всех компьютерах
источник
Javascript
173 169162 байтаJavascript довольно популярен ...
Пояснение (более старая версия кода):
источник
Обработка, 270 байт
Expanded:
Пример вывода:
источник
Рубин,
160157155154 байтаМного вещей для гольфа здесь
источник
Mathematica, 295 байт
Программа каждую секунду запрашивает у ОС новый TS.
Выход
Проверено ручным вводом даты / времени.
Определенно можно было бы лучше форматировать вывод. Он соответствует требованиям, как указано.
источник
LocalTime[]
? Это появляется только один раз в следующем коде.Groovy, 244 байта
источник
Ява, 378 байт.
источник