Введение
Представьте, что на самом деле линия символов состоит из двух рядов. Верхний ряд - точки - представляет часы (24-часовая система), а нижний - запятые - минуты . Один символ может представлять час, минуту или оба - когда это возможно.
Сначала, вероятно, вам придется конвертировать минуты с полуночи в часы и минуты .
Результатом является строка, показывающая текущее время в «точечном формате». Счетчик точек ( апостроф считается здесь как точка и будет называться так! ) - счетчик часов с полуночи, а счетчик запятых - счетчик минут. Я покажу несколько примеров, чтобы прояснить это.
- (Примечание) чч: мм -
result
- (Только часы) 05:00 -
'''''
- (Только минуты) 00:08 -
,,,,,,,,
- (часы <минуты) 03:07 -
;;;,,,,
- (часы> минуты) 08:02 -
;;''''''
- (часы = минуты) 07:07 -
;;;;;;;
- (начало дня) 00:00 -
( пустой результат )
Заметить, что «оба» символа могут использоваться максимум 23 раза - для 23: xx, где xx равно 23 или более.
Символы
Если символ должен (см. Правило 5) экранироваться на вашем языке, вы можете изменить его на одну из альтернатив. Если упомянутых альтернатив недостаточно, вы можете использовать другие символы - но оставляйте их разумными. Я просто не хочу, чтобы побег был барьером.
;
(точка с запятой) - маркер для часов и минут (alt::
)'
(апостроф) - маркер для часов (alt:'``°
),
(запятая) - маркер для минут (alt:.
)
Дополнительные правила
- Код с наименьшим количеством байтов выигрывает!
- Вы должны использовать оба символа, когда это возможно. Для 02:04 результат не может быть
'',,,,
, ни;',,,
. Должно быть;;,,
- Ввод - может быть параметром скрипта / приложения, пользовательским вводом (например, readline) или переменной внутри кода
3.1. Если используется переменная внутри кода, ее длина должна быть максимально возможной. Это1439
(23:59), так это будет выглядетьt=1439
- Общая часть, которая обозначается символом «оба» (12 в 12:05, 3 в 03:10), должна располагаться в начале строки
- Символы могут быть заменены альтернативами, только если они должны быть экранированы в вашем коде.
- Ввод дан в минутах после 00:00 . Вы можете предположить, что это неотрицательное целое число.
Контрольные примеры
Input: 300
Output: '''''
Input: 8
Output: ,,,,,,,,
Input: 187
Output: ;;;,,,,
Input: 482
Output: ;;''''''
Input: 427
Output: ;;;;;;;
Input: 0
Output: (empty)
1439
есть23:59
и нет1339
. (23 х 60 + 59).Ответы:
Pyth, 19 байт
Тестирование
источник
CJam,
222019 байтовПринимает участие от STDIN:
Проверьте это здесь.
объяснение
Мне действительно повезло, как хорошо все сложилось здесь, в частности, назначение часов
'
и минут,
так, чтобы порядок часов и минут в стеке соответствовал строковому представлению символа.Это единственный 3-байтовый блок, который я нашел до сих пор. Было множество 4-символьных решений:
источник
GNU Sed, 37
Оценка включает в себя +1 для
-E
опции для sed.Я не был особенно впечатлен игривостью моего ответа bash , поэтому я подумал, что попробую с sed для удовольствия.
Ввод в унарном, согласно этому мета-ответу .
Попробуйте онлайн
источник
Python 2, 56 байт
Функция, которая печатает (один символ короче, чем
t=input();
).Метод похож на метод Ловжо . Число
,
разное между минутами и часами, с неявным минимальным значением 0. Так'
как это отрицание. Ибо;
вычисляетmin
неявно , беря целых;
несколько часов, а затем обрезая до количества минут.Это экономит символы, чтобы сэкономить
d
, но не количество часов и минут здесь. Аналог с лямбдой был на два символа длиннее (58), поэтому присваивание переменных того стоит.Непосредственная обработка ввода также не спасла символы (58):
Еще одна стратегия с нарезкой, гораздо дольше (64):
источник
Сетчатка , 24
Тривиальный порт мой седь ответ .
Ввод в унарном, согласно этому мета-ответу .
Попробуйте онлайн.
источник
Pure Bash (без внешних утилит), 103
Спасибо @ F.Hauri за сохранение 2 байта.
источник
$1
и$2
вp()
и написатьp , $c
в строке 3.printf "%s"
,c
пустой будет хорошо работать (хотя и не будет использоваться повторно)C 119 байтов
Детальнее
источник
putchar
& целочисленных литералов в качестве символов сохраняет один байт, вытягивание точек с запятой внутри макроса сохраняет еще два :)while
в #define макросе. -1 байтHaskell,
6866 BytesПример использования:
Умная часть здесь в том, что
replicate
вернет пустую строку, если заданная длина будет отрицательной или нулевой, так что я могу применить ее к обеим различиям, и будет отображаться только положительная. Первая часть проста, так как количество точек с запятой - это минимум двух. ЗатемzipWith
применяет функцию к соответствующим элементам.РЕДАКТИРОВАТЬ: понял, что я использовал неправильный символ в течение нескольких минут
РЕДАКТИРОВАТЬ 2: Сохранено 2 байта благодаря @Laikoni
источник
concat$
наid=<<
.JavaScript (ES6) 69
источник
Powershell,
9985 байтparam($n)";"*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+"'"*(($h-$m)*!$b)+","*(($m-$h)*$b)
Используя метод Loovjo , это моя реализация powershell.
ungolfed
Сохранено 14 байт благодаря AdmBorkBork
источник
$m
и$h
деклараций в нее, а затем , используя логическое умножение. Как и так -param($n)';'*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+'°'*(($h-$m)*!$b)+','*(($m-$h)*$b)
Python 3, 98 байт
Вероятно, не самый лучший ответ, но это было очень весело!
источник
Python 2, 61 байт
Explaination:
источник
PHP, 81 байт
Я выбрал переменную input, поскольку она короче, чем чтение
STDIN
или принятие аргументов командной строки.источник
240
. Попробуйте$i>=min($h,$m)?$h<$m?",":"'":";"
(+1 байт). Или используйтеfor($_=1439;$i<max($h=0|$_/60,$m=$_%60);)echo"',;"[$i++<min($h,$m)?2:$h<$m];
(76 байт). Кстати: одиночная кавычка делает-r
невозможным; так что вы должны использовать backtick в течение нескольких часов, если в строке или°
автономном режиме (без кавычек -> -1 байт).JavaScript (ES6),
7771 байтисточник
Perl 6,
103101989769 байтВыводит несколько массивов, но, блядь,наслаждайся. Как обычно, любые возможности игры в гольф присущи.Редактировать: -2 байта: получил храбрость и снял некоторые броски.
Edit2: -3 байта, удалив массивы.
Edit3: -1 байт для печати в правильном формате, используя «лямбда-выражения» и удаляя паратезы.
Edit4: (извините, ребята) злоупотребляет тем, что часы - минуты должны возвращать 0 и наоборот. Удалены ли заявления. Затем снял скобки, потом понял, что лямбда мне вообще не нужна. -28 байт :)
Вау, мне становится лучше в этом.
источник
C, 141 байт
источник
h>0||m>0
. Тогда вам нужноh--;m--;
только один раз в каждой итерации, и{}
forif/else
устареет.else if(h&&!m)
него можно просто иметьelse if(h)
if
иelse
.scanf()
.%24
это необходимо - максимальный ввод 23:59.Гема, 119 знаков
Образец прогона:
источник
Matlab: 89 байт
Тест:
источник
SmileBASIC, 59 байт
Разъяснение:
Это выглядит довольно ужасно, так как нижняя часть
;
даже не такая, как,
в шрифте SmileBASICисточник
PHP, 81 байт
еще несколько решений:
Беги с
echo <time> | php -R '<code>'
.Заменить
1439
вводом, сохранить в файл, запустить.источник
Рубин, 50 знаков
Благодаря:
Ждал так долго, чтобы использовать
Numeric.divmod
, просто чтобы понять, что это ужасно долго.Образец прогона:
источник
(?;*h=t/60)[0,m=t%60]
",',"[0<=>m-=h]*m.abs
05AB1E , 25 байтов
Попробуйте онлайн!
60‰vy„'.Nè×}
может быть определенно сокращен, я просто не мог понять это, и сомневаюсь, что смогу сбрить 7 байтов, чтобы выиграть с этим подходом, если не будет векторной версии×
.Пример (с вводом, равным 63):
D60÷''×s60%'.ׂ.BøJ„'.';:ðK
была моя оригинальная версия, но это даже дороже, чем divmod.60‰WDµ';ˆ¼}-¬0Qi'.ë''}ZׯìJ
еще один метод, который я попробовал ...источник
постоянный ток , 95 байт
Попробуйте онлайн!
источник
Java 8,
1019986 байтОбъяснение:
Попробуй это здесь.
источник