Первоначально опубликовано (и удалено) @Tlink , который, скорее всего, был вдохновлен этим вопросом StackOverflow .
Так как это было позором, это было удалено, потому что это казалось хорошим испытанием в целом, я решил, что перепечатал бы это с надлежащим форматированием и правилами. (Я пытался связаться с @Tlink и получить его / ее разрешение на публикацию, но он не отвечает больше, поэтому я решил опубликовать его сейчас.)
Входные данные: шесть цифр.
Вывод: либо первое, либо последнее действительное время в 24-часовом формате (00:00:00
через 23:59:59
). (Вы можете сами выбрать, выводите ли вы первое или последнее действительное время.)
Пример:
Когда входные данные 1,8,3,2,6,4
, могут быть созданы следующие времена:
12:36:48 12:38:46 12:46:38 12:48:36
13:26:48 13:28:46 13:46:28 13:48:26
14:26:38 14:28:36 14:36:28 14:38:26
16:23:48 16:24:38 16:28:34 16:28:43
16:32:48 16:34:28 16:38:24 16:38:42
16:42:38 16:43:28 16:48:23 16:48:32
18:23:46 18:24:36 18:26:34 18:26:43
18:32:46 18:34:26 18:36:24 18:36:42
18:42:36 18:43:26 18:46:23 18:46:32
21:36:48 21:38:46 21:46:38 21:48:36
23:16:48 23:48:16
Таким образом , мы выведем либо 12:36:48
или23:48:16
в этом случае, будучи первым / последним соответственно.
Правила соревнований:
- Укажите, будете ли вы указывать первое или последнее действительное время в своем ответе.
- Ввод / вывод является гибким. Ввод может быть шесть отдельных целых чисел; строка, содержащая шесть цифр; целочисленный список / массив; одно (возможно восьмеричное) число; и т.д. Вывод может быть правильно упорядоченным списком / массивом цифр; Строка в формате
HH:mm:ss
/HHmmss
/HH mm ss
; каждая цифра печатается с разделителем новой строки; и т. д. Ваш звонок. - Вам разрешается брать цифры в любом порядке, в котором вы хотите, поэтому они уже могут быть отсортированы от минимального к максимальному или наоборот.
- Если с указанными цифрами (т. Е.
2,5,5,5,5,5
) Не может быть создано правильное время , сделайте это так, как вам хочется. Может вернутьсяnull
/false
;"Not possible"
; сбой с ошибкой; и т. д. (Нельзя вывести недопустимое время, например55:55:52
, или другое допустимое время,00:00:00
.) Пожалуйста, укажите, как он обрабатывает входы, для которых не может быть создано допустимое время. - Вам не разрешено выводить все возможные допустимые времена. Только самые ранние / самые последние должны быть выведены / возвращены.
24
для часов (то есть24:00:00
) или60
для минут / секунд (то есть00:60:60
) не действительны. Диапазоны указаны[00-23]
для часов,[00-59]
минут и секунд.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
Input: Earliest output: Latest output:
1,2,3,4,6,8 12:36:48 23:48:16
2,5,5,5,5,5 None possible None possible
0,0,0,1,1,1 00:01:11 11:10:00
1,1,2,2,3,3 11:22:33 23:32:11
9,9,9,9,9,9 None possible None possible
2,3,5,5,9,9 23:59:59 23:59:59
1,2,3,4,5,6 12:34:56 23:56:41
0,0,0,0,0,0 00:00:00 00:00:00
1,5,5,8,8,8 18:58:58 18:58:58
1,5,5,5,8,8 15:58:58 18:58:55
1,1,1,8,8,8 18:18:18 18:18:18
23:48:16
допустимый вывод для примера?06:08:60
ли допустимо, учитывая, что в течение этой минуты была скачок секунды?60
минуты и секунды недействительны. Диапазоны[00-23]
,[00-59]
и[00-59]
. Уточню это в вызове.Ответы:
C (gcc) ,
186174 байтаПопробуйте онлайн!
-12 байт благодаря Кевину Круйссену
Вероятно, не оптимально, но это работает. Как ни странно, по какой-то причине с 7 аргументами реализация gcc на TIO требует, чтобы вы на самом деле предоставили их, или она вызывает ошибки. Однако на моей машине это не нужно.
Формат: G (X, 0,6) -> Y, где X - это 6-значное число, цифры которого должны использоваться, а Y - это 6-значное число, которое, если принять его за время (вставив: соответственно), является минимальным.
источник
{0,1,10,100,1000,10000,100000}
в{0,1,10,100,1e3,1e4,1e5}
. Кроме того, вы можете игратьfor(I=0;I<F;++I){E=O%10;M=G(O/10,L*10+E,F-1);T=T>M?M:T;O=(O/10)+E*D[F];}
в гольфfor(I=0;I++<F;M=G(O/10,L*10+E,F-1),T=T>M?M:T,O=(O/10)+E*D[F])E=O%10;
и снимать скобки по всемуif
. Попробуйте онлайн 174 байта . Также мне нравитсяG(O,L,F,T,I,M,E)
. :)...1e3,1e4,1e5}
не сработало. Спасибо за предложение.Хаскелл ,
1149686 байтТеперь с менее строгим выводом. Принимает ввод в виде строки цифр и сравнивает перестановки с ограничениями при сравнении списка. С минутами и секундами проверяется только первая цифра. Вылетает и горит, если перестановка не является допустимым временем.
Попробуйте онлайн!
источник
Python 2 ,
13111511210910588 байтПопробуйте онлайн!
Ввод / вывод - это списки целых чисел
Выдает ошибку, если время не возможно
Альтернатива:
Python 2 , 88 байт
Попробуйте онлайн!
Возвращает самое позднее время
Возвращает пустой кортеж для неверных времен
Сохраненный
источник
05AB1E ,
2015 байтВведите как отсортированную строку.
Выводим наименьшее время в виде строки.
В случае отсутствия решения выводится пустой список.
Попробуйте онлайн!
источник
JavaScript (ES6),
938988 байтОжидается массив из 6 цифр, отсортированный по убыванию. Возвращает либо 6-значную строку первого действительного времени, либо,
false
если решения не существует.Попробуйте онлайн!
комментарии
Мы рекурсивно пробуем все перестановки входных данных, пока не найдем тот, который проходит гибридный тест, используя как арифметическое, так и регулярное выражение.
источник
Japt , 17 байт
Принимает ввод в виде строки цифр и выводит первое действительное время; циклы бесконечно, если нет действительного времени.
Попытайся
объяснение
источник
Retina ,
7774696562 байтаПопробуйте онлайн! Выводит самое раннее время или пустую строку, если время не найдено. Редактировать:
5@ байт благодаря @TwiNight. Объяснение:Генерация всех перестановок.
:
Работает свой путь , хотя строка , как перестановки генерируются, в конечном итоге на старте.Сортируйте время по порядку.
Выведите первое действительное время.
источник
L0
0G
самом деле.Красный ,
157124 байтаСпасибо Кевину Круйссену за то, что он напомнил мне, чтобы он читал подробности!
Попробуйте онлайн!
Принимает отсортированную строку в качестве ввода. Возвращает,
none
если не удается выделить время.Объяснение:
источник
sort
в начале необходимо? В состоянии задача I: « Вы имеете право взять цифры в любом порядке , вы хотите, чтобы они уже могут быть отсортированы от низшего к высшему или наоборот. »Python 2 , 78 байт
Попробуйте онлайн!
Арно сохранил байт. Благодарность!
Ожидается список как
['1','2','3','4','6','8']
в отсортированном порядке:Выводит целое число, как
123648
для 12:36:48. Я надеюсь, что это приемлемо.источник
62**3
вместо240000
?Желе , 15 байт
Попробуйте онлайн!
Опубликовано после запроса. Подход такой же, как и у другого ответа, однако этот ответ был разработан независимо.
источник
Japt ,
3923 байтаЯ уверен, что есть более короткий способ сделать это, но я хотел попробовать использовать объекты Date в Japt.
Принимает ввод в виде отсортированного массива чисел, возвращает последнее действительное время или пустой вывод, если его не существует.
Потерял 10
фунтовбайтов благодаря Shaggy .Попробуй это здесь .
источник
Рубин ,
68 67 62 5655 байтПопробуйте онлайн!
Входные данные: отсортировано массив цифр (в виде целых чисел).
Вывод: массив цифр или,
nil
если решение не найденоисточник
eval "
я думаю.a*9+b<22
для одного байта.Желе , 17 байт
Я почти уверен, что это не самый короткий подход ... рассмотрим это позже :)
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) , 63 байта
Попробуйте онлайн!
Принимает отсортированный список цифр в качестве ввода. Возвращает
Missing[NotFound]
для неверных входных данных.объяснение
Найти все перестановки ввода. Поскольку входные данные отсортированы, гарантируется, что все допустимые значения времени будут в порядке возрастания.
Найти первый список, который соответствует ...
Первый элемент, обозначенный
a
, равно 0, 1 или 2, и маркируют второй, третий и пятый элементыb
,c
и ,d
соответственно , ...... таким образом, что
a*b
составляет менее 10, аd
иc
менее чем 6, сd >= c
.Хитрость заключается в том, что для всех номеров
00
в24
, произведение двух цифр не более 9, а возможные недействительных числа25
к29
(так как мы заставляем первую цифру 0, 1 или 2) есть продукт наименее 10.источник
Pyth , 37 байт
Тестирование
Объяснение:источник
Perl 5 с
-palF
, 73 байтаПопробуйте онлайн!
Выходы как
HHmmss
и выводит пустую строку для недействительных записей.Каждый ответ, который я сделал недавно, использовался
glob
для перестановок ... Странно!источник
Bash + GNU sed,
83,72, 69 байтseq 0 86399|sed "s/^/date +%T -ud@/e;h;`printf s/%d//\; $@`/\w/d;x;q"
Как это работает
Предварительно сгенерируйте все возможные строки времени для отметок времени в диапазоне от 0 до 86399, используя команду GNU-sed e (xecute) +
date
.%seq 0 86399|sed "s/^/date +%T -ud@/e;h;"
Создайте
sed
сценарий с 6 последовательными командами замещения для каждой входной цифры.%echo sed `printf s/%d//\; $@`
Затем примените подстановки, удалите все входные строки, у которых есть хотя бы одна оставшаяся цифра, выведите первую совпадающую строку (исходная строка времени извлекается из пространства удержания с помощью
x
)Тест
Попробуйте онлайн!
источник
Котлин ,
396391389 байтПонятия не имею, как сделать это меньше. Я думаю, что это вдвое больше, чем возможно. Производит самое раннее время. Спасибо Кевину за 7 байтов!
Попробуйте онлайн!
источник
var l=0>1
и другоеvar e=1>0
? Кроме того, зачемl=l
иe=e
нужно? Две вещи, которые, кажется, работают в гольфе, -var e=1>0
этоvar e=!l
удаление пространства раньше"None"
. Кроме того, любой вывод фальси в порядке, так что"None"
может быть просто0
."0"
может быть просто0
0
без ошибок. А ваша текущая функция, насколько я могу судить, не указывает тип возвращаемого значения, так что не все равно будет неявно возвращаться как объект? PS: я совсем не знаю Kotlin, просто пробовал без кавычек, и результаты были такими же. ;) Может быть, что-то еще не работает из-за этого, чего я не знаю.MATL ,
3130 байтПопробуйте онлайн!
Входные данные - 6 целых чисел, выходные данные - минимальные часы, минуты и секунды в массиве. Сбои для входов, где такое время невозможно.
(-1 байт благодаря @Luis Mendo.)
источник
2&A
на!A
, потому что двоичная матрица никогда не будет вектором строкPerl 6 , 43 байта
Попробуйте онлайн!
Ожидает отсортированный входной массив. Возвращает
Nil
для неверного ввода.источник
Stax , 15 байт
Запустите и отладьте его
Для ввода требуется строка отсортированных цифр. Возвращает первую перестановку, которая удовлетворяет нескольким критериям.
источник
Сетчатка ,
5847 байтПопробуйте онлайн!
Ввод 6 цифр в отсортированном порядке. Выходные данные состоят из 6 цифр, представляющих самое раннее допустимое время, или пустой строки, если допустимого времени не существует.
РЕДАКТИРОВАТЬ: я был идиотом, -9 байт
объяснение
Алгоритм
Для краткости давайте определим младшую цифру 0-5, а старшую цифру 6-9.
Во-первых, переставьте цифры таким образом, чтобы "low" или "high" в каждой позиции были правильными. Правильное расположение для каждого числа старших цифр на входе:
Так как любая перестановка потерпит неудачу, последняя проверка на входе имеет 4+ старших разряда, мы можем полностью проигнорировать этот случай.
Затем отсортируйте минимумы и максимумы по отдельности. В сочетании с перегруппировкой это дает наименьшее значение, которое удовлетворяет ограничениям минут и секунд. Так что это дает самое раннее действительное время, если таковое существует.
Наконец, проверьте, что у нас есть правильное время. Если нет, откажитесь от строки.
программа
Сопоставляет
LHH
и заменяет первые две цифры в этом (становитсяHLH
) и повторяет это, пока больше неLHH
существует. Это дает правильное расположение.На самом деле я солгал. Сортировка не требуется, потому что 1) обмен происходит только между соседними цифрами и только между низким и высоким; и 2) вход отсортирован. Таким образом, минимумы и максимумы по отдельности уже в порядке сортировки.
Сохраняет строку, только если это правильное время
источник