Desafío
Escriba un programa / función completa para demoler un edificio determinado a razón de 1 piso por segundo .
ENTRADA
La entrada es un edificio a través de STDIN (o como se llame en su idioma) o a través de un ARGUMENTO de una función. t = 0 s
|
|#|
{#}
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
la entrada consiste en:
|
marca el inicio y el final de un piso.{
,}
marca el piso con explosivos.#
Es una ventana que es para decoración.es el espacio, que está en todas partes dentro de los pisos donde
#
no hay.T
marca el terreno (no puede ser demolido).*
marca el piso detonado.
Reglas de entrada:
- el edificio comienza desde arriba con uno
|
y termina en el suelo (sin no (T
) = no (char used in ground floor
)). - hay una ventana
#
en cada lugar extraño dentro de cada piso. T
marca el final de su entrada.- solo un piso consta de explosivos.
- cada piso está hecho de un número impar . de caracteres
- A medida que asciende por los pisos, los pisos pueden ser del mismo tamaño que el piso anterior o pueden ser 2 caracteres más grandes.
- La entrada se puede tomar como una matriz de
chars
ostrings
.
Salida:
t = 0.5 s
|
|#|
***
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 1 s
|
|#|
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 1.5 s
|
***
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 2 s
|
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 2.5 s
*
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 3 s
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 3.5 s
*****
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 4 s
|# # #|
|# # #|
|# # #|
TTTTTTT
t = 4.5 s
*******
|# # #|
|# # #|
TTTTTTT
t = 6.5 s
*******
TTTTTTT
t = 7 s
TTTTTTT
Reglas de salida:
- Cada piso termina con un
newline
personaje. - el suelo puede / no tener una nueva línea final.
- sacar el edificio (o lo que queda de él) cada 0.5 s.
- La salida es como una animación que se modifica cada 0.5 sy se muestra.
(También puedes publicar GIF con tu respuesta)
Este es un Code-Golf, por lo que gana el código en bytes más cortos.
la última fecha de envío es exactamente 5 días a partir de ahora
(¿Pero sabes qué? Ganar no lo es todo, siéntete libre de probar este desafío en tu idioma favorito, incluso después de que se haya declarado un ganador:]).
EDITAR: Cambié la forma en que toma la entrada (mi mal en realidad).
Respuestas:
Vim,
4138 bytesAquí,
^
se usa para un caret literal; ␍ se usa para CTRL-M.Explicación
qw:sl 500m␍q
duerme medio segundo, mientras graba el sueño de medio segundo como macro w./{␍
se mueve al piso con explosivos.qq
comienza a grabar la macro q, que se llamará recursivamente a sí misma.jk
se mueve hacia abajo y hacia arriba; esto genera un error si estás en la última línea (tierra); el error termina la macro recursiva.^v$r*
reemplaza todo, desde el primer carácter sin espacios en blanco hasta el final de la línea con * 's.@w
espera medio segundo, luegodd
elimina el piso actual.:-␍
sube un piso sin terminar la macro si estás en la línea superior.@w
luego espera otro medio segundo y@q
llama a la macro q (inicialmente vacía).q@q
deja de grabar la macro q, luego la llama, desencadenando la recursividad.Animación
fuente
my answer could be "golfed" further
... ¿no es eso suficiente? : PJavaScript (ES6),
208198 bytesfuente
Java 7,
589477476 bytesOk, es un desastre / largo, pero este desafío tiene muchas cosas molestas para Java ... Imprimir varias líneas;
Thread.sleep(500)
que requiere athrows Exception
; reemplazar una subcadena entre dos delimitadores con una cantidad igual de*
; etc.Todo esto hace que el programa sea bastante grande. Definitivamente se puede jugar un poco más, tal vez incluso reducirlo a la mitad con un enfoque diferente, pero al menos ahora hay una respuesta. ;)
Sin golf:
Código de prueba:
Pruébalo aquí. (En ideone sale de inmediato e ignora el
sleep
..)fuente
try{...}finally{return;}
?throws Exception
Haskell,
245221 bytesEjemplo de uso:
Cómo funciona:
Nota: también hay
threadDelay
deGHC.Conc
lugar deusleep
partir deSystem.Posix.Unistd
que es un poco más corto, pero sólo funciona con elGHC
compilador, por lo que no sería un genéricoHaskell
respuesta.fuente
C,
314287281271 bytes-10 después de cambiar
!=
a-
y evitando literales de char cuando es posible, así comoisspace
(muchas gracias a H Walters). Pero el código no protegido permanece sin cambios.-6 bytes después de aplicar coma y eliminación de
{}
después de dosif
.-26 bytes después de una pequeña optimización, eliminar paréntesis innecesarios, así como cambiar las variables locales a globales (con inicialización automática 0) y
b[0]
por*b
.Código de prueba con ungolfed
f
:fuente
s,e,t
exterior de manera global de esta maneras,e,t;
i
con otros.Perl, 153 bytes
Esto usa el comando GNU sleep para esperar 500 milisegundos.
Versión sin golf
fuente
PHP,
286282274234229 bytestoma la entrada como una lista de cadenas de los argumentos de la línea de comando (¡sin caracteres de nueva línea!)
guardar en archivo, ejecutar con
php <filename> ' |' ' |#|' ' {#}' ' |# #|' '|# # #|' '|# # #|' '|# # #|' 'TTTTTTT'
Descompostura
fuente