Escriba un programa que muestre la hora actual del sistema como un reloj analógico, utilizando gráficos ASCII. El reloj debe mostrar al menos los indicadores de hora y minutos, y debe tener una resolución suficiente de al menos 5 minutos.
La pantalla puede ser tan pequeña y fea como desee, pero el tiempo mostrado debe ser fácilmente reconocible.
El programa tiene que ejecutarse continuamente y actualizar su estado. Si su sistema puede borrar la pantalla, úsela, de lo contrario es suficiente para volver a pintar el reloj cuando cambie su estado.
Obtienes una bonificación de -20% en el recuento de personajes si el reloj tiene al menos una resolución de 1 minuto.
Respuestas:
Mathematica 207 - 42 = 165
Las marcas y las etiquetas de hora se colocan en el círculo de la unidad.
H
yM
giran alrededor del centro del reloj que muestra el número total de horas y minutos completos, respectivamente.S
actualiza su posición varias veces por segundo.Se muestran dos versiones: una versión que traza el texto en el plano cartesiano y otra que muestra los caracteres de texto en una cuadrícula.
Esta versión traza a los personajes en el plano cartesiano.
El siguiente reloj muestra la hora 3:08:17 .
Versión de terminal o red :
430316 caracteres (253 con descuento adicional)Esta versión funciona de la misma manera, pero coloca los caracteres en una cuadrícula de celdas de 61 x 61 en lugar de en el plano cartesiano. Todavía podría jugarse un poco, pero simplemente quería mostrar una salida similar a un terminal (más descuidada) en Mathematica .
El siguiente reloj muestra 11:06 .
Solo por diversión:
Aquí hay una versión no Ascii del reloj analógico. (60 caracteres) No se utilizaron bibliotecas externas.
fuente
Javascript 370-74 = 296
http://jsfiddle.net/wBKQ6/7/
(Esto solo funciona en Chrome porque estoy abusando del hecho de que las ID de elementos se agregan al alcance global).
Golfizado (370):
Salida de muestra (mucho más condensada en la demostración):
fuente
Python, 328-65 = 263
Imprime un nuevo reloj cada segundo, con la manecilla de minutos actualizándose cada minuto.
Los relojes que imprime se ven así (no está tan extendido en mi terminal):
fuente
100% puro golpe solamente! Sin tenedor!
Una versión finalizada y actualizada se puede encontrar allí o en esta página: reloj ascii para geeks . ¡Pero no lo uses! Lea la nota al final de esta respuesta, ¡ha sido advertido! ¡Utiliza esta versión perl en su lugar!
Primer reloj simple sin segundo tic.
Escalable y editable:
Dibuja un reloj de 21x21 (10x2 + 1) a las 10H10 en menos de un segundo.
Esto acepta 3 argumentos:
Usage: ascii-clock.sh [ray of clock] [Hour] [Min]
donde el rayo predeterminado es 12, el dibujo del reloj es la2 x ray + 1
altura de las líneas y el ancho doble debido al espacio agregado para tratar de obtener una forma redonda.Si el script se llama con
0
o1
argumento, se repetirá para volver a dibujar cada minuto. De lo contrario si al menos Hora se especifica (segundo parámetro), se dibujará solo una vez y saldrá.los
H
marcador se encuentra al 70% del rayo y elM
marcador se encuentra al 90% del rayo.No se utilizan binarios externos como
date
obc
para el sorteo!(Gracias a @manatwork por la construcción
read -t
en su lugar si/bin/sleep
).Entonces todo esto lo hace comandos de shell incorporados .
Utiliza ANSI secuencia , pero solo para el bucle y para poner en negrita los marcadores.
Esto podría ejecutarse como:
Esto producirá algo como:
O podría ejecutarse como:
Alternativa: con dibujo de ruta completo:
podría producir:
o
Última versión con segundos representación de ticks en y nanosleep para sincronizar.
Esto funciona solo en Linux reciente, ya que se usa
/proc/timer_list
para calcular una fracción de segundo para dormir entre cada actualización.Versión más ofuscada (2702 bytes):
Según lo solicitado por @manatwork , hay un campo de golf más versión .
Esta versión está coloreada y presenta el tiempo digital en las esquinas.
Nota: ¡No uses esto de todos modos!
Como esto es bash programm y como bash no es un lenguaje de programación, no es bueno usarlo por un tiempo.
Hay una pequeña demostración del consumo de memoria en solo 5 horas, con un dibujo del rayo de 7 caracteres de longitud:
La principal ventaja de esto es que cuando necesito memoria, solo tengo que matar el reloj.
( Nota: he fusionado esto, la versión perl y una versión javascript de la misma en ascii-clock para geeks ;-)
fuente
bash
4.1. En 4.2 de hecho se ejecuta continuamente y no requiere los parámetros de la línea de comandos.bash
es una demostración de gran habilidad. (/ me quita el sombrero y hace clic en el enlace de votación positiva) Pero esos 2529 caracteres aún podrían reducirse en el espíritu de los desafíos del código de golf : “El código de golf es una competencia para resolver un problema particular en la menor cantidad de bytes de código fuente. "Python 2 - 207
Es muy feo, pero legible. Imprime cada 9 segundos (puede cambiar a 1 segundo si lo prefiere), actualiza cada 5 minutos. No tengo mucha experiencia con el golf de código en Python, así que espero que pueda mejorarse.
Salida de ejemplo:
fuente
Perl 5 x 65 = 325 - 65 (20%) = 260 caracteres !!
Limpio, circular, con un segundo tic y actualizado cada segundo.
En una consola de 24 líneas se ve bien (son las 00:12:56 ):
Y hay una versión coloreada, más bonita e inteligente:
Esta versión está fuertemente vinculada a esta otra respuesta , con la principal ventaja: ¡podría ejecutar esto en silencio, por un tiempo! Entonces puede encontrar una versión actualizada allí o en este reloj ascii para la página web de geeks .
Como demostración de que hacer aproximadamente lo mismo en Perl requiere menos recursos:
para aproximadamente las mismas características:
s
punto para el segundo controlador.S
en la parte superior izquierda, al dormir (busque la diferencia con la versión bash )Más
-a
argumento para dibujar la ruta de la hora y los minutos en fracción (11h59 lugar de la ruta de la hora aproximadamente a las 12h).Deja que otra versión perl !!!
Usando la siguiente imagen (hermosa):
De lo que podrías simplemente:
Ok, esto requiere tener instalado gd2-perl. Pero podrías reemplazar
curl
porwget -O -
;-)(Nota: esta imagen está cerca de 1.5Kb. He creado otra misma imagen, pero 900 bytes de longitud. Puede encontrar esta imagen, así como una versión de JavaScript en ascii-clock para geeks :-)
fuente
eval
porprint
fin antes de ejecutar código descargado desconocida ;-)Tcl, 288
Ok, aquí una explicación:
while 1 {...}
- Ok, olvida la explicación.regsub -all \ +|. "oaosocowoeouooovoioxozom r n\n" \ {&} p
reemplaza+|.
con_{\0}
y almacena el resultado enp
.p
en realidad es un diccionario desordenado donde falta la primera clave (o simplemente una lista con un número impar de elementos).lset p [set h [expr $h%12*2]] h
establece la hora en la lista de reemplazolset p [set m [expr $m/5*2]] [expr $h-$m?"m":"x"]
establece el minuto Si la hora y los minutos son iguales, usex
en su lugar.string map /\ $p {rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru}
/\ $p
es igual a"/ $p"
, entonces agrego la primera clave (/
). Después de eso, reemplazo cada aparición de una claverr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru
con su valor.El mapa habitual es
(Lea como "Reemplazar
/
cono
, reemplazara
cono
... reemplazarm
con___
(que deberían ser espacios))Me Repace una
o
conh
y otra con unam
,m
,r
yn
son sólo para Shoren la cadena de salida (Substituí varios espacios con uno de ellos, también\n
conn
). Agrego el primer elemento más tarde para poder usar h * 2 en su lugar h * 2 + 1 para el índice que reemplazo. (ahorra 2 caracteres)Algunas notas:
{}
. Ok, es un poco más complejo, por ejemplo, podría escapar del espacio en blanco con un\
, pero dichos detalles están documentados en otro lugar .key1 value1 key2 value2
fuente
Javascript 2169 - 434 = 1735
Ok, es mucho, pero están bien y funcionan igual que mi variante anterior en publicaciones anteriores ( bash y perl ).
Esta versión está más ofuscada que la que puedes encontrar en mi reloj ascii para geeks
fuente
Pitón, 259-52 = 207
Salida de muestra:
fuente
Rubí:
230228 caracteres - 46 = 182(Nota:
^[
es un solo personaje).Ejecución de muestra (a las 21:19:33):
Versión "tan fea como quieras":
191181 caracteres - 36 = 145(Tamaño más pequeño, menor precisión, sin segundos, radio idéntico, parpadeo horrible).
Ejecución de muestra (a las 21:19):
Versión sin trigonometría:
130125 caracteres (sin bonificación)(Inspirado por la solución Tcl de Johannes Kuhn . No estoy seguro de cuánto, ya que todavía no descifré su código).
Ejecución de muestra (a las 21:19):
fuente
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
¿se interpreta " ? M " como Fixnum en versiones anteriores y solo más tarde se cambió a String.HTML y JS:
397 - 20% = 317.6 characters
Mi primera iteración No estoy muy satisfecho con eso, pero funciona y muestra el tiempo de una manera muy clara.
fuente
Ti-Basic 84, 587 - 20% = 469.6
Su salida es muy bonita y detallada.
fuente
C, 554 bytes, se actualiza aproximadamente una vez por segundo.
Resultado:
fuente