Ostrzeżenie: NIE zasięgaj porady lekarskiej z tego postu. Jeśli potrzebujesz porady medycznej, idź do wykwalifikowanego specjalisty.
Boli mnie głowa. Potrzebuję pigułek na ból głowy.
Powiem ci kilka ostatnich dawek, które miałem, a ty powiesz mi, kiedy będę mógł przyjąć kolejną dawkę bez przedawkowania.
Dam ci ten ciąg:
P: 00:00, I: 02:00, P: 04:00, I: 06:00
I dasz mi to:
Next P: 08:00, I: 10:00
Wejście:
Ciąg reprezentujący czas, w którym wzięto każdy lek, w następującym formacie:
P: 00:00, I: 02:00, P: 04:00, I: 06:00
Oznacza to, że Paracetamol został przyjęty o 00:00 i 04:00, a Ibuprofen został przyjęty o 02:00 i 06:00
Dane wyjściowe (zaktualizowane):
Ciąg znaków określający czas wykonania następnego leku dla każdego leku, w następującym formacie:
Next P: 08:00, I: 10:00
- Kolejność wyjściowa powinna być w kolejności, w jakiej przyjmowany jest lek. - Jeśli Ibuprofen ma być przyjmowany o 09:35 i Paracetamol i 10:22, wówczas wynik powinien być
Next I: 09:35, P: 10:22
- Jeśli czasy dla następnej dawki każdego leku są takie same, kolejność wyjściowa nie ma znaczenia:
Next P: 08:00, I: 08:00
LUBNext I: 08:00, P: 08:00
- Jeśli pobierany jest tylko jeden lek (w ciągu wejściowym), wówczas tylko ten lek powinien znajdować się w ciągu wyjściowym:
Next P: 02:00
Zasady:
- Będą tylko dwa rodzaje leków: Paracetamol „P” i Ibuprofen „I”.
- Paracetamol można przyjmować raz na 4 godziny, maksymalnie 4 razy w ciągu 24 godzin.
- Ibuprofen można również przyjmować raz na 4 godziny, maksymalnie 4 razy w ciągu 24 godzin.
- Paracetamol i ibuprofen można przyjmować razem lub w oddzielnych porach. Jeden nie liczy się do dawki drugiego.
- Czasy w ciągu wejściowym będą zawsze następujące po sobie, ale mogą upłynąć o północy (23:00 -> 03:00)
- Czasy w ciągu wejściowym nie będą obejmować więcej niż 24 godziny
- Maksymalnie 4 razy na każdy lek (łącznie maksymalnie 8)
- Dane wejściowe zawsze będą niepuste i będą zawierać co najmniej jeden lek i jeden raz
Przykłady:
Dwie dawki każdej w dwugodzinnych odstępach:
"P: 00:00, I: 02:00, P: 04:00, I: 06:00" -> "Next P: 08:00, I: 10:00"
Pojedyncza dawka Paracetamolu
"P: 22:00" -> "Next P: 02:00"
Maksymalna dawka paracetamolu w ciągu 24 godzin, pojedyncza dawka ibuprofenu
"P: 04:05, P: 08:10, P: 12:15, I: 12:30, P: 16:25" -> "Next I: 16:30, P: 04:05"
Przypadki testowe:
"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"
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź int bajtów.
AKTUALIZACJA:
Wynikiem mogą być teraz skróty Paracetamolu i Ibuprofenu; P
iI
Odpowiedzi:
JavaScript (ES6),
367362354358 bajtówWersja golfowa:
Nieprzyznany / skomentował:
Aby go użyć, wywołaj F z ciągiem jako argumentem:
źródło
F("P: 22:00")
->ReferenceError: q is not defined
. Dane wejściowe zostaną uruchomione, jeśli wcześniej wspomniano o P&I, ale ze starymi szczegółami dla I.Python 3 - 437 bajtów
Wyjaśnienie:
źródło
PHP,
228241239227226 bajtówwymaga PHP 7
awaria
źródło
JavaScript (ES6), 246 bajtów
Wyjaśnienie:
Pętle nad każdą dawką,
I
iP
dawki są podzielone na dwie tablice. Do każdej dawki dodawane są również 4 godziny, a czasy te są również zapisywane. Tablice są wypełniane w odwrotnej kolejności, aby ułatwić wykrywanie 8 wpisów. Czas 4 godziny po pierwszej dawce jest również zapisywany do wykorzystania podczas sortowania. W tym momencie każda tablica może znajdować się w jednym z trzech stanów:[]
, który zostaje spłaszczony, a zatem wykluczony z wynikuPo wyodrębnieniu następnych dawek z dwóch tablic, pozostaje je uporządkować. Odbywa się to poprzez porównanie ich z czasem 4 godziny po pierwszej dawce. Jeśli jeden z tych dwóch przypadków przypada wcześniej, musi to odnosić się do jutra, a ta dawka jest ostatnia. W przeciwnym razie czasy są po prostu porównywane bezpośrednio. (Raczej niewygodnie, lek jest przed czasem, więc muszę go rozebrać, aby porównać poprawnie.)
źródło