Чтобы победить в этом испытании, вам нужно написать кратчайший сценарий «timeago», который выводит число десятилетий, лет, недель, дней, часов, минут и секунд между заданной меткой времени Unix и временем выполнения сценария.
Вы должны указать разницу во времени в «минимальных сроках», например, 1 week
нет 7 days
, 9 years
нет 0 decades 9 years
. Вы также должны правильно использовать формы множественного числа, например, 1 day
нет 1 days
.
Ваш сценарий должен быть точным с точностью до плюс или минус 1 секунды (поэтому точный второй метод округления не имеет значения).
Time Equivalency Table
1 decade = 10 years
1 year = 31536000 seconds (not technically correct but close enough)
1 week = 7 days
1 day = 24 hours
1 hour = 60 minutes
1 minute = 60 seconds
Вывод должен быть в форме
A decade(s) B year(s) C week(s) D day(s) E hour(s) F minute(s) G second(s)
где A...G
все неотрицательные целые числа и s
только там для множественного числа.
Ноты
- Временная метка всегда будет временем из прошлого. Это может быть отрицательным.
- Ввод и вывод могут быть любыми: stdin / stdout, ввод и возврат значения функции и т. Д.
- Вы не можете использовать какие-либо инструменты, которые уже делают это. то есть, если ваш язык имеет
timesince(timestamp)
встроенную функцию, вы не можете использовать эту функцию.
Я в значительной степени отредактировал это, чтобы прояснить его в надежде смягчить несколько глупую битву между новыми пользователями с неясными вопросами и старыми пользователями, которые требуют совершенства. Это был не страшный вопрос (хотя сейчас это может быть слишком похоже на это ).
Учитывая, что с момента последнего ответа прошло достаточно времени, я объявляю Three If By Whisky с его реализацией Ruby 177 байтов победителем этого контекста!
Ответы:
Рубин,
184177Здесь нет ничего особенно умного, но я подозреваю, что это все еще очень близко к оптимальному.
Пример запуска
источник
J 165
Может быть, можно играть в гольф больше. Использует текущий вызов оболочки для получения текущего времени эпохи Unix, так как эпоха Unix недоступна в J.
Пример выполнения:
источник
Питон - 183
Вывод для временной отметки 999996400 секунд в прошлом:
источник
JavaScript, 392
Также унифицированный код для любопытных
Он обновляется каждые 30 секунд и рассчитывает как единственное, так и множественное число.
Для запуска используйте
t(unix_timestamp)
источник
Javascript, 287
запустить использовать
t(secondsInFuture)
;источник
t(10)
я просто получаю пустоеalert
.t(new Date()/1000 + 10);
eval(i)
на 2 байта короче, чемwindow[i]
.Javascript, 263
запустить из консоли Javascript, позвоните
источник