Если задано целое число от 0 до 141 (включительно), перечислите все 24-часовые значения, чьи единицы времени, минуты и секунды добавляют к этому целому числу.
Правила добавления
Числа добавляются по единицам времени, а не по одной цифре.
Например, возьмите 17:43:59
17 + 43 + 59 = 119
Помните, это пример добавления цифр . В действительности вы должны ввести 119, и 17:43:59 будет одним из результатов. Выходные данные должны быть представлены в формате ЧЧ: ММ: СС или Ч: ММ: СС.
Также имейте в виду, что наибольшее возможное число - 141, то есть 23:59:59. Это код гольф, поэтому выигрывает самая низкая сумма. Метод проб и ошибок допускается, но может быть лучший способ сделать это.
Изменить: Пожалуйста, укажите, где в вашем коде вводимое значение.
Ответы:
Желе ,
16302920 байтТеперь с правильным форматом вывода! Большое спасибо Деннису за помощь в отладке этого ответа. Предложения по игре в гольф приветствуются.Попробуйте онлайн!
Изменить: +14 байтов от использования правильного формата вывода. -1 байт от удаления лишнего пробела. -3 от смены
24,60,60
до“ð<<‘
. -6 байтов от изменения+100DḊ€€
доd⁵
.объяснение
источник
Баш, 71
Попробуйте онлайн .
источник
printf
здесь дорого Подойдяt
ближе к нужному формату и исправив его, чтобы он заработал((t-$1))
, вы можете уменьшить его до 71:for t in {0..23}+{00..59}+{00..59};{((${t//+0/+}-$1))||echo ${t//+/:};}
Perl 6 ,
6256 байтПросто проверяет все возможные комбинации в перекрестном произведении всех часов, минут и секунд.
источник
Python 3 , 91 байт
Есть более короткие решения, использующие
exec
(Python 2) или рекурсии (Python 3), но оба требуют неоправданного количества памяти.Попробуйте онлайн!
источник
PowerShell ,
8777 байтСохранено 10 байтов благодаря Джону Л. Бевану
Попробуйте онлайн! (это будет время ожидания, это очень медленно)
объяснение
Довольно просто, начиная с текущего
[datetime]
, добавить 1 секунду 86,399 раз, отформатировать в виде строки, а затем оставить только те, в которых сумма складывается.источник
10000000
на,1e7l
чтобы сэкономить 4 байта ... или даже1e7
на дополнительный байт (я думаю; мне пришлось включить параметрL
в пользу параметра; но подозреваю, что ваш подход избегает такой необходимости.1e7
как минимум 30 минут, иL
я пропустил этот постфикс; Я забыл об этом и не мог найти способ, чтобы получить его в int, который был короче, чем константа. Кто решил, что это[timespan]
интерпретирует[int]
как клещи, а[double]
как дни ??iex
Бит довольно блестящий, хотя это и делает все это дело премного медленнее.iex
хитрость была адаптирована из подсказки здесь: codegolf.stackexchange.com/a/746/6776Haskell, 77 байт
источник
Haskell, 90 байт
Возвращает список строк HH: MM: SS, например
f 140
->["22:59:59","23:58:59","23:59:58"]
.Это три простых цикла через часы, минуты и секунды. Сохраните и отформатируйте все значения, где сумма является входным числом
x
.источник
Pyth - 30 байт
Принимает все возможные времена, затем фильтры.
Тестовый пакет .
источник
Юлия 0,5 , 69 байт
Попробуйте онлайн!
источник
Пакет, 168 байт
Выводит однозначные часы.
источник
Mathematica, 79 байтов
источник
Октава,
83, 87 байтПопробуйте онлайн!
источник
QBIC ,
8272 байтаЭто поражает неудачное место в QBasic, так как приведение к числу, обрезка и добавление,
0
когда это необходимо, действительно дорого.Пример вывода:
Пояснениея написал роман об этом:источник
PowerShell , 67
79байт (неприятная версия)Так как в правилах ничего не говорится о завершении в определенное время (или вообще) и ничего об отсутствии дубликатов, вот ужасное решение:
источник
Ракетка 39 байт
Ungolfed:
источник
MATL , 29 байт
Попробуйте онлайн!
объяснение
источник
JavaScript,
122120 байтПринимает одну дополнительную пустую строку в качестве ввода,
который я предполагаю, не учитывается в размере, Обновлен bytecount (включая исторический), чтобы добавить два байта для инициализации строки.источник
JavaScript (ES6), 110
Меньше гольфа
Тестовое задание
источник
JavaScript, 96 байт
Расширенный вид:
Перебрать все возможные времена, выполняя цикл 86399 до 1,
Вычтите все 3 числа из входного значения, чтобы получить ложное значение, если эти три числа складываются до входного значения. Если значение равно false, выведите значение.
источник
bash, 78 байтов (с использованием утилиты BSD) или 79 байтов (также не-BSD)
Это немного длиннее, чем у @DigitalTrauma и красивого 71-байтового bash-решения @ hvd, но мне здесь очень понравилась идея использования чисел в 60-й строке; Мне любопытно, может кто-нибудь еще немного поиграть в гольф.
С помощью стандартной утилиты BSD:
С более универсально доступной утилитой seq:
Идея состоит в том, чтобы сгенерировать числа от 0 до 83699 и использовать dc для преобразования их в base 60. «Цифры» в выводе dc base-60 представляют собой двузначные числа от 00 до 59, с пробелами, разделяющими «цифры», поэтому в нем перечислены все желаемые времена с 00 00 00 до 23 59 59 почти в необходимом формате.
Если вы выполняете это буквально, числа ниже 60 ^ 2 не являются трехзначными числами в базе 60, поэтому начальные 00 или 00 00 отсутствуют. По этой причине я на самом деле генерирую числа от 60 ^ 3 до 60 ^ 3 + 83699; это гарантирует, что все сгенерированные числа имеют длину ровно 4 цифры в базе 60. Это нормально, пока я в конечном итоге выбрасываю лишнюю первую цифру (01), которая не нужна.
Итак, как только желаемое время сгенерировано, я просто беру каждую четверку с 01 00 00 00 до 01 23 59 59, добавляю последние три числа и вычитаю аргумент $ 1. Если это 0, то я беру все в четверке с 3-го символа (отбрасывая «01»), использую tr для преобразования пробелов в двоеточия и печатаю результат.
источник
PowerShell , 91
97байт (включая ввод)param($x)0..23|%{$h=$_;0..59|%{$m=$_;0..59|?{$h+$m+$_-eq$x}|%{"{0:0}:{1:00}:{2:00}"-f$h,$m,$_}}}
или
param($x)0..23|%{$h=$_;0..59|?{($s=$x-$h-$_)-le59-and$s-ge0}|%{"{0:0}:{1:00}:{2:00}"-f$h,$_,$s}}
<\ S>Расширено и прокомментировано
NB: Превосходит по версии @ Briantist: /codegolf//a/105163/6776
источник