Défi
Étant donné une heure et un fuseau horaire en entrée, affichez l'heure dans ce fuseau horaire.
Temps
L'heure sera donnée au format 24 heures comme suit:
hh:mm
Où hh est l'heure à deux chiffres et mm est la minute à deux chiffres. Notez que l'heure et la minute seront toujours remplies de zéros comme ceci:
06:09
Toutes les heures indiquées sont à UTC + 00: 00.
Les heures dans votre sortie ne doivent pas être remplies avec des zéros mais votre temps doit être au format 24 heures
Fuseau horaire
Le fuseau horaire sera donné dans le format suivant:
UTC±hh:mm
Où ± va être soit un + ou un - et hh, est l'heure à deux chiffres et mm est la minute à deux chiffres (encore une fois, ceux-ci seront remplis de zéros).
Pour trouver l'heure dans ce fuseau horaire, vous ajoutez (si le symbole est +) ou soustrayez (si le symbole est -) l'heure après l'UTC ± de l'heure entrée.
Par exemple, si l'entrée était 24:56
et UTC-02:50
, vous soustraire 2 heures et 50 minutes de 24:56:
24:56
02:50 -
-----
22:06
La sortie serait 22:06
.
Exemples
Chicago
Input: 08:50 and UTC-06:00
Output: 02:50
Katmandou
Input: 09:42 and UTC+05:45
Output: 15:27
Samoa
Input: 06:42 and UTC+13:00
Output: 19:42
Hawaii
Input: 02:40 and UTC-10:00
Output: 16:40
Notez que cela est allé à la veille.
Tokyo
Input: 17:25 and UTC+09:00
Output: 02:25
Notez que cela est allé au lendemain.
Règles
Vous ne devez utiliser aucune fonction ou bibliothèque de date intégrée.
Supposons que toutes les entrées seront des heures et décalages horaires valides.
Le fuseau horaire sera compris entre inclus UTC-24:00
et UTC+24:00
inclus.
Dans le cas de minuit et demi , la représentation correcte devrait être 00:30
, non 24:30
.
Gagnant
Le code le plus court en octets gagne.
26:02
et08:74
n'apparaîtrait pas? De même pour les décalages UTC?2:25
1:5
serait-il valide au lieu de1:05
? Je pense que seules les heures ne devraient pas être remplies. Votre exemple avec24:56
ne devrait-il pas en être ainsi00:56
puisque vous avez indiqué une plage allant jusqu'à24:00
et exprimez la même chose dans votre scénario de minuit et demie?Réponses:
APL (Dyalog APL) , 45 octets
Expression
Prend deux chaînes comme argument de droite.
Essayez-le en ligne!
Explication
24 60⊤
le nombre en base - une conversion 24 b 60∘
de⍎
l'évaluation∘
de⍕
le formaté (c'est-à-dire aplati avec des espaces de séparation)('+-'∩⍕)
intersection de "+ -" et de l'entrée formatée (ceci extrait le plus ou le moins),
suivi par(
...)¨
ce qui suit pour chacune des entrées (le temps et le décalage)0 60⊥
l' a ∞ b 60 conversion -À-nombre de2⊃
le deuxième élément de':'⎕VFI
la, en utilisant du côlon comme séparateur de champ, V erified et F ixe I Nput de¯5∘↑
les cinq derniers caractères ("hh: mm")Pas à pas sur "17:25" et "UTC + 09: 00"
L'expression de gauche sur les données de droite donne les données de la ligne suivante.
la source
C, 109 octets
Appelez comme suit:
la source
UTC-03:30
?JavaScript (ES6), 101 octets
Serait de 121 octets si je remplissais les heures.
la source
Python 2, 129 octets
Appeler en tant que
T("02:45", "UTC-05:33")
la source
;
.Python 2, 84 octets
Tous les cas de test sont à idéone
Le format de sortie est séparé par des espaces, sans zéros non significatifs.
la source
Java 201 octets
Appelé T ("12:00", "UTC + 02: 40")
Unglolfed pour la logique,
Toute aide pour obtenir moins de 200 serait appréciée!
la source
Integer i=1;
et remplacez tous les autresInteger
pari
, donc vous avezi.valueOf
au lieu deInteger.valueOf
.14:27
place de15:27
.java.util.function.Function v=Integer::valueOf
. Je ne sais pas si cela permettrait d'économiser beaucoup.Rubis, 95 octets
Usage
Entrées (exemple)
la source
Javascript (ES6),
9392 octetsCas de test
la source
Java
156150149147142 octetsCas de test et non golfés
Copeaux
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:]","")
la source
C #
214205183 octetsVersion 205 octets
Non golfé
Original 214:
la source
CJam , 40 octets
Essayez-le en ligne! (En tant que suite de tests.)
Explication
la source
Rétine , 100 octets
Essayez-le en ligne!
Explication
Remplace chacun
:
par 59 d'entre eux et une virgule comme séparateur.Duplique à plusieurs reprises le nombre devant un
:
. Ainsi, les deux premières étapes multiplient la valeur horaire par 60.Convertissez chaque nombre en unaire.
S'il y a un signe moins dans l'entrée, alors cette étape de translittération transforme tous les
1
s après en0
s. Nous utilisons essentiellement0
un-1
chiffre unaire ici.Insérez 1440
1
s (soit une journée complète). C'est pour s'assurer que le temps ne devienne pas négatif.Cela supprime à plusieurs reprises tous les non-chiffres (c'est-à-dire l'espace, le
UTC
, le+
ou-
, ainsi que tous ceux que,
nous avons insérés) et la10
combinaison, annulant ainsi les chiffres positifs et négatifs. Cela soustrait fondamentalement le deuxième nombre du premier s'il est négatif, ou l'ajoute autrement.Supprime 1440
1
s si possible (en prenant le résultat modulo 1440 pour l'adapter en 24 heures).Décomposez le nombre en heures et minutes en faisant correspondre autant de morceaux de 60 chiffres que possible (en comptant les morceaux avec
$#1
) suivi des chiffres restants (dont la longueur est comptée avec$.2
).S'il y a un seul chiffre dans le résultat, ajoutez un zéro.
la source