Самый короткий код для генерации правильного времени на часах выигрывает.
Вы опытный путешественник во времени и, как известно, останавливались на многих планетах во время своих путешествий. Каждая планета вращается с разной скоростью, и поэтому продолжительность дня отличается от нашего обычного 24-часового дня. В результате планеты используют часы с разным количеством часов. Часы на часах с x часами расположены аналогично нашим (1, 2, 3, ..., x ) с числом, вращающимся по часовой стрелке, а x находится сверху.
Кроме того, каждая планета имеет разное количество минут в часе и разное количество секунд в минуте. Вам будет дано время начала и количество прошедших секунд, из которых вы должны определить время окончания.
Ввод может быть взят непосредственно из файла, переданного в качестве аргумента, или в качестве стандартного ввода. Первая строка ввода будет количеством часов, которые вам нужно обработать. После этого каждые часы имеют три строки ввода, которые содержат целые числа в следующем формате:
x y z
h m s
t
Значение каждой буквы ниже.
x = количество часов в дне (2 <= x <= 99)
y = количество минут в часе (2 <= y <= 100)
z = количество секунд в минуте (2 <= z <= 100)
h = час времени запуска (1 <= h <= x)
m = минута времени запуска (0 <= m <y)
s = секунда времени запуска (0 <= s <z)
t = количество прошедших секунд
Выходными данными должно быть время окончания каждого часа после того, как t секунд прошло с момента запуска. Ваш вывод должен быть отформатирован как стандартное время (ЧЧ: ММ: СС). Числа должны быть дополнены, если необходимо, чтобы все числа были двузначными.
Тестовые случаи
вход
2
5 20 10
1 10 5
2633
6 25 5
6 0 3
290
Выход
04:13:08
02:08:03
вход
1
14 17 11
12 16 10
1530
Выход
07:03:00
вход
2
8 40 25
3 1 15
10620
14 15 20
1 14 0
-580
Выход
05:26:10
14:00:00
Ответы:
GolfScript - 50 символов
Значения (H / M / S) собираются путем перемещения их в начало стека (
])\
). Час «недолёта» в 0 обрабатывается с помощьюor
. Обработка нуля обрабатывается с помощью100+`(;
, хотя, я полагаю,0`\+-2>
одинаковой длины.источник
Python, 142 символа
источник
for i in ' '*input()
вы можете использоватьi
вместо,' '
вR()+' '+R()
сохранении двух символов.exec"x,y,z,h,m,s=map(int,(R()+' '+R()).split());t=input()+h*y*z+m*z+s;print'%02d:%02d:%02d'%((t/y/z-1)%x+1,t/z%y,t%z);"*input()
t/y/z%x or x
это персонаж короче.GolfScript
6260 символовРедактировать: мне удалось получить массив, ранее сохраненный в a, чтобы он находился в стеке, таким образом требуется немного больше переключения, но никакого существенного улучшения.
62 версия:
Я уверен, что это можно сделать намного лучше, я просто не мог придумать ничего лучше.
1: создать массив всех входных данных, выделить первый элемент, сгруппировать остальные в блоки по 7.
a / 13: использовать первое число из входного значения для запуска цикла такое количество раз.
2: Сохранить пустой массив в.
3: выбрать блок из 7 и расширить его до 7 отдельных номеров.
b / 8: запустить цикл 3 раза, по одному разу для каждой из секунд, минут и часов.
4: сложите последние два числа вместе, для первой итерации, которая является секундами и временем для сдвига, для следующих это минуты и часы с переполнением из предыдущего цикла. Сделайте вторую копию результата.
5: Разделите копию на ее предел, чтобы произвести переполнение и сдвинуть результат назад на один пробел.
6: Рассчитайте модуль предыдущего деления, чтобы получить часть результата.
7: Добавьте эту часть в массив.
9: Удалите переполнение часа, а также второй и минутный пределы из стека.
10: Возьмите часть часа a, если она равна нулю, замените ее пределом часа, поместите его обратно в массив.
11: Для каждого элемента в a поместите «0» вперед, преобразовав таким образом в строку, и отбросьте все, кроме последних 2 символов.
12: Сверните массив в одну строку, разделенную символом «:», поместите новую строку и сдвиньте массив, содержащий оставшиеся задания, в начало стека, таким образом, готовясь к следующей итерации.
источник
J
(172/35)13799107Сейчас проходит все приведенные тесты.
172 - это все; 35 - это количество символов, которое я бы дал, если бы я действительно издевался и отказывался выполнять IO, как указано. (Я все еще немного его изменил; часы - это функция, принимающая имя файла, предназначенное для интерактивного использования в J.)Я очень надеюсь, что в J это будет намного проще, чем я выгляжу.
Редактировать: выяснил, как сделать лучший анализ ввода в J, устранен charsub, переключен на вызов и вывод командной строки.
Редактировать 2: Изменен ввод центральной функции в матрицу 3х3, устранены многие надоедливые скобки, удалены имена
Редактировать 3: 0 часов обработано.
Объяснение:
Мой J все еще не велик, а IO - боль, как всегда. Так что кусочки этого чокнутые.
1 0 0+{.#:{.&{:+{.#.1 0 0-~1&{
принимает матрицу три на три (состоящий из входных строк, последние два элемента являются мусором)1 0 0
)".;._2(1!:1)3
получает 3-х столбцовую матрицу ввода с 0 в незаполненных позициях.,&}.$~,&3 3&{.&{.
вырезает первую строку из входных данных и формирует оставшиеся строки в Nx3x3."2
модифицирует центральный глагол принять 3x3 случаи.10 10&#:
дает 2 десятичных знака для каждого числа, дающего матрицу Nx3x2. (Получение 0 для заполнения было болью .),"2":"0
преобразует цифры в ASCII (Nx3x2x1) и выравнивает последний столбец, снова давая Nx3x2 как ASCII.LF,~"1([,':',])/"2
вставляет: между каждым элементом и добавляет их (Nx7) и добавляет перевод строки для (Nx8).4(1!:2)~
печатает каждый ряд.источник
Хаскель, 159 знаков
divMod
не стоит!foldr
подход (который работает для систем времени с любым количеством компонентов!)f
tail
источник
Рубин, 128 символов
Бесстыдно копирует с питона:
источник
Haskell - 219 необходимых символов
источник
PHP (241 символ)
Принимает данные из файла, переданного в качестве аргумента.
И безглым
И просто отметим, что без сигил (знак доллара) получается 205 символов.
источник
Java,
486371 символовВерсия без поддержки: http://pastebin.com/6LiTdGyi
Это дает тот же результат, что и в приведенных примерах.
Но я не согласен с таким поведением: часы не имеют столько цифр, сколько часов в день: их половина.
Это означает, что если вы добавите 3600 секунд к 12:50:12, он должен вывести 01:50:12, а не 13:50:12 (в нашей стандартной системе 24/60/60).
Я обработал это в своем коде, но закомментировал это в своем решении, чтобы оно соответствовало примерам. Конечно, если учесть это, то время ввода может считаться неоднозначным, если вы не добавите маркер AM / PM.
Но в любом случае у головоломки есть несоответствие: если 00 часов следует заменить на x, то часы> (x / 2) следует заменить на часы - (x / 2).
Редактировать: Гольф версия:
источник
package
декларации; 2. не использоватьfinal
; 3. использовать односимвольные имена переменных и имен классов; 4. обычно используйте самые умные способы, чтобы сделать максимально короткий код.int[]c={i(s),i(s),i(s),i(s),i(s),i(s),i(s)}
вы можете захотеть использоватьint a=i(s),b=i(s),c=i(s),d=i(s),e=i(s),f=i(s),g=i(s)
. Да, вы добавляете сюда 11 символов, но при каждом использовании сохраняете три символаc[x]
, что означает, что после 4 таких случаев он оплачивается сам по себе. Я насчитал 13 таких экземпляров, а это значит, что вы экономите всего 28 символов!Баш - 189 символов:
источник
printf
Между этими аргументами и между этими аргументами требуются пробелы ...PHP,
229228 символовФайл должен быть передан в скрипт в качестве аргумента
Ungolfed:
Changelog:
229 -> 228: нет необходимости устанавливать оставшееся время при выполнении деления на часы
источник
Баш, 139 знаков
источник
Scala 184 символа:
В противоречие с правилами, я утверждаю, что для
Выход не должен быть
но
и это то, что производит мой код. Пожалуйста, покажите мне часы, которые показывают 24:00:00 на земле вместо 00:00:00 - возможно, 24:59:59. Или вы ожидаете последовательность:
вместо того
источник
Python 2 , 137 байт
Попробуйте онлайн!
Только немного короче, чем другой ответ Python , но выбирает другой путь.
Ungolfed Объяснение:
источник
Хаскелл (
815624 символа без гольфа, без пустых строк)Мои распечатки 00:00:00 вместо 12:00:00 или аналогичные для «полуночных» времен.Изменить: изменил это.Мог бы абстрагироваться еще от нескольких вещей, но с ж / д. Он полностью игнорирует первую строку входного файла и, как правило, кричит на вас за неправильно отформатированные файлы.
источник