Напишите короткую программу, которая занимает положительное число секунд, представляющих возраст, и выводит оценку этого времени на английском языке.
Ваша программа должна вывести наименьшее точное количество времени, которое прошло, среди следующих метрик и их продолжительности в секундах:
second = 1
minute = 60
hour = 60 * 60
day = 60 * 60 * 24
week = 60 * 60 * 24 * 7
month = 60 * 60 * 24 * 31
year = 60 * 60 * 24 * 365
Примеры
input : output
1 : 1 second
59 : 59 seconds
60 : 1 minute
119 : 1 minute
120 : 2 minutes
43200 : 12 hours
86401 : 1 day
1815603 : 3 weeks
1426636800 : 45 years
Как вы можете видеть выше, после времени, скажем, 1 дня (60 * 60 * 24 = 86400 секунд), мы больше не выводим минуты или часы , а только дни, пока не превысим время одной недели , и так далее.
Считайте данный промежуток времени возрастом. Например, через 119 секунд прошла 1 минута , а не 2.
правила
- Нет спецификации для 0 или отрицательных входов.
- Следуйте правильной плюрализации. Каждая мера больше 1 должна включать
s
следующее слово. - Вы не можете использовать ранее существующую библиотеку, которая выполняет функции всей программы.
- Это код гольф, самая короткая программа выигрывает очки интернета.
- Повеселись!
Ответы:
Желе , 62 байта
Полная программа печати результата.
(Как монадическая ссылка возвращает список целых чисел, за которыми следуют символы)
Попробуйте онлайн!
Как?
источник
C
194180144128 символовСпасибо @gastropher за сокращение кода. Я забыл, что C допускает неявные параметры, используя функции в стиле K & R! Также спасибо @gmatht за идею размещения литералов внутри вместо массивов. Я расширил это до символов,
злоупотребляяиспользованием широких символов /char16_t
строк! Компилятору, похоже, не нравится\1
его форма.Попробуйте онлайн!
Оригинальное решение
Я разделил массивы на отдельные строки, чтобы было легче увидеть остальную часть решения.
Попробуйте онлайн!
Выполняя делители по порядку от наибольшего к наименьшему, мы получаем самую грубую единицу времени. Программа ведет себя неправильно, если вы даете ей 0 секунд, но, поскольку спецификация явно исключает это значение, я считаю это приемлемым.
источник
Perl 5 , 110 байт
Попробуйте онлайн!
источник
Stax , 54 байта
Запустите и отладьте его
Вот распакованное, ungolfed, ascii представление той же программы.
После выполнения, поскольку других выходных данных нет, вершина стека печатается неявно.
Запустите этот
источник
JavaScript (ES6), 131 байт
Попробуйте онлайн!
источник
,
). Я узнал что-то новое. Отличное решение.split
массив[',']
. Следовательно, это работает только с функциями, которые принудительно приводят к строке.Ява 8,
197195157 байт-38 байт благодаря @ OlivierGrégoire .
Объяснение:
Попробуйте онлайн.
источник
/=
туда, где это было нужно.n->{for(int t=60,d[]={1,t,t*=60,t*=24,t*7,t*31,t*365},x=7;;)if(n>=d[--x])return(n/=d[x])+" "+"second,minute,hour,day,week,month,year".split(",")[x]+(n>1?"s":"");}
(162 байта), вероятно, хорошая база для игры в гольф.n/7+
вместо этого(n/=7)+
и т. Д.2678400
, выходное значение должно быть1 month
вместо1 months
(единственное число вместо множественного числа).Котлин ,
205203196 байтПопробуйте онлайн!
источник
T-SQL , 306 байт (281 байт без ввода-вывода)
источник
TRIM
не определено, возможно, так и должно бытьLTRIM
. Междуweek
иday
, у вас+
, возможно, должен быть,
+
этого должен был быть,
и я исправил это сейчас. Однако этаTRIM
функция определена с SQL Server 2017. Спасибо.R 157 байт
Попробуйте онлайн!
cut
удобно, так как он разбивает диапазоны наfactor
s, которые хранятся внутри какinteger
s, что означает, что мы можем использовать их также как индексы массива. Возможно, мы можем сделать что-то более умное с именами периодов времени, но я пока не могу понять это.источник
APL + WIN,
88119 байтОригинальная версия пропустила недели и месяцы, как указал Фил Х; (
Запрашивает ввод на экране количества секунд
объяснение
источник
JavaScript (Node.js) , 177 байт
Попробуйте онлайн!
источник
Пакет, 185 байт
источник
Python 2 ,
146144 байтаПопробуйте онлайн!
2 байта сохранены благодаря Джонатану Аллану
источник
if n/x
сохраняет байт.0
сохранением другого.PHP , 183 байта
Попробуйте онлайн!
источник
Юлия 0,6 , 161 байт
Попробуйте онлайн!
источник
Рубин , 129 байт
Попробуйте онлайн!
источник
Perl 6 / Rakudo 138 байт
Я уверен, что дальше идти, но сейчас
эксплицировать:
источник
R 336
Работа кипит
источник
R , 246 байт
Попробуйте онлайн!
Это использует форматирование времени вместо арифметики, просто для этого. Может быть, другие могли бы сделать это меньше?
источник