Escreva um programa que exiba a hora atual do sistema como um relógio analógico, usando gráficos ASCII. O relógio deve mostrar pelo menos os ponteiros de hora e minuto e deve ter resolução suficiente de pelo menos 5 minutos.
A tela pode ser tão pequena e feia quanto você desejar, mas o tempo mostrado deve ser facilmente reconhecível.
O programa deve ser executado continuamente e atualizar seu status. Se o seu sistema puder limpar a tela, use-o; caso contrário, será suficiente repintar o relógio quando seu estado mudar.
Você recebe um bônus de -20% na contagem de caracteres se o relógio tiver pelo menos 1 minuto de resolução.
Respostas:
Mathematica 207 - 42 = 165
Os carrapatos e os rótulos das horas são colocados no círculo da unidade.
H
eM
gire em torno do relógio, mostrando o número inteiro de horas e minutos concluídos, respectivamente.S
atualiza sua posição várias vezes a cada segundo.Duas versões são mostradas: uma versão que plota texto no plano cartesiano e outra que exibe caracteres de texto em uma grade.
Esta versão plota os caracteres no plano cartesiano.
O relógio abaixo mostra a hora 3:08:17 .
Versão terminal ou grade :
430316 caracteres (253 com desconto bônus)Essa versão funciona da mesma forma, mas coloca os caracteres em uma grade de células 61 x 61, e não no plano cartesiano. Ainda poderia ser um pouco de golfe, mas eu só queria mostrar uma saída (mais desleixada) do terminal no Mathematica .
O relógio abaixo exibe 11:06 .
Apenas por diversão:
Aqui está uma versão não-Ascii do relógio analógico. (60 caracteres) Nenhuma biblioteca externa foi usada.
fonte
Javascript 370 - 74 = 296
http://jsfiddle.net/wBKQ6/7/
(Isso só funciona no Chrome porque estou abusando do fato de os IDs dos elementos serem adicionados ao escopo global).
Golfe (370):
Saída de amostra (muito mais condensada na demonstração):
fonte
Python, 328 - 65 = 263
Imprime um novo relógio a cada segundo, com o ponteiro dos minutos atualizando a cada minuto.
Os relógios impressos ficam assim (não é tão esticado no meu terminal):
fonte
Apenas 100% pura festança ! Sem garfo!
Uma versão finalizada e atualizada pode ser encontrada lá ou nesta página: ascii-clock for geeks . Mas não use! Leia a nota no final desta resposta, você foi avisado! Use esta versão perl !
Primeiro relógio simples sem segunda marca.
Escalável e editável:
Desenhe um relógio 21x21 (10x2 + 1) às 10H10 em menos de um segundo.
Isso aceita 3 argumentos:
Usage: ascii-clock.sh [ray of clock] [Hour] [Min]
onde o raio padrão é 12, o desenho do relógio é a2 x ray + 1
altura das linhas e a largura dupla devido ao espaço adicionado para tentar obter uma forma redonda.Se o script for chamado com
0
ou1
argumento, ele fará um loop para redesenhar a cada minuto. Caso contrário, se pelo menos Hora (segundo parâmetro) for especificado, ele será desenhado apenas uma vez e sairá.o
H
marcador está localizado em 70% do raio e oM
marcador está localizado em 90% do raio.Nenhum uso de binários externos como
date
oubc
para o sorteio!(Graças a @manatwork para o builtin
read -t
no lugar, se/bin/sleep
).Então, tudo isso é feito por builtin comandos shell.
Ele usa a sequência ANSI , mas apenas para loop e para tornar os marcadores em negrito.
Isso pode ser executado como:
Isso produzirá algo como:
Ou pode ser executado como:
Alternativa: Com desenho de caminho completo:
poderia produzir:
ou
A última versão com o Seconds marca a renderização e o nanosleep para sincronizar.
Isso funciona apenas no Linux recente, pois é usado
/proc/timer_list
para calcular fração de segundo para dormir entre cada atualização.Versão mais ofuscada (2702 bytes):
Conforme solicitado por @manatwork , há uma versão mais golfe .
Esta versão é colorida e apresenta tempo digital nas esquinas.
Nota: Não use isso de qualquer maneira!
Como esse é o programa bash e o bash não é uma linguagem de programação, isso não é bom de usar por um tempo.
Há uma pequena demonstração do consumo de memória em apenas 5 horas, com um desenho de raio de 7 caracteres:
A principal vantagem disso é que, quando preciso de memória, tenho que matar o relógio.
( Nota: eu mesclei isso, a versão perl e uma versão javascript do mesmo no ascii-clock for geeks ;-)
fonte
bash
4.1. No 4.2, de fato, é executado continuamente e não requer os parâmetros da linha de comando.bash
é uma demonstração de grande habilidade. (/ me tira o chapéu e clica no link acima). Mas esses 2529 caracteres ainda podem ser reduzidos no espírito dos desafios do código-golfe : “O código-golfe é uma competição para resolver um problema específico com o menor número de bytes de código-fonte. ”Python 2-207
É muito feio, mas legível. Imprime a cada 9 segundos (você pode alterar para 1 segundo, se preferir), atualiza a cada 5 minutos. Eu não tenho muita experiência com golfe de código em python, então espero que possa ser melhorado.
Exemplo de saída:
fonte
Perl 5 x 65 = 325 - 65 (20%) = 260 caracteres !!
Limpo, circular, com um segundo tique e atualizado a cada segundo.
Em um console de 24 linhas, fica bem (são 00:12:56 ):
E há uma versão colorida, mais agradável e inteligente:
Esta versão está fortemente ligada a essa outra resposta , com a principal vantagem: você pode executá-la em silêncio por um tempo! Então você pode encontrar uma versão atualizada lá ou neste relógio ascii para geeks página da web do .
Como demonstração de que fazer aproximadamente o mesmo em perl requer menos recursos:
para aproximadamente os mesmos recursos:
s
ponto para o manipulador de segunda mão.S
na parte superior esquerda, quando estiver dormindo (procure a diferença com a versão do bash )Mais
-a
argumento para desenhar o caminho da hora e do minuto em fração (11h59 coloca o caminho da hora aproximadamente às 12h).Deixe outra versão perl !!!
Usando a seguinte imagem (bonita):
Do que você poderia simplesmente:
Ok, isso requer a instalação do gd2-perl. Mas você pode substituir
curl
porwget -O -
;-)(Nota: Este retrato é perto de 1,5 kb que eu construí outro. Mesma imagem, mas 900 bytes de comprimento Você pode encontrar essa imagem, bem como a. Javascript versão do mesmo em ascii-relógio para geeks :-)
fonte
eval
porprint
em ordem antes de executar código desconhecido baixado ;-)Tcl, 288
Ok, aqui estão algumas explicações:
while 1 {...}
- Ok, esqueça a explicação.regsub -all \ +|. "oaosocowoeouooovoioxozom r n\n" \ {&} p
substitui+|.
por_{\0}
e armazena o resultado emp
.p
é na verdade um dicionário confuso, onde a primeira chave está ausente (ou apenas uma lista com um número ímpar de elementos).lset p [set h [expr $h%12*2]] h
define a hora na lista de substituiçãolset p [set m [expr $m/5*2]] [expr $h-$m?"m":"x"]
ajusta o minuto. se hora e minuto são os mesmos, use emx
vez disso.string map /\ $p {rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru}
/\ $p
é igual a"/ $p"
, então adiciono a primeira chave (/
). Depois disso, substituo todas as ocorrências de uma chaverr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru
por seu valor.O mapa usual é
(Leia como "Substitua
/
poro
, substituaa
poro
... substituam
por___
(que deve ser espaços))I repace um
o
comh
e um outro comm
,m
,r
en
são apenas para Shoren a cadeia de saída (I substituiu vários espaços com um deles, também\n
comn
). Eu adiciono o primeiro elemento posteriormente para que eu possa usar h * 2 em vez h * 2 + 1 para o índice que substituo. (economiza 2 caracteres)Algumas notas:
{}
. Ok, é um pouco mais complexo, por exemplo, você pode escapar do espaço em branco com a\
, mas esses detalhes estão documentados em outro lugar .key1 value1 key2 value2
fonte
Javascript 2169 - 434 = 1735
Ok, é muito, mas eles são bons e funcionam da mesma forma que a minha variante anterior em posts anteriores ( bash e perl ).
Esta versão é mais ofuscada do que a que você pode encontrar no meu relógio ascii para geeks
fonte
Python, 259 - 52 = 207
Saída de amostra:
fonte
Ruby:
230228 caracteres - 46 = 182(Nota:
^[
é um caractere único.)Exemplo de execução (às 21:19:33):
Versão "tão feia quanto você deseja":
191181 caracteres - 36 = 145(Tamanho menor, menor precisão, sem segundos, raio idêntico, tremulação horrível.)
Exemplo de execução (às 21:19):
Versão sem trigonometria:
130125 caracteres (sem bônus)(Inspirado por Johannes Kuhn 's solução Tcl . Não tenho certeza quanto, como eu ainda não decifrado o código.)
Exemplo de execução (às 21:19):
fonte
tr': can't convert Fixnum into String (TypeError)”? Now that you mentioned the error I dug for a version 1.8.7 and received the above error of that. Works fine on 1.9.2 and 1.9.3. Seems that
? M` foi interpretado como Fixnum em versões mais antigas e somente posteriormente foi alterado para String.HTML e JS:
397 - 20% = 317.6 characters
Minha primeira iteração. Não estou muito satisfeito com isso, mas funciona e mostra a hora de uma maneira muito clara.
fonte
Ti-Basic 84, 587 - 20% = 469,6
Sua saída é muito bonita e detalhada.
fonte
C, 554 bytes, atualiza aproximadamente uma vez por segundo.
Resultado:
fonte