El reloj de arena
Este reloj de arena tiene 60 "arenas de tiempo" y llena completamente cada cámara. El reloj tiene 19 caracteres de ancho y 13 caracteres de altura. Cada cámara tiene 5 filas de arena y hay una fila en el centro que puede contener 1 arena. La fila superior puede contener 17 arenas, la siguiente 15 y así sucesivamente (ver más abajo). Las arenas caen en la cámara inferior a razón de una arena por segundo.
START 3 SECONDS LATER 38 SECONDS LATER
███████████████████ ███████████████████ ███████████████████
█.................█ 17 █.............. █ 14 █ █ 0
██...............██ 15 ██...............██ 15 ██ ██ 0
███.............███ 13 ███.............███ 13 ███....... ███ 7
█████.........█████ 09 █████.........█████ 09 █████.........█████ 09
███████.....███████ 05 ███████.....███████ 05 ███████.....███████ 05
█████████.█████████ 01 █████████.█████████ 01 █████████.█████████ 01
███████ ███████ ███████ . ███████ ███████ . ███████
█████ █████ █████ . █████ █████ . █████
███ ███ ███ . ███ ███.... ███
██ ██ ██ ██ ██...............██
█ █ █ █ █.................█
███████████████████ ███████████████████ ███████████████████
El reto
Muestre el reloj de arena (no se requieren números ni encabezados) después de un cierto período de tiempo (0 ≤ t ≤ 60).
Reglas de codificación
- El reloj de arena debe verse exactamente como se muestra aquí. Puede reemplazar el
█
carácter y / o el.
carácter con lo que desee para adaptarse a su idioma (problemas de compatibilidad Unicode, ASCII). - La entrada debe ser un número como 45 o 7. Visualice el reloj después de estos segundos.
- La salida puede mostrarse o guardarse en un archivo. No se requieren textos ni etiquetas adicionales como se muestra arriba, solo el reloj de arena es todo lo que necesitamos.
- Si el usuario ingresa t> 60, no tiene que manejar el error.
Puntos
- El código más corto gana.
Respuestas:
JavaScript ( ES6 ), 203
208 233 270 256caracteresEditar Revisado usando un bucle en lugar de una secuencia de llamadas.
Editar Se agregaron las filas superior e inferior que faltaban.
Una función que devuelve la salida. Ejecute el fragmento en Firefox para probar.
fuente
setTimeout( tick, 1000);
Pitón 2, 200
xnor ha hecho una versión de 197 bytes en el chat .
Publicaría una explicación, pero he perdido la noción de cómo funciona realmente ...
Además, aquí hay una versión animada con maldiciones:
fuente
Python 2.7,
362356347Salida a 38 segundos:
fuente
C 544
Esto es lo que tengo hasta ahora para una solución C.
Compilado con el siguiente comando:
Es cierto que este lenguaje tiene mucho volumen, que incluir la declaración fue un poco una desventaja al salir de los bloques, pero realmente estaba buscando una excusa para practicar el uso de C.
Espero que les guste mi solución, y avíseme si ve formas de mejorar.
fuente
for
lugar dewhere
, en?:
lugar deif else
, las variables globales int no necesitanint
,include
no son necesarias. (Me gustan tus matemáticas)r,i,y,x,b,d,n[]={0,43,28,15,6,1,0,1,5,13,25,39,0};char H[14][20];main(s,a)char**a;{for(s=atoi(a[1]);y<13;){b=x=i=0;d=abs(y-6);d+=3<d?3:d;d=9-d?9-d:10;r=s>55?59-s:s>38?4:s>24?3:s>12?2:s>4?1:r;for(;b<19;)H[y][b++]=35;for(;x<19-2*d;x++)H[y][x+d]=(x>s-n[y]?" .":". ")[y>6];for(;i<r;)H[7+i++][9]=46;H[y++][b]=10;}puts(H);}
(cuidado, se agregan caracteres extraños e invisibles a comentarios largos como este)Matlab, 252 bytes
La idea es construir una matriz que se vea así:
A partir de ahí, es fácil llenar las entradas con las cadenas dependientes de
n
(llenar todas las entradas que son mayoresn
y menores quen+60
con puntos)Para
n=38
obtener esta salida:fuente
Java, 712
La entrada se toma de la línea de comando. Maneja tanto los valores negativos para el tiempo como los más grandes de lo requerido.
salida:
Llena la arena desde el centro expandiéndose hacia afuera. Probablemente pueda jugar más al golf si me da pereza saber cómo llena la mitad inferior y vacía la mitad superior. Pero por ahora me gusta bastante.
fuente
Haskell 512 Bytes
Entrada
m 55
Salida
Entrada
m 48
salidafuente
++
. También puede guardar algunos bytes predefiniendolength
yreverse
.C #, 382
410aún podría ser posible reducirlo en unos pocos bytes ...
Fiddler - 38sec
fuente
int u=60-22
y no soloint u=38
?Ruby:
196190186185184 caracteresCW porque no se ajusta exactamente a las muestras publicadas ya que esto consume arena a partir de la izquierda. Principalmente solo una demostración de
String.[]=
método.Ejecución de muestra:
Rubí: 215 caracteres.
Esto genera el resultado exacto requerido:
Ejecución de muestra:
fuente