Desafío
Escriba el código más corto que pueda sumar todas las duraciones de tiempo que aparecen en el stdin. El programa solo debe considerar las cadenas que coinciden con uno de los siguientes patrones e ignorar el resto.
HH:MM:SS (it will be interpreted as HH hours, MM minutes and SS seconds)
H:MM:SS (it will be interpreted as H hours, MM minutes and SS seconds)
MM:SS (it will be interpreted as MM minutes, SS seconds)
M:SS (it will be interpreted as M minutes, SS seconds)
Ejemplos de cadenas que coinciden con los patrones enumerados:
12:00:01
2:03:22
00:53
9:13
El resultado debe ser de la forma
HHh MMm SSs (that means HH hours, MM minutes and SS seconds with non-zero-padding)
Ejemplo
STDIN
Vea el video de bienvenida.
Video: 10:37 min.
Vea el video de introducción al curso.
Video: 3:30 min. Vea el video de cómo usar la Descripción general de la lección.
Video: 9:13 min.
Vea la descripción general en video de cómo usar el sistema Epsilen para compartir su trabajo.
Video: 03:15 min.
Vea el video para conocer la Evaluación de preparación académica del estado de Texas (STAAR).
Video: 1:05:26 min.
STDOUT
1h 32m 1s
fuente
10:4:56
? Según la especificación actual, deben tratarse como4m 56s
parte10
, se ignorará. La misma pregunta sobre10:12:7
¿qué significa10m 12s
ignorar7
? ¿O se puede definir la implementación del manejo de tales cadenas?1h 19m 18s
a la salida?37+30+13+15+26==121
,10+3+9+3+5==30
,1==1
, Por lo que espero1h 32m 01s
. ¿Qué hay de malo en esta lógica? Además, dicho formato de salida es el que se espera, ¿no?Respuestas:
Pyth 105
Pruébalo en línea.
Esto requiere la entrada de STDIN de la misma manera que la respuesta de Javascript, como el texto citado con líneas nuevas como
\n
s.Muestra:
Salida
Ejemplo de trabajo con fechas más extrañas:
Salida
(Solo el 10:10 y el 1:10 son tiempos legítimos)
La razón principal por la que esto es tan largo es que Pyth no le permitirá extraer coincidencias positivas. En cambio, esto coincide con todo lo que no es un tiempo válido y lo reemplaza con un carácter de espacio. Luego, dividir en espacios en blanco deja solo tiempos y algunos números rebeldes. Los números sobrantes se eliminan al buscar
:
caracteres, que se habrán eliminado de tiempos no válidos. Esto casi con seguridad podría ser más golfizado;)fuente
Javascript ES6, 138 caracteres
Función, 139
Toma una cadena como argumento y escribe la salida en la consola:
Programa 138
Prueba de funcionamiento
Salida
fuente
JavaScript, ES6,
208 200197 bytesSé que esto es muy largo, pero quería explorar las últimas características de ES6, reversa, reducción de mapas, funciones de flecha y comprensión de matriz (operador de propagación).
Simplemente ejecute el fragmento en una versión más reciente de Firefox.
Cómo funciona (un poco descuidado)
fuente
Bash (con grep, sed, awk y date): 124 bytes, 120 bytes
Simplemente canalice el texto en esto:
Cómo funciona
0123456789:
fuente
Perl -
228201Resulta ser el mismo algoritmo que el Optimizador (grep, split, reverse, add).
No soy un experto en Perl, por lo que tal vez se pueda reducir el recuento de bytes.
Sin golf
fuente
my
palabras clave).Rebol - 174
Sin golf + anotado:
Rebol viene con su propio
time!
tipo de datos. Puede ver cómo el código anterior hace uso de esto en el ejemplo a continuación (desde dentro de la consola Rebol):fuente
Groovy - 195
No puedo entender cómo comprimirlo más.
Sin golf
fuente
Mathematica 300 caracteres
Este pequeño ejercicio tomó mucho código, incluso para Mathematica. Seguramente hay formas más eficientes de hacer esto.
Golfed
Suponiendo que la entrada se almacena en
txt
,Cómo funciona (usando código no protegido):
1-Encuentra los tiempos.
2-Break en horas, minutos, segundos
3-Suma los tiempos. Los objetos de tiempo son tiempos de reloj. Restar un objeto de tiempo de otro devuelve una duración, en este caso 92.0167 minutos.
QuantityMagnitude
deja caer la unidad de medida.4-Convertir 92.0167 minutos en horas, minutos, segundos.
fuente
Perl, 146
Mi entrada imprime la salida con un espacio final, espero que esté bien
Si podemos suponer que solo habrá una vez por línea de entrada, podemos cortar 4 caracteres:
Estos funcionan acumulando el total de segundos transcurridos y formateando ese valor después.
fuente