Desafío
Dada una hora y una zona horaria como entrada, genera la hora en esa zona horaria.
Hora
El tiempo se dará en formato de 24 horas así:
hh:mm
Donde hh es la hora de dos dígitos y mm es el minuto de dos dígitos. Tenga en cuenta que la hora y el minuto siempre se rellenarán con ceros de la siguiente manera:
06:09
Todos los horarios indicados son en UTC + 00: 00.
Las horas en su salida no tienen que ser rellenadas con ceros, pero su tiempo debe estar en formato de 24 horas
Zona horaria
La zona horaria se dará en el siguiente formato:
UTC±hh:mm
Donde ± va a ser a + o a - y hh, es la hora de dos dígitos y mm es el minuto de dos dígitos (nuevamente, estos se rellenarán con ceros).
Para encontrar el tiempo en esa zona horaria, puede sumar (si el símbolo es +) o restar (si el símbolo es -) el tiempo después del UTC ± del tiempo ingresado.
Por ejemplo, si la entrada fue 24:56
y UTC-02:50
, restarías 2 horas y 50 minutos de 24:56:
24:56
02:50 -
-----
22:06
La salida sería 22:06
.
Ejemplos
Chicago
Input: 08:50 and UTC-06:00
Output: 02:50
Katmandú
Input: 09:42 and UTC+05:45
Output: 15:27
Samoa
Input: 06:42 and UTC+13:00
Output: 19:42
Hawai
Input: 02:40 and UTC-10:00
Output: 16:40
Tenga en cuenta que esto se ha ido al día anterior.
Tokio
Input: 17:25 and UTC+09:00
Output: 02:25
Tenga en cuenta que esto se ha ido al día siguiente.
Reglas
No debe usar ninguna función de fecha o biblioteca incorporada.
Suponga que todas las entradas serán tiempos válidos y compensaciones de tiempo.
La zona horaria estará en el rango UTC-24:00
de UTC+24:00
inclusivo.
En el caso de la medianoche y media , la representación correcta debería ser 00:30
, no 24:30
.
Victorioso
El código más corto en bytes gana.
26:02
y08:74
no aparecería? ¿Lo mismo para las compensaciones UTC?2:25
)1:5
sería válido un tiempo como en lugar de1:05
? Creo que solo las horas no deberían ser rellenadas. ¿También su ejemplo con no24:56
debería ser00:56
ya que ha establecido un rango hasta24:00
y expresa similar en su escenario de media noche?Respuestas:
APL (Dyalog APL) , 45 bytes
Expresión
Toma dos cadenas como argumento correcto.
Pruébalo en línea!
Explicación
24 60⊤
la conversión de número a base a 24 b 60∘
de⍎
la evaluación∘
de⍕
el formateado (es decir, aplanado con espacios de separación)('+-'∩⍕)
intersección de "+ -" y la entrada formateada (esto extrae el signo más o menos),
seguido por(
...)¨
lo siguiente para cada una de las entradas (el tiempo y el desplazamiento)0 60⊥
la una ∞ b 60 conversión de número -to de2⊃
el segundo elemento de':'⎕VFI
la, utilizando dos puntos como separador de campo, V erified y F ixed I Nput de¯5∘↑
los últimos cinco caracteres ("hh: mm")Paso a paso en "17:25" y "UTC + 09: 00"
La expresión del lado izquierdo en los datos del lado derecho, da los datos de la siguiente línea.
fuente
C, 109 bytes
Invoque de la siguiente manera:
fuente
UTC-03:30
?JavaScript (ES6), 101 bytes
Sería 121 bytes si rellenara las horas.
fuente
Python 2, 129 bytes
Llamar como
T("02:45", "UTC-05:33")
fuente
;
.Python 2, 84 bytes
Todos los casos de prueba están en ideone
El formato de salida está separado por espacios, sin ceros a la izquierda.
fuente
Java 201 bytes
Llamado como T ("12:00", "UTC + 02: 40")
Insensible a la lógica,
¡Cualquier ayuda para obtener menos de 200 sería apreciada!
fuente
Integer i=1;
y reemplaza todos los demásInteger
pori
, así que tienes eni.valueOf
lugar deInteger.valueOf
.14:27
lugar de15:27
.java.util.function.Function v=Integer::valueOf
. No estoy seguro si eso realmente ahorraría mucho.Ruby, 95 bytes
Uso
Entradas (ejemplo)
fuente
Javascript (ES6),
9392 bytesCasos de prueba
fuente
Java
156150149147142 bytesCasos de prueba y sin golf
Virutas
a/H*60+b/H*60
->(a/H+b/H)*60
(T/H+Z/H)*60+1440
->(T/H+Z/H+24)*60
.z.replace(":","").substring(3)
->z.replaceAll("[UTC:]","")
fuente
C #
214205183 BytesVersión de 205 bytes
Sin golf
Original 214:
fuente
CJam , 40 bytes
Pruébalo en línea! (Como un conjunto de pruebas).
Explicación
fuente
Retina , 100 bytes
Pruébalo en línea!
Explicación
Reemplaza cada uno
:
con 59 de ellos y una coma como separador.Duplica repetidamente el número delante de a
:
. Entonces, las dos primeras etapas multiplican el valor de la hora por 60.Convierte cada número a unario.
Si hay un signo menos en la entrada, entonces esta etapa de transliteración convierte todos los
1
s posteriores en0
s. Básicamente estamos usando0
como un-1
dígito unario aquí.Inserte 1440
1
s (es decir, un día completo). Esto es para asegurar que el tiempo no sea negativo.Esto elimina repetidamente todos los no dígitos (es decir, el espacio, el
UTC
, el+
o-
, así como todos los,
que hemos insertado) y la10
combinación, cancelando así los dígitos positivos y negativos. Básicamente, esto resta el segundo número del primero si es negativo, o lo agrega de otra manera.Elimina 1440
1
s si es posible (básicamente tomando el módulo de resultado 1440 para ajustarlo en solo 24 horas).Descomponga el número en horas y minutos haciendo coincidir tantos fragmentos de 60 dígitos como sea posible (contando los fragmentos con
$#1
) seguidos de los dígitos restantes (cuya longitud se cuenta con$.2
).Si hay un solo dígito en el resultado, anteponga un cero.
fuente