Предупреждение: НЕ пользуйтесь медицинскими советами из этого поста. Если вам нужна медицинская консультация, обратитесь к квалифицированному специалисту.
У меня болит голова. Мне нужны таблетки от головной боли.
Я расскажу вам о последних нескольких дозах, и вы скажете мне, когда я смогу принять следующую дозу без передозировки.
Я дам вам эту строку:
P: 00:00, I: 02:00, P: 04:00, I: 06:00
И ты дашь мне это:
Next P: 08:00, I: 10:00
Входные данные:
Строка, представляющая время приема каждого лекарства, в следующем формате:
P: 00:00, I: 02:00, P: 04:00, I: 06:00
Это означает, что Парацетамол был взят в 00:00 и 04:00, а Ибупрофен был принят в 02:00 и 06:00.
Выход (обновлено):
Строка с указанием времени, в течение которого можно принимать следующие лекарства, в следующем формате:
Next P: 08:00, I: 10:00
- Порядок вывода должен соответствовать порядку приема лекарства. - Если ибупрофен следует принимать в 09:35, а парацетамол - в 10:22, то результат должен быть
Next I: 09:35, P: 10:22
- Если время для следующей дозы каждого лекарства одинаково, порядок вывода не имеет значения:
Next P: 08:00, I: 08:00
ИЛИNext I: 08:00, P: 08:00
- Если принимается только одно лекарство (во входной строке), то только выходное лекарство должно быть в выходной строке:
Next P: 02:00
Правила:
- Будет только два вида лекарств, парацетамол «P» и ибупрофен «I».
- Парацетамол можно принимать один раз каждые 4 часа, максимум 4 раза в течение 24 часов.
- Ибупрофен также можно принимать один раз каждые 4 часа, максимум 4 раза в течение 24 часов.
- Парацетамол и ибупрофен можно принимать вместе или в разное время. Один не учитывается в дозировке другого.
- Время во входной строке всегда будет последовательным, но может быть больше полуночи (23:00 -> 03:00).
- Время во входной строке не будет превышать 24 часа
- Максимум 4 раза для каждого лекарства (всего 8 максимум)
- Входные данные всегда будут непустыми и содержат как минимум одно лекарство и один раз
Примеры:
Две дозы каждого с двухчасовым интервалом:
"P: 00:00, I: 02:00, P: 04:00, I: 06:00" -> "Next P: 08:00, I: 10:00"
Разовая доза парацетамола
"P: 22:00" -> "Next P: 02:00"
Максимальная доза парацетамола в течение 24 часов, разовая доза ибупрофена
"P: 04:05, P: 08:10, P: 12:15, I: 12:30, P: 16:25" -> "Next I: 16:30, P: 04:05"
Тестовые случаи:
"I: 06:00" -> "Next I: 10:00"
"P: 22:00" -> "Next P: 02:00"
"P: 22:00, P: 02:00, I: 06:00" -> "Next P: 06:00, I: 10:00"
"P: 00:00, I: 02:00, P: 04:00, I: 06:00" -> "Next P: 08:00, I: 10:00"
"P: 04:05, P: 08:10, P: 12:15, I: 12:30, P: 16:25" -> "Next I: 16:30, P: 04:05"
"I: 06:32, P: 08:15, I: 10:44, P: 13:03" -> "Next I: 14:44, P: 17:03"
"P: 07:30, I: 07:30, P: 11:30, I: 11:30, P: 15:30, I: 15:30, I: 19:30" -> "Next P: 19:30, I: 07:30"
"I: 07:30, P: 11:30, I: 11:30, P: 15:30, I: 15:30, P: 19:30, I: 19:30" -> "Next P: 23:30, I: 07:30"
"P: 07:30, I: 07:30, P: 11:30, I: 11:30, P: 15:30, I: 15:30, P: 19:30, I: 19:30" -> "Next P: 07:30, I: 07:30" OR "Next I: 07:30, P: 07:30"
Это код гольф, поэтому выигрывает кратчайший ответ в байтах.
ОБНОВИТЬ:
На выходе теперь могут быть аббревиатуры от парацетамола и ибупрофена; P
иI
Ответы:
JavaScript (ES6),
367362354358 байтГольф версия:
Ungolfed / прокомментировал:
Чтобы использовать его, вызовите F со строкой в качестве аргумента следующим образом:
источник
F("P: 22:00")
->ReferenceError: q is not defined
. Этот ввод будет выполняться, если на P & I уже ссылались ранее, но со старыми деталями для I.Python 3 - 437 байт
Объяснение:
источник
PHP,
228241239227226 байттребует PHP 7
сломать
источник
JavaScript (ES6), 246 байт
Объяснение:
Циклическое над каждой дозы, как
I
иP
дозы разделены на два массива. 4 часа также добавляются к каждой дозе, и эти времена также сохраняются. Массивы заполняются в обратном порядке, чтобы упростить обнаружение 8 записей. Время 4 часа после первой дозы также сохраняется для использования во время сортировки. В этот момент каждый массив может находиться в одном из трех состояний:[]
, что выравнивается и, следовательно, исключается из результатаИзвлекая время следующей дозы из двух массивов, осталось отсортировать их по порядку. Это делается путем сравнения их со временем через 4 часа после первой дозы. Если один из двух периодов до этого времени, это должно относиться к завтрашнему дню, и эта доза приходит последней. В противном случае времена просто сравниваются напрямую. (Скорее неудобно, лекарство раньше времени, поэтому я должен раздеть его, чтобы сравнить.)
источник