Você pode ter visto Jacob's Ladder em museus de ciência infantil. Se você não estiver familiarizado com a aparência, existem vários exemplos de imagens e vídeos no Wikimedia Commons . O desafio hoje é criar uma versão ASCII animada do dispositivo elétrico. No final, deve ser algo como isto:
Construção de escada
Aqui está o formato básico de uma escada com uma altura ( H ) de 6:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
Os números à esquerda simplesmente indicam o número da linha para este exemplo e não devem ser incluídos na saída. Vamos nos referir a uma determinada linha pelo seu número ( R ). A linha 0 é a parte inferior ¯¯
. Cada linha 1 a H é composta por quatro partes:
- Um espaço
(U + 0020) repetido ( H - R ) vezes
- Uma barra invertida
\
(U + 005C) - Um espaço
(U + 0020) repetido (2 * R ) vezes
- Uma barra
/
(U + 002F)
A linha 0 é idêntica, exceto que as duas barras são substituídas por um macron ¯
(U + 00AF). O espaço em branco à direita no final de cada linha ou abaixo da escada está OK. Os principais espaços em branco não são.
Construção de arco
Depois que a escada é construída, você pode criar arcos entre o lado esquerdo e o direito. Um arco está inteiramente dentro de uma linha e substitui os espaços entre o início \
e o final /
. Portanto, a linha 2 terá 4 caracteres em seu arco, a linha 3 terá 6 e assim por diante. Cada arco é composto usando as seguintes regras:
- Os únicos caracteres permitidos são
_/¯\
(U + 005F, U + 002F, U + 00AF, U + 005C) - Para garantir uma aparência suave, qualquer um
¯
ou/
deve ser seguido por um¯
ou\
- Para garantir uma aparência suave, qualquer um
_
ou\
deve ser seguido por um_
ou/
- As duas regras acima também se aplicam às bordas da escada
- As três regras acima significam efetivamente que o primeiro caractere do arco deve ser
_
ou/
e o último caractere deve ser_
ou\
(\¯\_//
é inválido nas duas extremidades, mas\_/¯\/
está OK) - Deve haver uma chance diferente de zero para cada caractere permitido ocorrer em um determinado ponto
- Cada arco é independente de qualquer outro arco
Animação
A vida de um único arco é criada iniciando-o na linha 1 e "movendo-o" uma linha por vez até chegar ao topo. IE, primeiro gere um arco na linha 1, depois defina-o para espaços e gere um arco na linha 2, e assim por diante. Dado um número de arcos para mostrar ( N ), mostre a vida útil completa de muitos arcos, um de cada vez, usando as seguintes diretrizes:
- Apenas um arco deve estar "vivo" a qualquer momento. O próximo arco não pode ser iniciado até que o atual chegue ao topo e depois se apague.
- Cada linha da vida do arco deve ser mostrada para exatamente um quadro
- Deve haver um quadro apenas da escada básica (sem arcos) antes do início de um novo arco (opcional antes do primeiro arco)
- A animação deve mostrar a vida útil completa de N arcos. Se N = 0, ele deve animar arcos aleatórios para sempre até parar.
- Se N > 0, você ainda pode repetir a animação para sempre, mas ela deve ser repetida repetidamente dos mesmos arcos. (O GIF de exemplo na parte superior desta postagem tem H = 6 e N = 3, mas faz um loop para sempre.)
- A animação deve ocorrer no local. Ou seja, cada quadro deve substituir completamente o próximo quadro e estar no mesmo local.
- O comprimento de cada quadro pode ser o que você quiser, mas torná-lo assistível por um ser humano (ou seja, use seu bom senso: 0,01s / quadro e 30s / quadro são inaceitáveis).
Entrada / Saída
- Entrada e Saída podem estar em qualquer formato padrão
- Você pode exportar um GIF, escrever texto na tela, gerar um único arquivo para cada quadro ou qualquer outro meio razoável
- As brechas padrão são proibidas
- A altura da escada H será um número inteiro positivo
- O número de arcos para mostrar N será um número inteiro não negativo
- Ambos H e N são tomadas como entradas em qualquer ordem que você escolher (Por favor inclua a ordem na sua resposta)
Condição vencedora
Isso é código-golfe, então o código mais curto vence.
the first character in the arc must be _ or / and the last character must be _ or \
eThere must be a non-zero chance for each allowable character to occur at a given point
. Para ser simétrico, tanto o primeiro quanto o último caractere teriam que ser_
todas as vezes, o que significa que há zero chance de/
ocorrer uma ocorrência de `\`.0xAF
está o ponto de código»
.Respostas:
Python 2 ,
287271270276275 bytesExperimente online!
Não limpa a tela no tio, mas funciona em um console.
Gif dele em execução:
fonte
print'\n'*99
vez deos.system('cls')
e perder aos
importação. Ainda não funciona no TIO, mas funciona nos consoles Windows e Linux.JavaScript (ES6), 245 bytes
A contagem de bytes assume a codificação ISO-8859-1.
fonte
A=x=>[...Array(x)].map;
no início e substituindo os dois usos.map
, isso é apenas uma propriedadeArray.prototype
e sem uso por si só. Eu tentei versões de trabalho, mas todas saíram com mais de 245 bytes.C (gcc) , 406 bytes
Experimente online!
Descrição:
fonte
\--/
. Provavelmente é uma solução fácil. Você é capaz de capturar e postar um GIF dele trabalhando no Xterm?PowerShell ,
347319 bytesExperimente online! Não foi possível obter
$args
um bom desempenho; portanto, o link chama a função sem limpar o console.Ungolfed
fonte
$l=(($h..1)|%{"$(" "*($h-$_))\$(" "*$_*2)/"})+"$(" "*$h)¯¯"
for($x=0;$x-ne$n;$x++)
pode serfor($x=0;$x++-ne$n;)
. Eu reduzi para 324 bytes (321 caracteres) fazendo isso. Dicas para jogar golfe em <todos os idiomas> e Dicas para jogar golfe no PowerShell também podem ser interessantes para ler.sleep 1
economiza um pouco (o padrão é -segundos), mas é bem lento, mas ainda razoável,sleep -m 99
é muito rápido, mas também razoável. Economiza 5/1 bytes, dependendo do que você gosta. Não verificar a tentativa de Kevin, masfunction
afilter
é um byte livre também.Ruby , 293 bytes
Experimente online!
Eu estou no Windows, então apenas imprime muitos "\ n" para limpar o console. Leva 2 argumentos
n
eh
duas linhas em stdin.fonte