Puedo tener una if/else
condición grande por cada 30 minutos, pero estoy buscando más soluciones basadas en matemáticas y Unicode.
Aquí hay emojis de reloj: 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧. Si no tiene el soporte de renderizado adecuado, puede verlos a continuación (no están en el mismo orden y pueden verse diferentes a lo que ve) o en el gráfico Unicode , página 4. Corresponden a los puntos de código Unicode U + 1F550 (RELOJ CARA UN OCLOQUE) hasta U + 1F567 (CARA DE RELOJ DOCE TREINTA).
Su desafío es escribir un programa que envíe a STDOUT el emoji de la esfera del reloj más cercano a la hora actual del sistema (AM y PM deben tratarse de la misma manera). Por ejemplo, si el tiempo t
es [5:15 <t <5:45), mostraría el emoji 5:30 🕠.
Este es el código de golf, por lo que gana el código más corto en bytes. Es posible que desee incluir una manera de especificar fácilmente el tiempo para probar su código.
Casos de prueba de borde
Time Output Written
----------------------
11:48 🕛 12:00
3:15 🕞 3:30
9:45 🕙 10:00
Respuestas:
Ruby -
6154 bytesPython 3 - 79 77 75 74 byteseditar: Resulta que esto es mucho más corto en Ruby, porque
Time
no necesita ser importado y la división entera es la predeterminada.Aritmética:
Time.now.to_i
: Segundos desde la época./900
: Combina el tiempo en segmentos de 15 minutos.-3
:-4
porque los caracteres comienzan a la 1 en punto,+1
por lo que el redondeo se realiza a la media hora más cercana, en lugar de hacia abajo./2
: Combinar en segmentos de media hora.%24
: Obtenga el segmento actual de media hora de 12 horas.a/2 + a%2*12
: Tenga en cuenta el hecho de que los caracteres de una hora completa aparecen en bloque antes de los caracteres de media hora.Versión de hora local, 69 bytes:
Versión original de Python 3:
Imprime la hora actual UTC. Python 2
chr
solo acepta 0-255, yunichr
solo 0-65535. En Python 3,/
siempre es división de punto flotante y//
siempre es división entera.fuente
12*(a%2)
si lo hace en otro orden:a%2*12
.Bash + Coreutils, 60 bytes
Los emojis funcionan bien en el terminal OSX, pero para Linux (Ubuntu 14.04) tendrás que
sudo apt-get install ttf-ancient-fonts
Para probar diferentes horas, inserte
-d $time
en el comando de fecha. por ejemplo, para probar 12:59:fuente
JavaScript -
13711710710295Esto será fácil de superar, pero haré lo mejor que pueda aquí.
EDITAR 1 : ahora imprime en UTC como la respuesta de Python para guardar 20 bytes.
EDITAR 2: cambiado
new Date().getTime()
aDate.now()
para guardar 10 bytes.EDITAR 3: cambiado
Math.round(x)
a~~(x+.5)
para guardar 5 bytes.EDITAR 4: Eliminado innecesario
(
y&1023)
dejado de alguna versión de desarrollo anterior donde hice una codificación UTF-16 más universal para guardar 7 bytes.JavaScript no permite emojis, pero en UTF-16 que los codifica como dos caracteres. Afortunadamente, podemos simplemente definirlos como dos personajes; el primer caracter también es constante (
0xD83D
), mientras que el otro cambia.Alternativa, impresiones en hora local,
137132125:Mostrar fragmento de código
fuente
(d%2?23+d:d)
mismo qued+d%2*23
?CJam, 50 bytes
El algoritmo es simple, redondee el tiempo a los 30 minutos más cercanos, cuente cuántos minutos han pasado desde las 12 AM / PM, si el número es impar, luego agregue 24, divida el piso por 2 e incremente el Unicode inicial por esa cantidad puntos de código para obtener la esfera del reloj correcta.
Además, asegúrese de comenzar con 1 AM / PM en lugar de 12, así que tome un desplazamiento allí.
Para fines de prueba, use el siguiente código:
Donde la
3:H;
parte es la hora actual y la45:M;
parte es el minuto actual de la hora. Simplemente reemplace3
y45
con el valor deseado.Pruébalo en línea aquí
No todos los caracteres Unicode pueden imprimirse correctamente en la versión en línea dependiendo de su navegador y sistema operativo y las fuentes instaladas. Pero para mí, todos imprimen bien en Firefox con Windows 7.
fuente
CJam, 31 bytes
Puede cambiar la hora en el siguiente programa para probarlo:
fuente