Мой босс должен знать, сколько нужно времени, чтобы сложить вместе два целых числа. Но я не люблю работать по выходным, и я думаю, это справедливо, что мой код тоже не работает. Проблема в том, что начальник - требовательный парень, и он считает, что я должен приложить какое-то время, чтобы убедиться, что время не изменилось, и я знаю, что он собирается проверить, правильно ли работает код.
Можете ли вы написать мне короткую программу, которая:
- Принимает два целых числа и возвращает правильный результат сложения и время, необходимое для выполнения сложения - это время должно быть правдоподобным и основываться на времени выполнения кода. Однако, если вам нужно прокрасться некоторые операции между временным кодом, который заставляет его работать немного дольше, чем это должно быть разрешено. Однако вы не можете просто вывести поддельное время.
- Не работает по выходным в кодах по местному времени (он не может просто вернуть неправильный результат, код должен сломаться, ошибиться или иным образом не выполнить)
- Не сразу понятно, почему это не работает по выходным
Я знаю, что первый критерий довольно странный, но я хотел убедиться, что люди могут импортировать библиотеки даты / времени, если это необходимо, не вызывая подозрений в отношении критерия 3. Однако я уверен, что есть некоторые умные люди, так что -10 символов для любой, кто может сделать это, не используя функции календаря из стандартных библиотек дат
Относительно «стандартных библиотек даты / времени»
Примеры стандартных библиотек даты и времени включают в себя питоны datetime
, date
библиотеку объектов javascript java.util.Date
и тому подобное. Функции для вычисления временных шкал для выполнения, такие как timeit
модуль pythons, не будут нарушать эту критерию, поскольку босс ожидает, что код будет синхронизирован. В некоторых случаях эти библиотеки нужно будет импортировать для доступа к любым функциям времени, поэтому разрешается вызывать функции, которые возвращают время с начала текущей эпохи, как целое число, но функции календаря, которые возвращают структурированные объекты даты и времени, которые могут давать отдельные часы, дни и т.д ... не допускаются.
редактировать: Что касается вопроса Dan04, код должен соответствовать этим 4 критериям относительно того, когда он будет работать или не работать. Вы также должны объяснить, как ваш код проверяет время, так как провал в понедельник утром / в пятницу должен дать некоторую возможность для некоторых творческих способов сократить код.
- не должен работать с 00:00:00 субботы до 23:59:59 в воскресенье вечером.
- всегда должен работать с 06:00:00 утра понедельника до 19:59:59 вечера пятницы
- может работать или не работать с 00:00:00 утра понедельника до 5:59:59 утра понедельника
- может работать или не работать с 20:00:00 в пятницу вечером до 23:59:59 в пятницу вечером
edit2: по очевидным он должен соответствовать следующим 3 критериям:
- Не должен вызывать функцию, которая вызвала
DayOfWeek
(или похожую), без использования ее для вычисления времени функции. - Не следует использовать субботу или воскресенье или их сокращения на английском языке.
- Не следует использовать Sat или Sun (или в их альтернативных буквенных регистрах) без идентичной именованной переменной, не используемой для определения дня недели или при определении, должен ли код выполняться.
источник
Ответы:
Ребму : 17 (27 - 10, обфусцировано) или 30 без обфусцирования
Rebmu специально разработан, чтобы играть в гольф-код, будучи читабельным (для тех, кто получает «хитрость»), поэтому правило запутывания противоречит его принципу. Но:
Работает весь день по будням:
... но по выходным он просто ничего не делает
Объяснение:
Использование немытых и заметных заглавных букв букв - это отдельные слова, а отсутствие начального заглавного букв означает, что мы не делаем сет-слово, мы получаем сокращенное Rebol:
Если не сокращать это, то, что вы получите, это:
Номера дат в Реболе нумеруются от 1 для понедельника до 7 для воскресенья. Более грамотный способ вывести день недели из рабочего дня - это сказать,
d/weekday
но вы также можете получить его сd/7
. Мое предпочтительное решение без изменения вещей просто для адаптации к этой проблеме было бы больше похоже на:Но если бы я обновил словарь для общего применения в соответствии с этим стилем проблемы, который, вероятно, возникает достаточно часто, чтобы не хотеть каждый раз повторять подробный текст «Ребол», я бы, вероятно, сделал «МОН через СОЛНЦЕ» 1–7) и сокращал бы его. ТЕПЕРЬ НЕДЕЛЯ, в этот момент это выглядело бы скорее как ...
Примечания
Как обычно, вы можете сделать саму «программу» чуть короче, если разрешите передавать входные данные в Rebmu в качестве аргументов и просто примете результат оценки (здесь, либо значение типа time, либо NONE), не печатая его:
Кроме того, дельта-время, даты, генерация изображений и огромное количество вещей уже включены в полу-мегабайтный исполняемый файл Rebol с нулевой установкой .
источник
Golfscript,
5156 - 10 = 46http://golfscript.apphb.com/?c=OycxIDUnCiciI3tUaW1lLm5vdy50b19pfSInLn5%2BQH4rQH5%2BMiQtQDYwIDU%2FOS8vKCg3JSgsKT1dYA%3D%3D
Удовлетворяет всем трем условиям и не использует никаких стандартных библиотечных функций, кроме тех, которые необходимы для получения текущего времени. Таким образом, я считаю, что могу претендовать на бонус.
Что касается критериев запутывания - хотя он и соответствует букве закона, он не выглядит невинным. Совершенно очевидно, что что-то происходит с магическими константами 60 и 7. К сожалению, любое запутывание поднимает некоторые брови.
Ввод: два целых числа, разделенные пробелом
Вывод: литерал массива golfscript - два целых числа (сумма, время в мс), разделенных пробелом и заключенных в квадратные скобки.
пример:
'"#{Time.now.to_i}"'
является строкой golfscript, содержащей строковый литерал golfscript, содержащий исполняемый блок Ruby для получения текущего времени. Стек теперь содержит ввод внизу и рецепт времени вверху..~~
клонирует рецепт времени и оценивает его дважды. Первая оценка превращает строковую строку в числовую строку, выполняя секцию ruby. Вторая оценка превращает его в число. Стек теперь содержит (снизу) вход, рецепт времени и время начала@~+
вытаскивает ввод наверх, оценивает его и выполняет сложение. В стеке теперь хранится рецепт времени, время начала и сумма.@);' "'+~~
извлекает рецепт времени, меняет'"'
его' "'
(см. обсуждение ниже) и дважды оценивает его. Стек теперь содержит время начала, сумму и время окончания.2$-
клонирует время начала к вершине и вычитает его из времени окончания. Стек теперь содержит время начала, сумму и разницу во времени.@86400/
тянет время начала к вершине и преобразовывает это от секунд до дней.((7%(
уменьшает число дней с начала эпохи в два раза (это был четверг, мы хотим субботу), принимает по модулю 7 и уменьшает еще раз. Карты выходных дней до -1 и 0, карты выходных дней до 1..5.,)=
создает таблицу целых чисел этого размера. Это нормально - массив отрицательного размера пуст. Тогда он берет свой последний элемент. К сожалению, некоторые переводчики еще не рухнули. Вместо этого они выскакивают ноль - который безопасно отбросить. Поэтому вместо отбрасывания мы используем его как индекс для этого массива. Взятие нулевого индекса в конце концов приводит к сбою интерпретатора, но взятие элемента за пределами допустимого - ничего не помещается в стек. В этом случае доступ к массиву всегда выходит за границы, поэтому нам нечего отбрасывать.]`
захватывает стек и форматирует его как массив golfscript.источник
JavaScript
Он использует эту утилиту:
И вот фактическая функция:
Надеюсь, это было не сразу очевидно ...
источник