Riporta l'orologio emoji più vicino all'ora corrente durante l'esecuzione


20

Posso avere una grande if/elsecondizione per ogni 30 minuti, ma sto cercando più soluzioni matematiche e basate su Unicode.

Ecco gli emoji dell'orologio: 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧. Se non si dispone del supporto per il rendering adeguato, è possibile visualizzarli di seguito (non sono nello stesso ordine e possono apparire diversi da quelli visualizzati) o nel diagramma Unicode , pagina 4. Corrispondono ai codici codificati Unicode U + 1F550 (CLOCK FACE ONE OCLOCK) fino a U + 1F567 (CLOCK FACE TWELVE-THIRTY).

La tua sfida è scrivere un programma che trasmetta a STDOUT l'emoji del quadrante di orologio più vicino all'ora di sistema corrente (AM e PM devono essere trattati allo stesso modo). Ad esempio, se l'ora tè [5:15 <t <5:45), visualizzerai l'emoji 5:30 🕠.

Questo è code-golf, quindi vince il codice più breve in byte. Potresti voler includere un modo per specificare facilmente il tempo per testare il tuo codice.

Casi di prova Edge

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

inserisci qui la descrizione dell'immagine


7
Questa domanda non è attualmente in argomento qui, ma probabilmente è una soluzione semplice. Hai bisogno di una condizione di vittoria obiettiva, ma se tagghi la domanda code-golf, il vincitore sarà chi scrive il programma più breve. È anche un po 'sotto specificato, ma potresti dire "uno script che emette l'orologio emoji più vicino all'ora corrente durante l'esecuzione" e dovrebbe essere sufficiente. Inoltre, sebbene non sia tecnicamente necessario, ti consiglio di consentire l'invio in altre lingue. (Qualcuno probabilmente ne farà comunque uno a Bash.)
undergroundmonorail,

Prompt dei comandi di Windows non supporta emoji :(
stokastic

2
Ho modificato il tuo post per tentare di soddisfare i nostri standard chiarendo le regole e rendendolo codice golf. Sentiti libero di modificarlo se ho interpretato male qualcosa.
NinjaBearMonkey l'

3
Come dovrebbero essere arrotondati xx: 15 e xx: 45?
Peter Taylor,

1
@PeterTaylor Come si vede nei casi di test, dovrebbero essere arrotondati per
eccesso

Risposte:


9

Rubino - 61 54 byte

Python 3 - 79 77 75 74 byte

modifica: Si scopre che questo è molto più breve in Ruby, perché Timenon è necessario importarlo e la divisione intera è l'impostazione predefinita.

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

Aritmetica:

  • Time.now.to_i: Secondi dall'epoca.
  • /900: Combina il tempo in segmenti di 15 minuti.
  • -3: -4perché i personaggi iniziano all'una, in +1modo che l'arrotondamento avvenga alla mezz'ora più vicina, anziché verso il basso.
  • /2: Combina in segmenti di mezz'ora.
  • %24: Consente di ottenere il segmento di mezz'ora corrente di 12 ore.
  • a/2 + a%2*12: Spiega il fatto che i caratteri di un'ora intera arrivano in un blocco prima dei caratteri di mezz'ora.

Versione ora locale, 69 byte:

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

Versione originale di Python 3:

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

Stampa l'ora corrente UTC. Python 2 chraccetta solo 0-255 e unichrsolo 0-65535. In Python 3, /è sempre divisione in virgola mobile ed //è sempre divisione intera.


È possibile tagliare le parentesi da 12*(a%2)se lo si fa in un altro ordine: a%2*12.
xnor

7

Bash + Coreutils, 60 byte

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

Gli emoji vengono visualizzati correttamente sul terminale OSX, ma per Linux (Ubuntu 14.04) dovrai farlo sudo apt-get install ttf-ancient-fonts

Per testare orari diversi, inserire -d $timenel comando data. ad esempio per i test 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

Questo sarà facilmente battuto, ma farò del mio meglio qui.

MODIFICA 1 : ora stampa in UTC come la risposta Python per salvare 20 byte.

EDIT 2: Cambiato new Date().getTime()per Date.now()salvare 10 byte.

EDIT 3: Cambiato Math.round(x)per ~~(x+.5)salvare 5 byte.

EDIT 4: rimosso inutile (e &1023)lasciato da una vecchia versione di sviluppo in cui ho fatto una codifica UTF-16 più universale per salvare 7 byte.

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

JavaScript non consentono di emoji, ma in UTF-16, che li codifica come due caratteri. Fortunatamente, possiamo semplicemente definirli come due personaggi; anche il primo carattere è costante ( 0xD83D), mentre l'altro cambia.

Alternativa, stampa in ora locale, 137 132 125:


Non è (d%2?23+d:d)lo stesso di d+d%2*23?
Neil,

4

CJam, 50 byte

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

L'algoritmo è semplice, arrotonda il tempo ai 30 minuti più vicini, conta quanti 30 minuti sono trascorsi dalle 12 AM / PM, se il numero è dispari, quindi aggiungi 24, dividi piano per 2 e incrementa l'unicode iniziale di quel numero punti codice per ottenere il quadrante giusto.

Inoltre, assicurati di iniziare con 1 AM / PM invece di 12, quindi prendi un offset lì.

A scopo di test, utilizzare il seguente codice:

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

Dove la 3:H;parte è l'ora corrente e la 45:M;parte è il minuto corrente dell'ora. Basta sostituire 3e 45con il valore desiderato.

Provalo online qui

Non tutti i caratteri Unicode potrebbero essere stampati correttamente sulla versione online a seconda del browser, del sistema operativo e dei caratteri installati. Ma per me, tutto stampa bene su Firefox con Windows 7.


@ user23013 Nice !. Penso che dovresti pubblicarlo come una nuova risposta in quanto non ho giocato a golf :)
Optimizer

3

CJam, 31 byte

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

È possibile modificare l'ora nel seguente programma per testarlo:

"🕐")[2014 12 19 22 14 1 901 5 -28800000]5<60b675+30/24%2mdC*++
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.