Aviso: NÃO siga conselho médico deste post. Se você quiser aconselhamento médico, procure um profissional qualificado.
Estou com dor de cabeça. Eu preciso de comprimidos para dor de cabeça.
Vou lhe dizer as últimas doses que tomei e você me diz quando posso tomar minha próxima dose, sem overdose.
Vou te dar essa string:
P: 00:00, I: 02:00, P: 04:00, I: 06:00
E você me dará o seguinte:
Next P: 08:00, I: 10:00
Entrada:
String representando os horários em que cada medicamento foi tomado, no seguinte formato:
P: 00:00, I: 02:00, P: 04:00, I: 06:00
Isso significa que o paracetamol foi tomado às 00:00 e 04:00 e o ibuprofeno foi tomado às 02:00 e 06:00
Saída (atualizada):
Cadeia de caracteres com a hora em que cada próximo medicamento pode ser tomado, no seguinte formato:
Next P: 08:00, I: 10:00
- A ordem de saída deve estar na ordem em que o medicamento deve ser tomado. - Se o ibuprofeno deve ser tomado às 09:35 e Paracetamol e 10:22, a saída deve ser
Next I: 09:35, P: 10:22
- Se o horário da próxima dose de cada medicamento for o mesmo, a ordem de saída não importará:
Next P: 08:00, I: 08:00
OUNext I: 08:00, P: 08:00
- Se apenas um medicamento estiver sendo tomado (na sequência de entrada), apenas esse medicamento deverá estar na sequência de saída:
Next P: 02:00
Regras:
- Só haverá dois tipos de medicação: Paracetamol 'P' e Ibuprofen 'I'.
- O paracetamol pode ser tomado uma vez a cada 4 horas, no máximo 4 vezes em um período de 24 horas.
- O ibuprofeno também pode ser tomado uma vez a cada 4 horas, no máximo 4 vezes em um período de 24 horas.
- Paracetamol e ibuprofeno podem ser tomados juntos, ou em momentos separados. Um não conta para a dosagem do outro.
- Os horários na sequência de entrada sempre serão consecutivos, mas podem ocorrer durante a meia-noite (23:00 -> 03:00)
- Os tempos na sequência de entrada não durarão mais que 24 horas
- Máximo de 4 vezes para cada medicamento (8 máx. No total)
- A entrada sempre estará vazia e conterá pelo menos um medicamento e uma vez
Exemplos:
Duas doses de cada uma em intervalos de duas horas:
"P: 00:00, I: 02:00, P: 04:00, I: 06:00" -> "Next P: 08:00, I: 10:00"
Dose única de paracetamol
"P: 22:00" -> "Next P: 02:00"
Dose máxima de paracetamol em 24 horas, dose única de ibuprofeno
"P: 04:05, P: 08:10, P: 12:15, I: 12:30, P: 16:25" -> "Next I: 16:30, P: 04:05"
Casos de teste:
"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"
Este é o código golf, então a resposta mais curta int bytes vence.
ATUALIZAR:
A saída agora pode ser abreviação de Paracetamol e Ibuprofen; P
eI
Respostas:
JavaScript (ES6),
367362354358 bytesVersão Golfed:
Ungolfed / comentou:
Para usá-lo, chame F com a string como argumento:
fonte
F("P: 22:00")
- ->ReferenceError: q is not defined
. Essa entrada será executada se os P&I tiverem sido referenciados anteriormente, mas com detalhes antigos para eu.Python 3 - 437 bytes
Explicação:
fonte
PHP,
228241239227226 bytesrequer PHP 7
demolir
fonte
JavaScript (ES6), 246 bytes
Explicação:
Fazendo um loop sobre cada dose, as doses
I
eP
são separadas em duas matrizes. Também são adicionadas 4 horas a cada dose, e esses tempos também são salvos. As matrizes são preenchidas no sentido inverso para facilitar a detecção de 8 entradas. O tempo de 4 horas após a primeira dose também é economizado para uso durante a classificação. Nesse ponto, cada matriz pode estar em um dos três estados:[]
, o que é achatado e, portanto, excluído do resultadoDepois de extrair os próximos tempos de dose das duas matrizes, resta classificá-los em ordem. Isto é feito comparando-os com o tempo 4 horas após a primeira dose. Se uma das duas vezes for anterior a essa hora, isso deve se referir a amanhã e essa dose chega por último. Caso contrário, os tempos são simplesmente comparados diretamente. (Bastante inconveniente, o medicamento é antes da hora, então eu tenho que retirá-lo para comparar adequadamente.)
fonte