El código más corto para generar los tiempos correctos en los relojes gana.
Usted es un viajero experimentado en el tiempo y se sabe que se detiene en muchos planetas durante sus viajes. Cada planeta gira a una velocidad diferente y debido a esto, la duración de un día es diferente de nuestro día habitual de 24 horas. Como resultado, los planetas usan relojes con diferentes números de horas. Las horas en un reloj con x horas están dispuestas de manera similar a la nuestra (1, 2, 3, ..., x ) con el número girando en sentido horario yx estando en la parte superior.
Además, cada planeta tiene una cantidad diferente de minutos en una hora y un número diferente de segundos en un minuto. Se le dará un tiempo de inicio y una cantidad de segundos transcurridos a partir de los cuales debe determinar el tiempo de finalización.
La entrada puede tomarse directamente de un archivo pasado como argumento o como entrada estándar. La primera línea de entrada será la cantidad de relojes que necesita procesar. Después de eso, cada reloj tiene tres líneas de entrada que contienen enteros en el siguiente formato:
x y z
h m s
t
El significado de cada letra está abajo.
x = El número de horas en un día (2 <= x <= 99)
y = El número de minutos en una hora (2 <= y <= 100)
z = El número de segundos en un minuto (2 <= z <= 100)
h = La hora del tiempo de inicio (1 <= h <= x)
m = El minuto del tiempo de inicio (0 <= m <y)
s = El segundo del tiempo de inicio (0 <= s <z)
t = El número de segundos que han transcurrido
La salida debe ser la hora de finalización de cada reloj después de que hayan pasado t segundos desde la hora de inicio. Su salida debe estar formateada como la hora estándar del reloj (HH: MM: SS). Los números deben rellenarse, cuando sea necesario, para garantizar que todos los números sean de dos dígitos.
Casos de prueba
Entrada
2
5 20 10
1 10 5
2633
6 25 5
6 0 3
290
Salida
04:13:08
02:08:03
Entrada
1
14 17 11
12 16 10
1530
Salida
07:03:00
Entrada
2
8 40 25
3 1 15
10620
14 15 20
1 14 0
-580
Salida
05:26:10
14:00:00
Respuestas:
GolfScript - 50 caracteres
Los valores (H / M / S) se recopilan moviéndolos al frente de la pila (
])\
). La hora 'underflow' en 0 se maneja conor
. Se maneja el relleno cero100+`(;
, aunque supongo que0`\+-2>
tiene la misma longitud.fuente
Python, 142 caracteres
fuente
for i in ' '*input()
usted podría utilizar realmentei
en lugar de' '
enR()+' '+R()
, el ahorro de dos caracteres.exec"x,y,z,h,m,s=map(int,(R()+' '+R()).split());t=input()+h*y*z+m*z+s;print'%02d:%02d:%02d'%((t/y/z-1)%x+1,t/z%y,t%z);"*input()
t/y/z%x or x
Es un personaje más corto.GolfScript
6260 caracteresEditar: logré que la matriz anteriormente almacenada en un para residir en la pila, requiere un poco de cambio adicional de esa manera, así que no hubo una mejora importante.
62 versión:
Estoy seguro de que se puede hacer mucho mejor, simplemente no se me ocurre nada mejor.
1: Haga una matriz de todas las entradas, seleccione el primer elemento, agrupe el resto en bloques de 7.
a / 13: Consuma el primer número de la entrada para ejecutar el ciclo esa cantidad de veces.
2: Almacenar una matriz vacía en a.
3: Elija un bloque de 7 y amplíelo a 7 números individuales.
b / 8: ejecuta un bucle 3 veces, una vez por cada segundo, minuto y hora.
4: Agregue los dos últimos números juntos, para la primera iteración que son segundos y tiempo para cambiar, para lo siguiente son minutos y horas con el desbordamiento del ciclo anterior. Haga una segunda copia del resultado.
5: Divida la copia por su límite para producir el desbordamiento y desplazar el resultado un espacio hacia atrás.
6: Calcular el módulo de la división anterior para producir una parte del resultado.
7: Agregue esta parte a la matriz.
9: Elimine el desbordamiento de hora y los límites de segundo y minuto de la pila.
10: Tome la parte de la hora de a, si es cero, reemplácela con el límite de la hora, vuelva a colocarla en la matriz.
11: Para cada elemento en a, coloque '0' al frente, convirtiendo así en cadena, y deseche todo menos los últimos 2 caracteres.
12: Contraiga la matriz en una sola cadena delimitada por ':', coloque una nueva línea y desplace la matriz que contiene los trabajos restantes al frente de la pila, preparándose para la próxima iteración.
fuente
J
(172/35)13799107Ahora pasa todos los casos de prueba dados.
172 es todo; 35 es el número de caracteres que daría si fuera realmente presumido y me negara a hacer el IO como se indica. (Todavía lo modifiqué un poco; relojes es una función que toma un nombre de archivo destinado a ser usado interactivamente dentro de J.)Espero que esto sea mucho más fácil en J de lo que lo veo.
Editar: descubrió cómo hacer un mejor análisis de entrada en J, eliminó el carácter de caracteres, cambió a invocación y salida de línea de comando.
Edición 2: Se modificó la entrada de la función central a la matriz 3x3, se eliminaron muchos paréntesis molestos, se eliminaron los nombres
Edición 3: las 0 en punto manejado.
Explicación:
Mi J todavía no es genial, y IO es un dolor como siempre. Así que partes de esto son una locura.
1 0 0+{.#:{.&{:+{.#.1 0 0-~1&{
toma una matriz de tres por tres (que consiste en las líneas de entrada, los dos últimos elementos son basura)1 0 0
)".;._2(1!:1)3
obtiene una matriz de 3 'columnas' de la entrada con 0s en posiciones sin llenar.,&}.$~,&3 3&{.&{.
corta la primera fila de la entrada y da forma a las filas restantes en Nx3x3."2
modifica el verbo central para tomar los casos 3x3.10 10&#:
da 2 dígitos decimales para cada número que da una matriz Nx3x2. (Obtener 0s para el relleno fue un dolor ).,"2":"0
convierte los dígitos a ASCII (Nx3x2x1) y descifra la última columna, dando Nx3x2 nuevamente como ASCII.LF,~"1([,':',])/"2
inserta: entre cada elemento y los agrega (Nx7) y agrega un salto de línea por para (Nx8).4(1!:2)~
imprime cada fila.fuente
Haskell, 159 caracteres
divMod
no vale la pena!foldr
enfoque elegante (¡que funciona para sistemas de tiempo con cualquier número de componentes!)f
tail
fuente
Ruby, 128 caracteres
Copias descaradamente del python one:
fuente
Haskell - 219 personajes necesarios
fuente
PHP (241 caracteres)
Toma información de un archivo pasado como argumento.
Y sin golfos:
Y solo para notar, sin sigilos (el signo de dólar), esto llega a 205 caracteres.
fuente
Java,
486371 caracteresVersión sin golf: http://pastebin.com/6LiTdGyi
Esto proporciona el mismo resultado que en los ejemplos proporcionados.
Pero no estoy de acuerdo con ese comportamiento: un reloj no tiene tantos números como horas en un día: tiene la mitad de ellos.
Lo que significa que si agrega 3600 segundos a 12:50:12, debería imprimir 01:50:12, no 13:50:12 (en nuestro sistema estándar 24/60/60).
Manejé eso en mi código pero lo comenté en mi solución para que coincida con los ejemplos. Por supuesto, si considera esto, los tiempos de entrada podrían considerarse ambiguos a menos que agregue algún marcador AM / PM.
Pero en cualquier caso, el rompecabezas tiene una inconsistencia: si 00 horas deben reemplazarse por x, entonces horas> (x / 2) deben reemplazarse por horas - (x / 2).
Editar: versión de golf:
fuente
package
declaraciones; 2. no usofinal
; 3. usar nombres de variables de un solo carácter y nombres de clase; 4. generalmente usa las formas más inteligentes para hacer el código más corto posible.int[]c={i(s),i(s),i(s),i(s),i(s),i(s),i(s)}
, es posible que desee usarint a=i(s),b=i(s),c=i(s),d=i(s),e=i(s),f=i(s),g=i(s)
. Sí, agrega 11 caracteres aquí, pero guarda tres caracteres cada vez que lo usac[x]
, lo que significa que después de 4 de estos casos, se paga solo. ¡Conté 13 de estos casos, lo que significa que ahorras 28 caracteres en total!Bash - 189 caracteres:
fuente
printf
y sus argumentos y entre esos argumentos ...PHP
229228 caracteresEl archivo debe pasarse al script como argumento
Sin golf:
Registro de cambios:
229 -> 228: no es necesario establecer el tiempo restante mientras se realiza la división por horas
fuente
Bash, 139 caracteres
fuente
Scala 184 caracteres:
En conflicto con las reglas, afirmo, que para
La salida no debería ser
pero
y eso es lo que produce mi código. Por favor, muéstrame un reloj que muestre las 24:00:00 en la Tierra en lugar de las 00:00:00, tal vez las 24:59:59. ¿O esperas la secuencia:
en lugar de
fuente
Python 2 , 137 bytes
Pruébalo en línea!
Solo un poco más corto que la otra respuesta de Python , pero toma una ruta diferente para llegar allí.
Explicación no golfista:
fuente
Haskell (
815624 caracteres no golfed, líneas en blanco excluidos)El mío imprime 00:00:00 en lugar de 12:00:00 o similar para los horarios de "medianoche".Editar: cambió eso.Podría haber abstraído algunas cosas más, pero w / e. Ignora por completo la primera línea del archivo de entrada y, en general, le pide archivos con formato incorrecto.
fuente