Renvoie l'émoji d'horloge le plus proche de l'heure actuelle lors de l'exécution


20

Je peux avoir une grande if/elsecondition pour chaque 30 minutes mais je cherche plus de solution basée sur les mathématiques et Unicode.

Voici les emojis d'horloge: 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧. Si vous ne disposez pas d'un support de rendu approprié, vous pouvez les voir ci-dessous (ils ne sont pas dans le même ordre et ils peuvent différer de ce que vous voyez) ou sur le graphique Unicode , page 4. Ils correspondent aux points de code Unicode U + 1F550 (CLOCK FACE ONE OCLOCK) à U + 1F567 (CLOCK FACE TWELVE-THIRTY).

Votre défi consiste à écrire un programme qui envoie à STDOUT les emoji de cadran les plus proches de l'heure actuelle du système (AM et PM doivent être traités de la même manière). Par exemple, si l'heure test [5:15 <t <5:45), vous afficherez l'emoji 5:30 🕠.

C'est le code-golf, donc le code le plus court en octets l'emporte. Vous souhaiterez peut-être inclure un moyen de spécifier facilement l'heure de test de votre code.

Cas de test Edge

Time   Output  Written
----------------------
11:48  🕛       12:00
3:15   🕞       3:30
9:45   🕙       10:00

entrez la description de l'image ici


7
Cette question n'est pas actuellement sur le sujet ici, mais c'est probablement une solution facile. Vous avez besoin d'une condition de victoire objective, mais si vous marquez le code de question -golf, le gagnant sera celui qui écrit le programme le plus court. C'est aussi un peu sous spécifié, mais vous pourriez dire "un script qui émet l'horloge emoji la plus proche de l'heure actuelle lors de son exécution" et cela devrait suffire. De plus, bien que cela ne soit pas techniquement requis, je vous recommande d'autoriser les soumissions dans d'autres langues. (Quelqu'un en fera probablement un à Bash de toute façon.)
undergroundmonorail

L'invite de commandes Windows ne prend pas en charge les emojis :(
stokastic

2
J'ai édité votre message pour essayer de le faire respecter nos normes en clarifiant les règles et en le faisant coder le golf. N'hésitez pas à le modifier si j'ai mal interprété quoi que ce soit.
NinjaBearMonkey

3
Comment arrondir xx: 15 et xx: 45?
Peter Taylor

1
@PeterTaylor Comme vu dans les cas de test, ils doivent être arrondis (ie 1:45 => 2:00)
NinjaBearMonkey

Réponses:


9

Rubis - 61 54 octets

Python 3-79 77 75 74 octets

edit: Il s'avère que c'est beaucoup plus court dans Ruby, car il Timen'a pas besoin d'être importé et la division entière est la valeur par défaut.

a=(Time.now.to_i/900-3)/2%24
puts""<<128336+a/2+a%2*12

Arithmétique:

  • Time.now.to_i: Secondes depuis l'époque.
  • /900: Combinez le temps en segments de 15 minutes.
  • -3: -4parce que les caractères commencent à 1 heure, de +1sorte que l'arrondi est effectué à la demi-heure la plus proche, plutôt que vers le bas.
  • /2: Combinez en segments d'une demi-heure.
  • %24: Obtenez le segment actuel d'une demi-heure sur 12 heures.
  • a/2 + a%2*12: Tenez compte du fait que les caractères d'une heure entière entrent dans un bloc avant les caractères d'une demi-heure.

Version heure locale, 69 octets:

n=Time.now
a=((n.to_i+n.gmtoff)/900-3)/2%24
puts""<<128336+a/2+a%2*12

Version originale de Python 3:

import time
a=int((time.time()/900-3)/2%24)
print(chr(128336+a//2+a%2*12))

Imprime l'heure actuelle UTC. Python 2 chrn'accepte que 0-255 et unichrseulement 0-65535. En Python 3, /est toujours une division en virgule flottante et //est toujours une division entière.


Vous pouvez couper les parens de 12*(a%2)si vous le faites dans l'autre ordre: a%2*12.
xnor

7

Bash + Coreutils, 60 octets

date +%I\ 60*%M+45-30/24%%2+2~C*+C8335+0PP|dc|iconv -f ucs-4

Les emojis s'affichent bien sur le terminal OSX, mais pour Linux (Ubuntu 14.04), vous devrez sudo apt-get install ttf-ancient-fonts

Pour tester différentes heures, insérez-les -d $timedans la commande date. par exemple pour tester 12:59:

date -d 12:59 +%I\ 60*%M+45-30/24%%2+2~C*+C8335+0PP|dc|iconv -f ucs-4

5

JavaScript - 137 117 107 102 95

Cela va être facilement battu, mais je ferai de mon mieux ici.

EDIT 1 : Imprime maintenant en UTC comme la réponse Python pour économiser 20 octets.

EDIT 2: Changé new Date().getTime()pour Date.now()sauver 10 octets.

EDIT 3: Changé Math.round(x)pour ~~(x+.5)sauver 5 octets.

EDIT 4: Suppression inutile (et à &1023)gauche d'une ancienne version de développement où j'ai fait un encodage UTF-16 plus universel pour économiser 7 octets.

d=~~(Date.now()/18e5+.5)%24;d+=d<2?24:0;alert(String.fromCharCode(55357,56655+(d%2?23+d:d)/2));

JavaScript ne permet pour emojis, mais en UTF-16 qui les code comme deux caractères. Heureusement, nous pouvons simplement les définir comme deux caractères; le premier caractère est également constant ( 0xD83D), tandis que l'autre change.

Alternative, imprime à l'heure locale, 137 132 125:


N'est-ce pas (d%2?23+d:d)la même chose que d+d%2*23?
Neil

4

CJam, 50 octets

"🕐":i~et3=C%60*et4=+30d/mo2m24+24%_2%24*+2/+]:c

L'algorithme est simple, arrondissez le temps aux 30 minutes les plus proches, comptez combien de 30 minutes se sont écoulées depuis 12 h / min, si le nombre est impair, puis ajoutez-en 24, divisez le plancher par 2 et incrémentez l'unicode initial de ce nombre des points de code pour obtenir le bon cadran d'horloge.

Assurez-vous également que vous commencez avec 1 AM / PM au lieu de 12 afin de prendre un décalage là-bas.

À des fins de test, utilisez le code suivant:

3:H;45:M;"🕐":i~HC%60*M+30d/mo2m48+48%_2%24*+2/+]:c

Où la 3:H;pièce est l'heure actuelle et la 45:M;pièce est la minute actuelle de l'heure. Remplacez simplement 3et 45avec la valeur souhaitée.

Essayez-le en ligne ici

Tous les caractères Unicode peuvent ne pas s'imprimer correctement sur la version en ligne en fonction de votre navigateur et de votre système d'exploitation et des polices installées. Mais pour moi, tout va bien sur Firefox avec Windows 7.


@ user23013 Nice !. Je pense que vous devriez poster cela comme une nouvelle réponse car je n'ai pas fait de golf là-dedans :)
Optimizer

3

CJam, 31 octets

"🕐")et5<60b675+30/24%2mdC*++

Vous pouvez modifier l'heure dans le programme suivant pour la tester:

"🕐")[2014 12 19 22 14 1 901 5 -28800000]5<60b675+30/24%2mdC*++
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.