Posso ter uma if/else
condição grande a cada 30 minutos, mas estou procurando mais soluções baseadas em matemática e Unicode.
Aqui estão os emojis de relógio: 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧. Se você não tiver suporte de renderização adequado, poderá vê-los abaixo (eles não estão na mesma ordem e podem parecer diferentes do que você vê) ou no gráfico Unicode , página 4. Eles correspondem aos pontos de código Unicode U + 1F550 (RELÓGIO ENFRENTE UM RELÓGIO) a U + 1F567 (RELÓGIO RELÓGIO DOZE TRINTA E TRINTA).
Seu desafio é escrever um programa que produza para STDOUT o emoji do relógio mais próximo da hora atual do sistema (AM e PM devem ser tratados da mesma forma). Por exemplo, se o tempo t
for [5:15 <t <5:45), você exibirá o emoji 5:30 🕠.
Isso é código-golfe, então o código mais curto em bytes vence. Você pode querer incluir uma maneira de especificar facilmente a hora de testar seu código.
Casos de teste de borda
Time Output Written
----------------------
11:48 🕛 12:00
3:15 🕞 3:30
9:45 🕙 10:00
Respostas:
Ruby -
6154 bytesPython 3-79 77 75 74 bytesedit: Acontece que isso é muito mais curto no Ruby, porque
Time
não precisa ser importado e a divisão inteira é o padrão.Aritmética:
Time.now.to_i
: Segundos desde a época./900
: Combine tempo em segmentos de 15 minutos.-3
:-4
porque os caracteres começam às 1 horas,+1
para que o arredondamento seja feito na meia hora mais próxima, e não para baixo./2
: Combine em segmentos de meia hora.%24
: Obtenha o segmento atual de meia hora em 12 horas.a/2 + a%2*12
: Leve em consideração o fato de que os caracteres de hora inteira vêm em um bloco antes dos caracteres de meia hora.Versão da hora local, 69 bytes:
Versão original do Python 3:
Imprime a hora atual UTC. O Python 2
chr
aceita apenas 0-255 eunichr
apenas 0-65535. No Python 3,/
sempre existe uma divisão de ponto flutuante e//
sempre uma divisão inteira.fonte
12*(a%2)
se fazê-lo em outra ordem:a%2*12
.Bash + Coreutils, 60 bytes
Os emojis são ótimos no terminal OSX, mas no Linux (Ubuntu 14.04) você terá que
sudo apt-get install ttf-ancient-fonts
Para testar horários diferentes, insira
-d $time
o comando date. por exemplo, para o teste 12:59:fonte
JavaScript -
13711710710295Isso vai ser facilmente derrotado, mas vou tentar o meu melhor aqui.
EDIT 1 : Agora imprime no UTC como a resposta do Python para economizar 20 bytes.
EDIT 2: Mudou
new Date().getTime()
paraDate.now()
salvar 10 bytes.EDIT 3: Mudou
Math.round(x)
para~~(x+.5)
salvar 5 bytes.EDIT 4: Removido desnecessário
(
e&1023)
deixado de alguma versão antiga de desenvolvimento, onde eu fiz uma codificação UTF-16 mais universal para economizar 7 bytes.JavaScript não permitir emojis, mas em UTF-16 que os codifica como dois caracteres. Felizmente, podemos simplesmente defini-los como dois caracteres; o primeiro caractere também é constante (
0xD83D
), enquanto o outro é alterado.Alternativa, imprime na hora local,
137132125:Mostrar snippet de código
fonte
(d%2?23+d:d)
o mesmo qued+d%2*23
?CJam, 50 bytes
O algoritmo é simples, arredonde o tempo para os 30 minutos mais próximos, conte quantos 30 minutos se passaram desde as 12h / PM, se o número for ímpar, adicione 24, divida o piso por 2 e aumente o unicode inicial por muitos pontos de código para obter a face do relógio correta.
Além disso, certifique-se de começar com 1 AM / PM em vez de 12, então faça um deslocamento lá.
Para fins de teste, use o seguinte código:
Onde a
3:H;
parte é a hora atual e a45:M;
parte é o minuto atual da hora. Simplesmente substitua3
e45
pelo valor desejado.Experimente online aqui
Nem todos os caracteres unicode podem ser impressos corretamente na versão online, dependendo do navegador, do SO e das fontes instaladas. Mas, para mim, todas as impressões são boas no Firefox com Windows 7.
fonte
CJam, 31 bytes
Você pode alterar o horário no programa a seguir para testá-lo:
fonte