Hojas de horas
En un lugar de trabajo, a menudo tiene que completar hojas de tiempo. Esta tarea es escribir código para ayudar a esto.
Entrada
Dos veces en un reloj de 12 horas ligeramente no estándar que significa el inicio y el final del día separados por un espacio. Un tercer número representa la cantidad de minutos que se toman para el almuerzo. Por ejemplo
9:14 5:12 30
Esto significa que comenzó a trabajar a las 9:14 am, terminó el trabajo a las 5:12 pm y tomó 30 minutos para el almuerzo.
Puedes asumir que
- Cualquier momento en la primera columna es desde las 00:00 (medianoche) hasta la 1 p.m., pero sin incluirlo, y cualquier momento en la segunda columna es la 1 p.m. como máximo hasta las 11:59 p.m.
- ¡La pausa para el almuerzo no es más que la jornada laboral!
El formato de entrada debe ser como en los ejemplos dados.
Tarea
Su código debe leer en un archivo (o entrada estándar) de estos triples, y para cada uno de ellos, cuánto tiempo trabajó. Esta salida debe indicar el número de horas. Para el ejemplo anterior esto es:
7 horas y 58 minutos menos 30 minutos, que es 7 horas y 28 minutos.
Salida
Su salida debe especificar el número (completo) de horas y minutos y no debe incluir más de 59 minutos. Es decir, no puede generar 2 horas y 123 minutos. Aparte de eso, su código puede salir en cualquier formato de lectura humana que sea conveniente para usted.
Ejemplos
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
:
tiempos delimitados en el reloj de 12 horas) agrega algo a este desafío.Respuestas:
MATL , 28 bytes
Pruébalo en línea!
fuente
"XXhr YYmin"
?Retina 0.8.2 , 83 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Convierta la entrada a unario.
Agregue 12 horas al tiempo de parada.
Multiplique las horas por 60 y agregue los minutos.
Reste el tiempo de inicio y el tiempo de descanso del tiempo de parada.
Divmod por 60. (Ahorre 5 bytes para un formato de salida más aburrido).
fuente
Perl 5 -pl,
807471 bytesPruébalo en línea!
fuente
Python 3, 161 bytes
Sé que esto ni siquiera será cercano al más pequeño, pero sí se lee en un archivo:
Siento la ironía de pausar mi hoja de tiempo para hacer esto ...
Python 2.7, 133 bytes
Gracias por las sugerencias en los comentarios! Cambiar a python 2.7 ahorra unos pocos bytes más porque el valor predeterminado es la división de enteros:
El mismo enfoque con python3 es de 135 bytes debido a la declaración de impresión y a la división flotante por defecto:
fuente
i=int
al principio y cambiando la tercera línea am=-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(':'))
y soltar las conversiones múltiples a int, colapsar todo en una sola línea reemplazando la sangría con;
etc. para guardar un par de bytes. Además, puede visitar Consejos para jugar golf en Python para obtener algunos trucos más interesantes que otros usuarios descubrieron durante su vida de golfista :).print(m,m%60)
sería suficiente. (También tenga en cuenta el uso dem%60
en lugar dem-(m//60*60)
)C, 105 bytes
Completamente sencillo. Pruébalo en línea aquí .
Sin golf:
fuente
a,b,c,d;f(e)
lugar dea,b,c,d,e;f()
y en;printf("%d:%d ",a/60,a%60))a=(12+c-a)*60+d-b-e;}
lugar de;)a=(12+c-a)*60+d-b-e,printf("%d:%d ",a/60,a%60);
Wolfram Lenguaje
125 119111 bytes8 bytes guardados gracias al usuario 202729
Ejemplo
Las abreviaturas no se usan aquí, para facilitar el seguimiento de la lógica.
Interpreter["Time"][#2 <> "pm"]
interpreta como una hora el segundo parámetro seguido de "pm", es decir, en este caso, "4:12 pm", devolviendo unTimeObject
correspondiente a 4:12 pm.-Interpreter["Time"][# <> "am"])[[1]] - #3/60]
.#3
es el tercer parámetro, es decir, 20min. El signo menos resta el intervalo de la hora del almuerzo del final del turno. Devuelve el final del turno ajustado, es decir, el final del turno que se aplicaría si la persona no hubiera tomado un descanso para almorzar.Interpreter["Time"][#]
interpreta como una hora el primer parámetro, en este caso, "9:00", devolviendo unTimeObject
correspondiente a las 9:00 am.Restando el inicio del turno del final del tiempo de turno ajustado
t
, el intervalo de tiempo expresado en horas.IntegerPart[t]
devuelve el número de horas completas trabajadas.IntegerPart[60 Mod[t,1]], "min"}]
devuelve los minutos adicionales trabajados.fuente
Mod[x, 1]
usado.Floor
puede usar paraIntegerPart
?-6hr 52min
para los valores de muestra que utilicé. Necesito analizar esto para entender por qué se produjo un valor negativo por horas (y aparentemente minutos).JavaScript,
83 bytes76 bytesAcabo de deshacerme de la función interna de la solución a continuación (¿Qué estaba pensando?). Cambió el formato de salida también.
Pruébalo en línea!
ANTIGUO: JavaScript,
112 bytes111 bytes110 bytesExplicación:
Dentro de la función principal, comenzamos definiendo otro que nos ayudará a calcular los minutos de un tiempo dado, agregando 12 horas al parámetro horas si el tercer parámetro es verdadero:
Luego,
dividimos la cadena por cualquierahacemos coincidir los números dentro de la cadena dando como resultado una matriz de todos los números en la cadena.' '
o':'
Luego calculamos la diferencia entre la hora de finalización y la hora de inicio y restando la hora del almuerzo utilizando la función definida anteriormente (convirtiendo las cadenas en números cuando sea necesario).
Finalmente producimos la cadena de resultados: las horas son la parte entera de
r/60
y los minutos sonr%60
.Pruébalo en línea!
fuente
map
:a=>a.map(...)
. Agregará 5 bytes a mi respuesta. Pero todavía estoy esperando la respuesta de OP (o cualquiera) a mi comentario.Python 2 , 100 bytes
Pruébalo en línea!
Programa completo que lee varias líneas de un archivo de texto, según las instrucciones de OP. Una función que solo analiza una sola línea ahorraría una adición de 10 bytes.
fuente
Java 10,
194191bytesI / O es doloroso en Java. Termina anormalmente cuando no hay una línea de entrada para leer. Pruébelo en línea aquí .
Sin golf:
fuente
Rojo , 35 bytes
Pruébalo en línea!
Nota: La salida está en el formato
hh:mm:ss
fuente
R , 97 bytes
Pruébalo en línea!
Por cada línea devuelve
"hours minutes"
fuente
data.frame
para guardar algunos bytes, hasta ahora no funcionaba . Pero este simple cambio sí :)