Avertissement: NE PAS prendre l'avis médical de ce poste. Si vous souhaitez un avis médical, consultez un professionnel qualifié.
J'ai mal à la tête. J'ai besoin de pilules contre les maux de tête.
Je vous dirai les dernières doses que j'ai prises et vous me direz quand je pourrai prendre ma prochaine dose, sans surdosage.
Je vais vous donner cette chaîne:
P: 00:00, I: 02:00, P: 04:00, I: 06:00
Et vous me donnerez ceci:
Next P: 08:00, I: 10:00
Contribution:
Chaîne représentant l'heure à laquelle chaque médicament a été pris, au format suivant:
P: 00:00, I: 02:00, P: 04:00, I: 06:00
Cela signifie que le paracétamol a été pris à 00h00 et 04h00 et l'ibuprofène a été pris à 02h00 et 06h00.
Sortie (mise à jour):
Chaîne avec l'heure à laquelle la prochaine prise de chaque médicament peut être prise, dans le format suivant:
Next P: 08:00, I: 10:00
- L'ordre de sortie doit être dans l'ordre dans lequel le médicament doit être pris. - Si l'ibuprofène doit être pris à 9h35 et le paracétamol et 10h22, la sortie doit être
Next I: 09:35, P: 10:22
- Si les heures pour la prochaine dose de chaque médicament sont les mêmes, l'ordre de sortie n'a pas d'importance:
Next P: 08:00, I: 08:00
OUNext I: 08:00, P: 08:00
- Si un seul médicament est pris (dans la chaîne d'entrée), seul ce médicament doit être dans la chaîne de sortie:
Next P: 02:00
Règles:
- Il n'y aura jamais que deux types de médicaments, le paracétamol «P» et l'ibuprofène «I».
- Le paracétamol peut être pris une fois toutes les 4 heures, un maximum de 4 fois au cours d'une période de 24 heures.
- L'ibuprofène peut également être pris une fois toutes les 4 heures, un maximum de 4 fois au cours d'une période de 24 heures.
- Le paracétamol et l'ibuprofène peuvent être pris ensemble ou à des moments différents. L'un ne compte pas pour le dosage de l'autre.
- Les heures dans la chaîne d'entrée seront toujours consécutives, mais peuvent rouler sur minuit (23:00 -> 03:00)
- Les durées de la chaîne d'entrée ne dépasseront pas 24 heures
- Maximum 4 fois pour chaque médicament (8 max au total)
- L'entrée sera toujours non vide et contiendra au moins un médicament et une fois
Exemples:
Deux doses de chaque à deux heures d'intervalle:
"P: 00:00, I: 02:00, P: 04:00, I: 06:00" -> "Next P: 08:00, I: 10:00"
Dose unique de paracétamol
"P: 22:00" -> "Next P: 02:00"
Dose maximale de paracétamol dans les 24 heures, dose unique d'ibuprofène
"P: 04:05, P: 08:10, P: 12:15, I: 12:30, P: 16:25" -> "Next I: 16:30, P: 04:05"
Cas de test:
"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"
C'est le golf de code, donc la réponse la plus courte en octets gagne.
MISE À JOUR:
La sortie peut maintenant être des abréviations de Paracetamol et Ibuprofen; P
etI
Réponses:
JavaScript (ES6),
367362354358 octetsVersion golfée:
Non golfé / commenté:
Pour l'utiliser, appelez F avec la chaîne comme argument comme ceci:
la source
F("P: 22:00")
->ReferenceError: q is not defined
. Cette entrée s'exécutera si P&I a déjà été référencé, mais avec d'anciens détails pour I.Python 3-437 octets
Explication:
la source
PHP,
228241239227226 octetsnécessite PHP 7
panne
la source
JavaScript (ES6), 246 octets
Explication:
En boucle sur chaque dose, les doses
I
etP
sont séparées en deux tableaux. 4 heures sont également ajoutées à chaque dose, et ces temps sont également enregistrés. Les tableaux sont remplis à l'envers pour faciliter la détection de 8 entrées. Le temps 4 heures après la première dose est également enregistré pour une utilisation lors du tri. À ce stade, chaque tableau peut être dans l'un des trois états suivants:[]
, ce qui est aplati et donc exclu du résultatAprès avoir extrait les prochains temps de dose des deux matrices, il reste à les trier dans l'ordre. Cela se fait en les comparant au temps 4 heures après la première dose. Si l'une des deux fois est antérieure à cette heure, cela doit se référer à demain, et cette dose vient en dernier. Sinon, les temps sont simplement comparés directement. (Plutôt gênant, le médicament est avant l'heure, donc je dois le retirer pour le comparer correctement.)
la source