Feuilles de temps
Dans un lieu de travail, vous devez souvent remplir des feuilles de temps. Cette tâche consiste à écrire du code pour y parvenir.
Contribution
Deux fois dans une horloge de 12 heures légèrement non standard indiquant le début et la fin de la journée séparés par un espace. Un troisième chiffre représente le nombre de minutes prises pour le déjeuner. Par exemple
9:14 5:12 30
Cela signifie que vous avez commencé le travail à 9 h 14, terminé le travail à 17 h 12 et pris 30 minutes pour le déjeuner.
Vous pouvez supposer que
- Toute heure dans la première colonne est de 00h00 (minuit) jusqu'à 13h00 (heure non incluse) et toute heure dans la deuxième colonne est de 13h00 au plus tôt jusqu'à 23h59.
- La pause déjeuner n'est pas plus longue que la journée de travail!
Le format d'entrée doit être comme dans les exemples donnés.
Tâche
Votre code doit lire dans un fichier (ou une entrée standard) de ces triplets, et pour chacun afficher combien de temps vous avez travaillé. Cette sortie doit indiquer le nombre d'heures. Pour l'exemple ci-dessus, c'est:
7h et 58min moins 30 minutes soit 7h 28min.
Production
Votre sortie doit spécifier le nombre (entier) d'heures et de minutes et ne doit pas énumérer plus de 59 minutes. Autrement dit, vous ne pouvez pas sortir 2h 123min. En dehors de cela, votre code peut sortir dans n'importe quel format facilement lisible par l'homme qui vous convient.
Exemples
10:00 1:00 30 --> 2hr 30min
12:59 1:00 0 --> 0hr 1min
00:00 11:59 0 --> 23hr 59min
10:00 2:03 123 --> 2hr 0min
:
heures délimitées sur l'horloge de 12 heures) ajoute quelque chose à ce défi.Réponses:
MATL , 28 octets
Essayez-le en ligne!
la source
"XXhr YYmin"
?Retina 0.8.2 , 83 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez l'entrée en unaire.
Ajoutez 12 heures à l'heure d'arrêt.
Multipliez les heures par 60 et ajoutez aux minutes.
Soustrayez l'heure de début et l'heure de pause de l'heure d'arrêt.
Divmod par 60. (Économisez 5 octets pour un format de sortie plus ennuyeux.)
la source
Perl 5 -pl,
807471 octetsEssayez-le en ligne!
la source
Python 3, 161 octets
Je sais que cela ne sera même pas proche du plus petit, mais cela se lit dans un fichier:
Je ressens l'ironie de faire une pause dans ma feuille de temps pour faire ça ...
Python 2.7, 133 octets
Merci pour les suggestions dans les commentaires! Le passage à python 2.7 permet d'économiser quelques octets supplémentaires car il est par défaut en division entière:
La même approche avec python3 est de 135 octets en raison de l'instruction print et de la division flottante par défaut:
la source
i=int
au début et en changeant la troisième ligne enm=-i(l[0])*60+i(l[1][:2])+(i(l[1][3:])*60+720+i(l[2][:2])-i(l[2][2:]))
map(int,l[:-1].split(':'))
et de supprimer les multiples conversions en int, de tout réduire à une ligne en remplaçant l'indentation par;
etc. pour économiser quelques octets. De plus, vous pouvez visiter Conseils pour jouer au golf en Python pour quelques astuces plus soignées que d'autres utilisateurs ont découvertes au cours de leur vie de golfeur :).print(m,m%60)
cela suffirait. (Notez également l'utilisation dem%60
à la place dem-(m//60*60)
)C, 105 octets
Complètement simple. Essayez-le en ligne ici .
Non golfé:
la source
a,b,c,d;f(e)
lieu dea,b,c,d,e;f()
et au;printf("%d:%d ",a/60,a%60))a=(12+c-a)*60+d-b-e;}
lieu de;)a=(12+c-a)*60+d-b-e,printf("%d:%d ",a/60,a%60);
Wolfram Langue
125 119111 octets8 octets enregistrés grâce à l'utilisateur 202729
Exemple
Les abréviations ne sont pas utilisées ici, pour faciliter le suivi de la logique.
Interpreter["Time"][#2 <> "pm"]
interprète comme un temps le deuxième paramètre suivi de "pm", à savoir, dans ce cas, "4:12 pm", renvoyant unTimeObject
correspondant à 4:12 pm.-Interpreter["Time"][# <> "am"])[[1]] - #3/60]
.#3
est le troisième paramètre, à savoir 20min. Le signe moins soustrait l'intervalle de l'heure du déjeuner de la fin du quart de travail. Il renvoie l'heure de fin de quart ajustée, c'est-à-dire la fin de quart qui s'appliquerait si la personne n'avait pas pris de pause déjeuner.Interpreter["Time"][#]
interprète comme une heure le premier paramètre, dans ce cas, "9:00", renvoyant unTimeObject
correspondant à 9:00 am.En soustrayant le début du quart de la fin du temps de quart ajusté
t
, l'intervalle de temps exprimé en heures.IntegerPart[t]
renvoie le nombre d'heures complètes travaillées.IntegerPart[60 Mod[t,1]], "min"}]
renvoie les minutes supplémentaires travaillées.la source
Mod[x, 1]
utilisé.Floor
être utilisé pourIntegerPart
?-6hr 52min
pour les valeurs d'échantillon que j'ai utilisées. Je dois examiner cela pour comprendre pourquoi une valeur négative pour les heures (et apparemment les minutes) a été produite.JavaScript,
83 octets76 octetsJe viens de me débarrasser de la fonction intérieure de la solution ci-dessous (à quoi pensais-je?). Modification du format de sortie également.
Essayez-le en ligne!
ANCIEN: JavaScript,
112 octets111 octets110 octetsExplication:
À l'intérieur de la fonction principale, nous commençons par en définir une autre qui nous aidera à calculer les minutes d'un temps donné, en ajoutant 12 heures au paramètre des heures si le troisième paramètre est véridique:
Ensuite, nous
séparons la chaîne parcorrespondons aux nombres à l'intérieur de la chaîne, ce qui donne un tableau de tous les nombres de la chaîne.' '
ou':'
Ensuite, nous calculons la différence entre l'heure de fin et l'heure de début et en soustrayant l'heure du déjeuner à l'aide de la fonction définie précédemment (conversion des chaînes en nombres si nécessaire).
Enfin, nous produisons la chaîne de résultat: les heures sont la partie entière de
r/60
et les minutes sontr%60
.Essayez-le en ligne!
la source
map
:a=>a.map(...)
. Cela ajoutera 5 octets à ma réponse. Mais j'attends toujours la réponse de OP (ou de n'importe qui) à mon commentaire.Python 2 , 100 octets
Essayez-le en ligne!
Programme complet qui lit plusieurs lignes d'un fichier texte, comme indiqué par OP. Une fonction qui analyse simplement une seule ligne permettrait d'économiser un supplément de 10 octets.
la source
Java 10,
194191 octetsLes E / S sont douloureuses en Java. Se termine anormalement lorsqu'il n'y a pas de ligne d'entrée suivante à lire. Essayez-le en ligne ici .
Non golfé:
la source
Rouge , 35 octets
Essayez-le en ligne!
Remarque: la sortie est au format
hh:mm:ss
la source
R , 97 octets
Essayez-le en ligne!
Pour chaque ligne retourne
"hours minutes"
la source
data.frame
pour enregistrer quelques octets - ne fonctionnant pas jusqu'à présent . Mais ce simple changement fait :)