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 \
e There 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 `\`.