Следующее вдохновлено вопросом, который возник сегодня на Stack Overflow .
Учитывая количество микросекунд 0 <= n <= 86400000000
(например 12345678900
), выведите отформатированную строку hh:mm:ss:000:000
, например 03:25:45:678:900
.
0 -> '00:00:00:000:000'
12345678900 -> '03:25:45:678:900'
86400000000 -> '24:00:00:000:000'
У меня есть решение в Python в 209 байтов, но может ли оно пойти ниже?
hh:mm:ss.000000
, вероятно, он был бы лучше (и проще). Тем не менее, не могу изменить это сейчас.Ответы:
Python 2,
8279 байтСоздает строку, повторяя серию divmods. Единственный причудливый бит это тот
%7/2
, который отображает1000 -> 3
и60 -> 2
.источник
Pyth, 31 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
Баш + кореутилс, 61
Самый короткий "основной" язык до сих пор ...
Тестовый вывод:
источник
CJam,
37 3534 байтаЭто довольно долго .. Игра в гольф сейчас ..
ОБНОВЛЕНИЕ: 1 байт сохранен благодаря @ Sp3000
Попробуйте это онлайн здесь
источник
C 97 байтов
Тестовый код:
источник
q (34)
Я уверен, что это может быть короче
например
источник
":"sv 0 8 11__[;8]15$2_($)"n"$1e3*
Юлия,
1109695 байтЭто создает безымянную функцию, которая принимает целое число в качестве входных данных и возвращает строку. Чтобы назвать его, дайте ему имя, например
f=t->...
.Ungolfed + объяснение:
Примеры:
источник
C #,
179175 байтЕсли у вас есть встроенные функции, почему бы не использовать их?
С лучшим форматированием:
источник
Excel,
6563 символаПредполагая, что ваши микросекунды находятся в A1 :
Выход:
источник
Perl,
14178 байт77 байт кода, +1 за
-n
флаг. Бежать с:Спасибо Томасу Ква и chilemagic за сокращение моего размера кода почти вдвое.
источник
3600000000
может быть36e8
.chomp($n=<STDIN>);
вы можете запустить его как однострочник с-n
флагом (который считается за 1 символ). Вам также не нужноint(..)
вокруг каждого$_
. Используя наконечник Томаса, мы можем получить его,echo 12345678900 | perl -ne'printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3'
и может быть даже более короткий путь!\n
входная строка. Вы также можете заменить строку на"%02d:"x3 ."%03d:%03d"
printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3
вы добавляете дополнительный байт для-n
флага. Если вы используете,-nle
например, это будет считаться дополнительным 2 (дляn
иl
). Вы получаете-
иe
(или,E
если вам нужно использоватьsay
) бесплатно.Matlab - 88
89байтПолучил один байт с решением без использования встроенной функции:
Создайте встроенную функцию, которая принимает числовой входной аргумент
t
и возвращает строку.он использует векторизованную комбинацию
fix
иmod
для разделения элементов времени, а затем отображает.это немного расстраивает, что форматирование выходной строки занимает так много, больше, чем сами вычисления ...
Тест:
Версия 89 байтов:
Он делит число, использует встроенную функцию для части чч: мм: сс, которая не может обрабатывать микросекунды, поэтому строка завершается с помощью комбинации
fix
иmod
операцийисточник
JavaScript (ES6),
128118116111 байтВозможно, в этом есть некоторый потенциал для игры в гольф.
демонстрация
Это ES6, так что только Firefox, пока что:
источник
C
113103105 байтРЕДАКТИРОВАТЬ: вытолкнул еще несколько байтов
ИСПРАВЛЕНИЕ: удален длинный тип, спасибо некоторым пользователям
Не самый короткий ответ C, но я повеселился с возвратом кареты, поэтому мне показалось, что кому-то это может понравиться.
Назовите это как:
источник
CoffeeScript, 127 байт
Взял подход в ответе ASCIIThenANSI . Очень жаль, что в API консоли JavaScript нет форматных заполнителей для заполнения чисел.
источник
Powershell, 153
использование
источник
F #,
111 92102 байтаПервая итерация: базовая идея.
Вторая итерация: меньшие константы
Третья итерация: правильное форматирование для однозначных частей.
Обратите внимание, что для работы этой функции должен быть указан int64.
Пример выходов:
источник
PHP -
115102 байтаРешение в 155 байтов (для удобства чтения обернуто здесь в 3 строки):
Вторая строка вычисляет (изнутри наружу) точные значения компонентов, начиная с микросекунд.
Более короткая версия (115 байт, для удобства чтения обернута в две строки):
Он также использует встроенные назначения для вычисления числа входных микросекунд в миллисекундах, секундах, минутах и часах с использованием чисел с плавающей запятой. Оператор модуля (
%
) и формат десятичного числа (%d
)printf()
затем используются, чтобы заставить их целые числа (дробная часть игнорируется).Другое решение, которое использует функции даты (102 байта)
Часть часы: минуты: секунды обрабатывается функциями даты PHP,
gmdate()
аstrtotime()
миллисекунды и микросекунды извлекаются как строки из входного значения.Использование:
источник
Java, 215 байт
Метод
f
выполняет некоторые вычисленияn
для определения часов, минут и т. Д. И делегирует его методуp
для правильного форматирования каждого значения.отформатирован:
Использование:
источник
Рубин - 82 байта
источник