Une horloge analogique a 2 aiguilles *: heure et minute.
Ces aiguilles encerclent le cadran de l'horloge au fil du temps. Chaque rotation complète de l'aiguille des minutes entraîne 1 / 12ème de rotation de l'aiguille des heures. 2 tours complets de l'aiguille des heures signifient une journée complète.
Comme ces mains sont fixées au même point central et tournent autour de ce point, vous pouvez toujours calculer l'angle entre les mains. En fait, il y a 2 angles à tout moment; Un plus grand et un plus petit (parfois ils seront tous les deux égaux à 180, mais ce n'est pas important)
* Nos horloges hypothétiques n'ont pas de seconde main
Tâche
Étant donné une heure au format 24 heures, affichez le plus petit angle entre les mains, en degrés. Si les mains sont directement en face l'une de l'autre (comme à 6:00
, 18:00
etc.), sortie 180
Règles
Entrée peut être considéré comme: - Un séparateur de chaîne séparé: 6:32
, 14.26
- 2 valeurs séparées, des chaînes ou des ints: 6, 32
, 14, 26
- Une matrice de 2 valeurs, des chaînes ou des ints: [6, 32]
,[14, 26]
Vous pouvez également éventuellement spécifier que votre réponse nécessite des entrées être rembourré à 2 chiffres ( en supposant que vous prenez des chaînes), à savoir: 06:32
, 06, 32
,[06, 32]
Vous pouvez également en option inverser l'ordre des entrées, en minutes , puis une heure, à savoir: 32:6
, 32, 6
,[26, 14]
L'heure sera une valeur entière entre 0
et 23
(inclus) La minute sera une valeur entière entre 0
et 59
(inclus)
Vous pouvez supposer que l'aiguille des minutes s'accroche par incréments de 6 degrés le long du visage (une position régulièrement espacée pour chaque valeur de minute)
Vous pouvez supposer que l'aiguille des heures s'accroche par incréments de 0,5 degré le long du visage (une position également chaque valeur minute par valeur heure)
La sortie doit être donnée en degrés, pas en radians. Vous pouvez inclure un suivi .0
pour les nombres entiers
Notation
C'est du golf de code donc le moins d'octets dans chaque langue gagne!
Cas de test
Input: 06:32
Output: 4
Input: 06:30
Output: 15
Input: 18:32
Output: 4
Input: 06:01
Output: 174.5
Input: 00:00
Output: 0
Input: 00:01
Output: 5.5
Input: 12:30
Output: 165
Input: 6:00
Output: 180
Input: 23:59
Output: 5.5
00:59 -> 35.5
(une petite valeur de avec une grande valeur de est susceptible de faire échouer certaines implémentations). mRéponses:
JavaScript (ES6),
41 4039 octetsPrend les entrées comme
(h)(m)
.Essayez-le en ligne!
Comment?
Au lieu de travailler directement dans la plage , nous définissons une variable temporaire dans la plage :[ 0..360 ] X [ 0..4 ]
L'angle en degrés est donné par:
Cependant, la formule est implémentée un peu différemment dans le code JS, car nous voulons certainement éviter d'utiliser le long
Math.abs()
et leMath.min()
.Au lieu de calculer la valeur absolue, nous une valeur positive dans en calculant:[ 0..12 ]
Et au lieu de calculer le minimum, nous déterminons dans quel cas nous sommes en faisant simplement un ET au niveau du bit avec - et c'est pourquoi nous avons choisi un intervalle limité par une puissance de en premier lieu.2 2
la source
Gelée ,
1412 octetsEssayez-le en ligne!
Un lien monadique qui prend le temps comme une liste de deux entiers: heure, minute.
Merci à @JonathanAllan d'avoir économisé 2 octets!
Explication
la source
(-180, 180]
équivalent (mod 360). Ces builtins ...Ø°
pour360
et“<¿‘
pour60,11
. Like soד<¿‘Iæ%Ø°AH
TIOMATL, 18 octets
Accepte deux entrées d'heures suivies de minutes. Utilise la même méthode que cette réponse
Essayez-le sur MATL Online
Explication
la source
180
au lieu de0
?Wolfram Language (Mathematica) ,
302928 octetsEssayez-le en ligne!
version non golfée:
L'argument de la fonction
# = {h,m}
contient l'heure et la minute. Cette longueur deux liste est interprétée comme un vecteur et le point-produit{30,-5.5}
est calculé:#.{30,-5.5} = 30*h-5.5*m
. Ensuite, nous calculons le module symétrique de 360 enMod[#.{30,-5.5}, 360, -180]
donnant un angle dans l'intervalle -180 .. + 180.Abs
en prend la valeur absolue.Comme tous les opérateurs impliqués sont linéaires, nous pouvons multiplier et diviser tous les nombres apparaissant comme ils sont les plus pratiques. En retirant un facteur de
5
l'expression et en divisant tous les nombres de l'expression par 5, le nombre d'octets est minimisé.la source
Alchimiste , 134 octets
Essayez-le en ligne!
Explication
La configuration initiale. Entrer les heures et les minutes dans
h
etm
, définit l'angle actueld
à 360 degrés (720 demi-degrés), configurea
pour calculer l'angle principal et définit l'indicateur de sortie.Chaque heure ajoute 30 degrés et chaque minute soustrait 5,5 degrés.
Bien que l'
r
indicateur (inverse) ne soit pas défini, chaqued
atome doit déplacer una
atome versb
. Cela se produit après que toutes les minutes soient épuisées, pour éviter une "condition de course". Lorsqu'il ne reste plus d'a
atomes, réglez-ler
pour inverser ce flux.Notez que cette deuxième règle peut se déclencher plusieurs fois et peut même se déclencher avant la règle de configuration initiale. Cela ne nuit à rien, il n'est donc pas nécessaire de prévenir cela. La
0x
condition gère un cas de bord: lorsque l'entrée est 6:00, il n'y a pas d'a
atomes lorsque le programme se termine, mais il y a desx
atomes si le résultat final est d'au moins 1 degré.L'inverse: lorsque l'angle signé est supérieur à 180 degrés, déplacez les
b
atomes versa
pour diminuer l'angle de sortie. Arrêtez de reculer lorsque l'angle atteint "360".Lorsque tous les atomes sont épuisés, divisez par 2 pour obtenir l'angle de sortie.
Après cela, effectuez une sortie exactement une fois en utilisant l'
f
indicateur de la configuration initiale.la source
Python 3.8 (pré-version) ,
4543 octets-2 octets grâce à Erik .
Essayez-le en ligne!
h%12
- heure au format 12 heuresh%12*30
- angle de l'aiguille des heures à l'heure entièrem/2
- angle de l'aiguille des heures déplacée enm
minutesh%12*30+m/2
- position actuelle de l'aiguille des heures en tant qu'anglem*6
- angle de l'aiguille des minutes (360°/60 = 6°
)la source
Stax , 15 octets
Exécuter et déboguer
m =
nombre de minutes depuis minuitd = 5.5 * m
min(d % 360, -d % 360)
.la source
C # (Visual C # Interactive Compiler) ,
4745 octetsEssayez-le en ligne!
la source
Fusain , 22 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend l'entrée comme deux entiers. Explication:
la source
Perl 6 , 28 octets
Essayez-le en ligne!
Utilise quelques astuces volées dans d'autres réponses et calcule
la source
Python 3 , 40 octets
Essayez-le en ligne!
h*30
- angle entre midi et l'heureh
où la minute est0
; si l'heure est égale ou supérieure à 12, cet angle peut être égal ou supérieur à 360 °m*6
- angle entre midi et l'aiguille des minutesm*.5
- angle que l'aiguille des heures avance de l'heure complète après lesm
minutes (par exemple: s'il est 4 h 24, l'aiguille des heures a avancé de 12 degrés par rapport à la position où elle se trouvait à 4 heures)h*30-m*5.5
- l'un des deux angles entre l'aiguille des heures et l'aiguille des minutes; le coefficient dem
est5.5
parce quem*6-m*.5=m*5.5
; ce n'est toujours pas la réponse car il peut s'agir d'une valeur supérieure à 360 ° (ex: sih,m=13,0
) ou inférieure à 0 ° (ex: sih,m=12,30
)(h*30-m*5.5)%360
- ce modulo prend en compte les cas où la valeur calculée ci-dessus n'est pas comprise entre 0 et 360 °; ce n'est toujours pas la réponse car ce pourrait être l'amplificateur des deux angles, alors que nous voulons le plus étroit180-abs(180-(h*30-m*5.5)%360)
- c'est le résultat final; la règle générale est celle quix-abs(x-y)
équivaut àmin(y,x-y)
, ce qui donnerait le résultat correctla source
Tcl ,
71745954 octetsEssayez-le en ligne!
enregistré 5 octets en utilisant une expression lambda
la source
Python 3,
5857 octets-1 / -2 Merci à @Shaggy
Implémentation naïve, prend les entrées sous la forme de
[6,32]
. Certains octets peuvent probablement être supprimés de la dernière ligne en particulier.Python 2,
5250 octetsla source
30*h-5.5*m
devrait vous faire économiser quelques octets.def
fonction -style devrait également enregistrer quelques octets.Perl 5
-MList::Util=min -p
, 37 octetsEssayez-le en ligne!
Prend l'entrée en heures suivie de minutes sur une ligne distincte car elle a économisé quelques octets.
la source
[R], 45 octets
la source
Japt , 16 octets
Essayez-le
la source
> <> , 17 octets
Essayez-le en ligne! (6:32)
Prend l'entrée comme h, m sur la pile.
Explication
la source
05AB1E , 16 octets
Prend des heures comme première entrée, des minutes comme seconde.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Implémente essentiellement la formule suivante:
la source
Pyret, 59 octets
la source