Me gustaría que me construyas un reloj que muestre la hora en este formato:
18 ----------
19 --------------------------------------------------
Esto muestra '18: 10 '. La hora actual y la siguiente se muestran al frente de la línea, seguidas de un espacio y una serie de guiones: en la primera línea, la cantidad de minutos que han pasado en esta hora, y la segunda línea muestra cuántos minutos más ir en esta hora
Para aclarar
- El reloj debe mostrar la hora del sistema. Si buscar el tiempo de otra fuente es más conveniente, también está bien. Es posible que no se suministre como entrada.
- En
18:00
, la línea superior es justa18
(espacios finales permitidos pero no obligatorios) - En
18:59
el resultado final es19 -
- Las horas <10 se rellenan previamente con un
0
(01 -----
) o se alinean a la derecha (1 -----
). No se permite un solo dígito alineado a la izquierda, ni siquiera si los guiones comienzan en el lugar correcto (1 -----
no es válido). - El reloj debe mostrar las horas en formato de 24 h.
- Aunque se llama formato 24h, en realidad no hay un formato
24
. Durante la hora 23, la segunda línea comienza con00
o0
. - La pantalla debe actualizarse al menos una vez por minuto, pero eso no tiene que suceder exactamente en
00
segundos. Puede actualizar más frecuentemente / continuamente si eso es más conveniente, pero el resultado debe ser, por supuesto, legible, no una mancha en toda la pantalla.
Entrada
Ninguna.
Salida
- Como se describió anteriormente. Los espacios finales para acolchar el reloj a posiciones de 60 ish están permitidos en ambas líneas, también se permite una nueva línea final.
- La pantalla debe borrarse cuando se muestra el siguiente minuto: ya sea con un comando de pantalla clara o agregando no menos de 30 líneas nuevas.
Reglas adicionales
- Las lagunas estándar están prohibidas
- code-golf , la respuesta más corta en bytes gana.
Respuestas:
MATL , 41 bytes
Gracias a @Kundor por notar un error, ahora corregido
Pruébalo en MATL en línea! Pero tenga en cuenta que el programa se elimina después de 30 segundos, por lo que es difícil detectar cualquier cambio en la salida.
Cómo funciona
fuente
TI-Basic, 94 bytes
Relativamente sencillo. Esa es una cadena con un espacio al principio. Las horas están alineadas a la derecha. Esto solo funciona en las calculadoras TI-84 + ya que la TI-83 no tiene un reloj interno.
Editar: Gracias @kundor por notar que no cerré el último bucle. Corregido ahora (+2 bytes).
Edición n.º 2: la primera hora debe ser cero, no veinticuatro. Corregido a un costo de +14 bytes.
fuente
Str1
,getTime
, ysub(
son dos bytes cada uno. Puede obtener más información en tibasicdev.wikidot.com/tokensLote, 197 bytes
Nota: la décima línea tiene un espacio final. Para mí,
%time%
formatea horas con un espacio inicial pero minutos con un cero inicial. Decidí que un cero inicial era un formato de salida más fácil, ya que todo lo que tengo que hacer para eso es agregar 100 horas y eliminar el primer dígito. Minutos son más difíciles como08
o09
provocarán errores de análisis octales, así que prefijo A1
efectivamente añadiendo 100 minutos, ajustando por este mediante la compensación del bucle apropiadamente, que es un byte más corto que restando el 100.fuente
Python 3.6,
110114112 bytesEsto usa el nuevo formato de cadena f para guardar un byte (
f'\n{h+1:2} '
vs.'\n%2d '%(h+1)
) Puede cambiar[sleep(9)]
a1
para guardar 8 bytes, pero luego solo muestra la pantalla.Se guardó un byte cambiando
while 1:...;sleep 60
awhile[sleep(60)]:...
, gracias a TuukkaX.Tuve que usar 5 bytes más para que la siguiente hora mostrada después de las 23 fuera 0, en lugar de 24, como OP acaba de comentar. :-(
Recuperado un byte durmiendo solo 9 segundos en lugar de 60.
Se guardaron dos bytes usando un toque de bits para acortar
(h+1)%24
, tomado de la respuesta Ruby de Value Ink .fuente
sleep
regresaNone
, lo cual es falso.sleep
también está en eltime
módulo, por lo que importar * es mejor.Ruby,
989591 bytesActualizaciones cada 5 segundos. Solo funciona en terminales de estilo Unix.
Versión del símbolo del sistema de Windows,
9592 bytes:fuente
`cls`
vssystem'cls'
h=t.hour
y luego usar enh
lugar del segundot.hour
, lo que ahorra 3 bytes.cls
. ¡Gracias por tu otra sugerencia, sin embargo!puts`clear`
es el camino a seguir si usa terminales Unix. Simplemente no funciona con el símbolo del sistema de Windowscls
.puts"\e[H\e[2J"
borrar la consola, que creo que afeita cuatro bytes. Haría que tu primera línea se leyeraloop{t=Time.now;puts"\e[H\e[2J%02d %s
Perl 6 , 113 bytes
Pruébelo una vez con un tiempo de espera de un segundo.
O pruebe una versión alterada que muestre el resultado de ejecutarse durante varias horas.
Expandido:
fuente
[\+]
agrega y en[\-]
parece restar. ¿Funciona esto con la multiplicación y tal?[+] LIST
que se reduce, excepto que le da los valores intermedios. Vea la página de documentos para productosQBasic,
120127121 bytesNo ejecute esto por mucho tiempo o su computadora portátil se incendiará.Ahora 99.several9s% más eficiente de la CPU.Sin golfos y explicación
Comenzamos limpiando la pantalla, luego obtenemos las horas y minutos actuales de
TIMER
, que devuelve el número de segundos desde la medianoche.Esta es la primera vez que lo intento
PRINT USING
, así que me encantó descubrir que no sufre la peculiaridad QBasic habitual de que los números positivos se imprimen con un espacio inicial.##
ya que el especificador de formato garantiza que los números de un solo dígito estén alineados a la derecha y rellenados con un espacio, según sea necesario. Desafortunadamente, tenemos que usar un bucle para los guiones, ya que QBasic no tiene una función de repetición de cadenas. (Si me equivoco, ¡házmelo saber!)Todas las
PRINT
declaraciones terminan con;
suprimir la nueva línea; pero después de los guiones, necesitamos una nueva línea; así, el solitario?
después delFOR
bucle interno .El
SLEEP 1
ahora es necesario. Sin ella, la pantalla se borra tan rápidamente después de la impresión que es solo un destello parpadeante. (He usadoLOCATE 1
en lugar deCLS
en un primer momento por esa razón, hasta que me di cuenta de queCLS
conSLEEP
es más corto de todos modos.)RUN
Reinicia el programa desde la parte superior - el camino más corto para conseguir un bucle infinito.fuente
Java 8,
313300299 bytesEsto solo actualiza cada 30 iteraciones del ciclo while. Las otras 29 iteraciones solo imprimen nuevas líneas.
Actualizado
¡Guardado
1314 bytes gracias a la ayuda de Kevin Cruijssen! ¡Gracias!fuente
void f(){...}
y deberá agregar las importaciones que requirió (en su casoimport java.time.*;
). Dicho esto, su código se puede jugar en varios lugares para reducirlo a 311 bytes (incluso con el método agregado -declaración e importación). (Dado que es demasiado largo para este comentario, lo coloqué en el siguiente comentario ... xD)import java.time.*;void f(){for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>99){c=0;String l="",u,d;for(i=0;i++<61;)l+="-";u=l.substring(0,m);d=l.substring(m);System.out.println((h<10?"0":"")+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}}
( 303 bytes ) Recomiendo leer Consejos para jugar golf en Java y Consejos para jugar golf en <todos los idiomas> . Disfruta tu estancia.for(i=0;i++<60
lugar de 61 y en(h<10?
lugar de 9. ¡Gracias por informarme sobre la declaración del método y algunos consejos de golf!for(i=0;++i<61
lugar defor(i=0;i++<61
(en este segundo caso debería ser 60, y aunque es la misma cantidad de bytes, probablemente sea más obvio / legible). Sinh<9
embargo, en mi código es correcto. Tuvisteh+1<10
antes y simplemente cambié esto alh<9
eliminar 1 en ambos lados. :)h<9
. Lo editaré para guardar 1 byte más. ¡Gracias de nuevo!C,
176162161160156 bytesEste es un abuso grave de los punteros, pero se compila y ejecuta según lo especificado. Asegúrese de compilar sin optimización, de lo contrario es probable que llegue a una falla predeterminada.
Sin golf:
fuente
JavaScript (ES6), 162 bytes
Actualizaciones una vez por segundo
fuente
console.clear()
dentro delconsole.log
argumento) y asignar paréntesis no utilizados tanto como sea posible. Versión para 154B:setInterval(c=>c.log(H(h,c.clear(d=new Date))+` ${'-'.repeat(m)} ${H(h+1)} `+'-'.repeat(60-m)),1e3,console,m=d.getMinutes(h=d.getHours(H=$=>$<9?'0'+$:$)))
.m=>`0${h++} \.slice(-3)+'-'.repeat(m)
.Python 2,
131129127 bytessalvó un byte gracias a @TuukkaX
fuente
while 1:
19 - \n 20 -----------------------------------------------------------
. Las horas no se actualizan ...C
251267251 bytesVersión sin golf
¡Hace el trabajo! Definitivamente se puede acortar de alguna manera. Suponga que el
unistd.h
archivo está incluido.@Neil Gracias por la información.
@Seth Gracias, por guardar 8 bytes.
fuente
time_t
ystruct tm
) en su conteo de bytes.printf("\n");
que pueda usarputs("");
Golf por primera vez ...
Powershell, 116 bytes (antes 122)
Editar: del consejo de @ AdmBorkBork, cambió Get-Date a fecha y Clear a cls, para ahorrar 6 bytes.
fuente
cls
lugar declear
y (siempre que esté en Windows) endate
lugar deget-date
. También estoy seguro de que hay una forma más fácil de generar el formato: estoy jugando con él y te avisaré si se me ocurre algo.while($d=date){cls;"{0,2} {2}``n{1,2} {3}"-f($h=$d.Hour),(++$h%24),('-'*($m=$d.Minute)),('-'*(60-$m));Sleep 9}
. Utilice el salto de línea LF en su editor en lugar de ``PHP,
104105bytesEl escaparate de
printf
de caracteres de relleno personalizada:"%'-Ns"
= cadena almohadilla izquierda con-
aN
caracteres.imprimirá 99 líneas nuevas (cada 6 segundos) en lugar de borrar la pantalla.
La primera línea nueva debe ser un solo personaje. Entonces, en Windows, debe ser reemplazado por
\n
.fuente
Lenguaje GameMaker, 134 bytes
En la configuración, debe ignorar los errores no fatales para que esto funcione. Además, en GML,
#
es equivalente a\n
en la mayoría de los idiomas.fuente
Perl 6 , 104 bytes
Debe ejecutarse en un terminal compatible con ANSI para que funcione la secuencia de control para restablecer el terminal.
Bastante básico (porque los enfoques más ofuscados que probé resultaron más largos):
DateTime.now.&{" "}.say xx*
: Transforma el tiempo actual en una cadena (ver abajo) y dilo, y repite todo eso un número infinito de veces. La cadena se construye así:\ec
: Código de control ANSI<ESC>c
para restablecer el terminal, que borra la pantalla.{.hour.fmt: '%2s'}
: hora, alineado a la derecha con 2 columnas: espacio
{'-'x.minute}
: guión repetido veces por minuto\n
: nueva línea{(.hour+1).fmt: '%2s'}
: próxima hora, alineado a la derecha con 2 columnas: espacio
{'-'x 60-.minute}
: guión repetido veces 60 menos el minutofuente
AWK, 190 bytes
Como
AWK
no tiene unasleep
función incorporada, simplemente hago que revise continuamente el reloj para ver si el minuto ha cambiado todavía. La clave es que funciona ... ¿verdad? :)fuente
Python 3.5,
127120117bytesfuente
print('\n'*50)
lugar deos.system('cls')
hacerlo, funciona tanto en * nix como en Windows? Ahorraría un par de bytes ya que puede perder laos
importación y OP dice que esto está permitido.Python,
115113 bytesahorró un par de bytes gracias a @kundor y @Phlarx
fuente
:02
formatos a solo:2
.:02
formato a la derecha de un dígito horas con ceros.:2
pads izquierdos con espacios, que el desafío dice que está bien.C # interactivo (138 bytes)
fuente
d
lugar dedt
? y 2) usarsleep(1e3)
o en999
lugar de1000
?PHP,
112120 bytesComo no hay forma de limpiar la pantalla (que puedo encontrar) tuve que ir con un montón de líneas nuevas. Además, la pregunta que se actualiza a "al menos" una vez por minuto guarda un byte en
9
lugar de60
.editar: @Titus notó un error en el relleno de la segunda hora. Arreglarlo cuesta 8 bytes.
fuente
Notice: Use of undefined constant str_pad - assumed 'str_pad' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant H - assumed 'H' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant i - assumed 'i' in C:\wamp64\www\my-site\a.php on line 2
. ¿Algo sobre Meta sobre eso?-n
oerror_reporting(22519);
H
ajuste para la fecha va de 00 a 23, pero lo olvidé durante la segunda hora.Bash (3 y 4): 90 bytes
Debido al uso de
$0
, este script debe colocarse en un archivo, no pegarse en un shell bash interactivo.El primer comando se establece
$d
en 60 guiones; se basa en el hecho de que la primera línea de este script tiene 60 caracteres de longitud. Estos son tres caracteres más cortos que la siguiente mejor cosa que se me ocurrió:Si no desea que esto acabe con su cuadro de PID o memoria, puede agregarlo
eval
al comienzo de la última línea, lo que generaría estos 95 bytes.fuente
let: h=09: value too great for base (error token is "09")
. El problema es que los ceros iniciales se interpretan como constantes octales, por lo que 09 no es válido.Bash,
165141155 bytesfuente
sleep 9
a la condición del bucle while; elimine el-
frente de M en la cadena de formato en la línea 4. Tampoco necesita usar $ delante de nombres de variables en expresiones aritméticas, por lo que$((60-$m))
puede ser$((60-m))
h=23; echo $((10#$h+1))
imprime 24 para mí.Gura , 138 bytes
Bastante corto y directo :)
fuente
Gura.exe
y pegar este código me da un error de sintaxissymbol k is not defined
.Ok, no he hecho un código de golf en mucho tiempo, así que aquí va mi triste intento :)
Unix Korn Shell:
177171170 bytesfuente
Mathematica, 235 bytes
fuente
Procesamiento,
204200198197 bytes5 bytes guardados gracias a @L. Serné utilizando ternaries más inteligentes
Esto genera más de 30 líneas nuevas para cada actualización (que tiene lugar cuando se actualiza el marco)
Sin golf
fuente
((i=hour())<10?" ":"")+i
a((i=hour())>9?i:" "+i)
ahorraría 2B dos veces ... ¡Buena suerte con más golf!((i=hour()+1)>24?i=0:i)>9
convierte(i=hour()+1)>9
, ya quehour
genera un número en el rango de 0-23, e incluso con 1 agregado a eso, nunca será mayor que 24. Además, debe mover el incremento deli
interior de la condición en elfor
bucle como hiciste en el último bucle. Debería ahorrar 13B en total.i
interior de la condición del ciclo for,i
comenzará como en1
lugar de0
y necesito agregar un byte mási++<=minute()
y el bytecount seguirá siendo el mismo. Pero no obstante, gracias por ayudarme a jugar al golf 1 bytes más :)C, 239 bytes
Inspirado por las entradas de Seth y Abel, esto generará 0 en lugar de 24 durante la próxima hora, según sea necesario, y usará 30 líneas para borrar la pantalla.
fuente
SmileBASIC, 55 bytes
Explicación:
Nota: SmileBASIC solo tiene 50 columnas de texto, por lo que no se verá bien ...
fuente
C #
181176Este código supone que la
using System.Threading;
línea está incluida.Clase completa:
fuente
Console.ReadKey
declaración es redundante. La única forma de salir es cerrar la ventana de la consola oCtrl+Break
...using System.Threading;
debe incluirse en el recuento de bytes si lo está utilizando. Lo mismo conUsing System;
.