Desafio
Escreva um programa / função completo para demolir um determinado edifício à taxa de 1 andar por segundo .
ENTRADA
A entrada é um edifício através do STDIN (ou o que for chamado no seu idioma) ou através de um ARGUMENTO de uma função. t = 0 s
|
|#|
{#}
|# #|
|# # #|
|# # #|
|# # #|
TTTTTTT
entrada consiste em:
|
marca o início e o fim de um piso.{
,}
marca o chão com explosivos.#
é uma janela que serve para decoração.é o espaço, que está em toda parte dentro do chão onde
#
não existe.T
marca o solo (não pode ser demolido).*
marca o piso detonado.
Regras de entrada:
- o edifício começa do topo com um
|
e termina no chão (sem no (T
) = não (char used in ground floor
)). - uma janela
#
está em todo lugar estranho dentro de cada andar. T
marca o final da sua entrada.- apenas um andar é composto por explosivos.
- todo andar é feito de ímpar não. de caracteres.
- À medida que você sobe pelos andares, os pisos podem ter o mesmo tamanho do piso anterior ou 2 caracteres a mais.
- A entrada pode ser tomada como uma matriz de
chars
oustrings
.
Resultado :
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
Regras de saída:
- todo andar termina com um
newline
caractere. - ground pode / pode não ter uma nova linha à direita.
- produzir o edifício (ou o que resta dele) a cada 0,5 s.
- A saída é como uma animação que é modificada a cada 0,5 se é exibida.
(Também fique à vontade para postar GIFs com sua resposta)
Este é um Code-Golf, portanto o código em bytes mais curtos vence!
a última data de envio é daqui a exatamente cinco dias
(Mas você sabe o quê? Ganhar não é tudo, sinta-se à vontade para tentar esse desafio no seu idioma favorito, mesmo depois que um vencedor for declarado:]).
Edição: Eu mudei a maneira como você recebe a entrada (meu ruim na verdade).
Respostas:
Vim,
4138 bytesAqui,
^
é usado para um sinal de intercalação literal; ␍ é usado para CTRL-M.Explicação
qw:sl 500m␍q
dorme meio segundo, enquanto grava o sono de meio segundo como macro w./{␍
move-se para o chão com explosivos.qq
começa a gravar a macro q, que se chamará recursivamente.jk
move-se para baixo e para cima; isso gera um erro se você estiver na última linha (terra); o erro finaliza a macro recursiva.^v$r*
substitui tudo do primeiro caractere que não é um espaço em branco até o final da linha por * 's.@w
aguarda meio segundo edd
exclui o piso atual.:-␍
sobe um andar sem terminar a macro se você estiver na linha superior.@w
depois aguarda mais meio segundo e@q
chama a macro q (inicialmente vazia).q@q
para de gravar a macro q e depois chama, acionando a recursão.Animação
fonte
my answer could be "golfed" further
... não é o suficiente? : PJavaScript (ES6),
208198 bytesfonte
Java 7,
589477476 bytesOk, é uma bagunça / muito tempo, mas esse desafio tem muitas coisas irritantes para Java. Impressão em várias linhas;
Thread.sleep(500)
que requer umthrows Exception
; substituir uma substring entre dois delimitadores por uma quantidade igual de*
; etc.Tudo isso faz com que o programa seja bem grande. Ele pode definitivamente ser jogado um pouco mais, talvez até pela metade com uma abordagem diferente, mas pelo menos agora há uma resposta. ;)
Ungolfed:
Código do teste:
Experimente aqui. (No ideone, ele sai imediatamente e ignora o
sleep
..)fonte
try{...}finally{return;}
?throws Exception
Haskell,
245221 bytesExemplo de uso:
Como funciona:
Nota: há também
threadDelay
from, aoGHC.Conc
invésusleep
doSystem.Posix.Unistd
qual, é um pouco mais curto, mas funciona apenas com oGHC
compilador, portanto não seria umaHaskell
resposta genérica .fonte
C,
314287281271 bytes-10 depois de mudar
!=
para-
e evitar caracteres literais quando é possível, bem comoisspace
(muito obrigado a H Walters). Mas o código não-bloqueado permanece inalterado.-6 bytes depois de aplicar coma e exclusão de
{}
depois de doisif
.-26 bytes após pouca otimização, remoção de parênteses desnecessários e alteração de variáveis locais para global (com inicialização automática de 0) e
b[0]
por*b
.Código de teste com ungolfed
f
:fonte
s,e,t
fora globalmente assims,e,t;
i
com os outros.Perl, 153 bytes
Isso usa o comando GNU sleep para aguardar 500 milissegundos.
Versão ungolfed
fonte
PHP,
286282274234229 bytesrecebe entrada como lista de seqüências de caracteres dos argumentos da linha de comando (nenhum caractere de nova linha!)
salve no arquivo, execute com
php <filename> ' |' ' |#|' ' {#}' ' |# #|' '|# # #|' '|# # #|' '|# # #|' 'TTTTTTT'
demolir
fonte