Trabajo un estándar de nueve a cinco. De lunes a viernes. Tomo media hora para el almuerzo de 12:30 a 13:00.
Escríbame un programa que, cuando se ejecute, calcule el porcentaje de la semana laboral que he completado en el momento actual.
Reglas
- Solo cuente el tiempo que realmente pasó trabajando. Soy puntual y no trabajo durante el almuerzo.
- Sin entrada. Puede obtener información como la hora / fecha actual, sin embargo, es conveniente.
- La semana laboral se considera completa desde el final del día del viernes hasta la medianoche entre el domingo y el lunes.
- La zona horaria es la zona horaria local.
- La salida debe ser un número decimal, por ejemplo, 66.25498, símbolo de porcentaje opcional.
- El programa debe ser razonablemente a prueba de futuro. Debería poder hacer frente a los años bisiestos.
- La resolución de salida debe ser un segundo o mejor. Me gusta ver hervir la tetera.
- Código de golf. El código más corto gana.
Respuestas:
Q,
111102fuente
Pitón 3, 132
La resolución es de un minuto, o 2/45 de un porcentaje. Eso es más que suficiente OMI.
fuente
Excel,
132,129,123,119, 117pegar en A2: A4
formatee la celda A4 como% para obtener el formato correcto
Almuerzo remunerado de 40 horas semanales:
88, 81fuente
NOW()
es un tiempo después de las 5PM.0
) que no es necesario!Perl, 124 caracteres
OK, primera solución simple para establecer el par:
Ejecute con
perl -M5.010
para habilitar la función Perl 5.10+say
. La resolución es un segundo; Si la resolución de un minuto es aceptable, la+$s/3600
parte se puede eliminar para una longitud total de 116 caracteres .Esta solución se utiliza
localtime
para obtener el día de la semana y la hora del día, por lo que debería funcionar independientemente de los cambios de año, los días bisiestos o cualquier otra peculiaridad del calendario, al menos mientras el ciclo semanal de siete días no cambie. Los cambios en el horario de verano durante la jornada laboral lo confundirían un poco, pero básicamente nunca suceden de todos modos, presumiblemente precisamente porque eso generaría demasiada confusión.(Para mayor comodidad, tenga en cuenta que
localtime
acepta una marca de tiempo Unix como argumento opcional).fuente
Mathematica
169 168 212 214 211 218 210190 caracteresDe largo aliento, según los estándares de golf de código.
Lo siguiente tiene en cuenta las semanas laborales que cruzan los límites de mes o año, así como los años bisiestos. Calcula el tiempo trabajado según horas y minutos.
No podía pensar en una forma de evitar explicar los días de la semana. Mathematica devuelve el día de la semana como una cadena de 3 caracteres, que debe convertirse en un número.
De golf
fuente
VBA 141
Formateado para ejecutarse desde la ventana inmediata. ¡Gracias a Sean Cheshire por señalar una mejora de 10 caracteres!
fuente
n=(Now-Int(Now))*24:a=(Weekday(Now,3)*7.5+IIf(n>17,7.5,IIf(n>9,IIf(n<12.5,n,IIf(n>13,n-.5,n))-9,0)))/37.5:MsgBox Format(IIf(a>1,1,a),".0%")
@ 139R, 115 caracteres
Aquí hay una simulación de una semana:
fuente
Rubí,
191116,115113La lógica es robada de la solución Fraxtils Python .
Si desea probar el código con la prueba unitaria, necesita esta solución de 143 caracteres:
No es el código más corto y eficiente, pero con una prueba de unidad;)
Los 191 caracteres incluyen las nuevas líneas (podría convertirlo en una línea, simplemente reemplace cada nueva línea con a
;
).Y el código de prueba:
fuente
Python 2 130 caracteres
El tercer intento es una salsa débil pero creo que he entendido bien la lógica.
fuente