Инкрементальный формат игрового времени
Цель
В инкрементальных играх часто используется таймер обратного отсчета, в котором указываются дни, часы, минуты и секунды до завершения задачи. В зависимости от доступного места они могут быть отформатированы как:
2d 13h
23h 59m 48s
14m
3h 0m 0s
Цель этого кода гольф состоит в том, чтобы написать функцию или программу, которая выполняет это форматирование.
входные
- Общее количество секунд.
- Максимальное количество сегментов для вывода.
Выход
- Сегменты включают в себя:
- 0 недель
- 0 дней
- 0 часов
- 0 минут
- 0 секунд
- Каждый сегмент разделен одним пробелом.
- Отображаемые сегменты должны быть смежными. Например, вы не будете показывать часы и секунды без показа минут, даже если минут нет.
- Однозначные значения не имеют начальных нулей, хотя нулевое значение должно быть показано как
0
. - Значения округлены в меньшую сторону.
- Первый отображаемый сегмент является первым ненулевым значением.
Тестовые случаи
seconds segments output
0 1 0s
123 1 2m
123 2 2m 3s
123 3 2m 3s
82815 3 23h 0m 15s
307891 2 3d 13h
307891 4 3d 13h 31m 31s
604800 1 1w
604800 6 1w 0d 0h 0m 0s
выигрыш
Решение с самым низким количеством байтов за одну неделю получит «принятие».
Правки
- Уточнил, какой сегмент является первым, как показано в примерах.
- Добавлен тестовый пример 4 согласно запросу.
307891 1
?0w
или1w
.3d
? «Первый отображаемый сегмент - это первое ненулевое значение»Ответы:
CJam (снимок)
4138 байтВыше используется символ каретки, так как два символа не печатаются.
Спасибо @ Sp3000 за вывод 2 байта.
тестирование
В последней стабильной версии (0.6.5) есть ошибка, которая может привести
{}#
к возврату целых чисел вместо длинных. Как это ни парадоксально, это можно обойти, приведя к integer (i
).Чтобы выполнить это с кодом с помощью онлайн-переводчика, щелкните эту постоянную ссылку или скопируйте код из этой вставки .
Кроме того, вы можете загрузить и создать последний снимок, выполнив следующие команды:
Вы можете создать файл CJam следующим образом:
Как это устроено
источник
Ява,
197191 байтЯ только что заметил, что Java поддерживает декларации вроде
String a[]
. Это позволило мне перенести объявлениеb
иz
в ту же строку, что спасло меня отString
повторной записи .источник
;z=" ")
- очень умно.C
134127110104103 байтНовая версия:
Предыдущая версия:
источник
Pyth,
3943 байтаредактировать: +4 символа, потому что я забыл
0s
контрольный пример.Это включает в себя 2 непечатаемых символов. Получить актуальный код и попробовать его онлайн: Демонстрация
Объяснение:
источник
Python 2,7 -
181178174 байтаМоя первая попытка чего-нибудь сыграть в гольф.
источник
if n!=0
на простоif n
.Юлия, 158 байт
Я уверен, что это может быть короче с более умным подходом, но это то, что у меня есть сейчас.
Это создает безымянную функцию, которая принимает два целых числа в качестве входных данных и возвращает строку. Чтобы назвать его, дайте ему имя, например
f=(s,g)->...
.Ungolfed + объяснение:
Примеры:
источник
Scala, 147 байт
источник
RS , 367 байт
Живая демоверсия и все тестовые случаи.
Грязный, грязный, грязный ...
Для выполнения тестовых примеров в Chrome для Android требуется около 3-7 секунд. Как не использовать режим отладки, который может заморозить ваш браузер в этом случае из - за всей продукции , которая будет печататься.
источник
C #,
239 237 170164 байтаЭто далеко не так компактно, как другие решения, но я не могу поставить эту задачу, не попробовав сам.
Эта последняя итерация была вдохновлена ответом ESC .
Отступы для ясности:
источник