Esse desafio é inspirado nesta resposta no Ask Ubuntu Stack Exchange.
Introdução
Lembre-se do protetor de tela do Windows ME com os canos ? Hora de trazer de volta a nostalgia!
Desafio
Você deve escrever um programa ou função que produza uma representação ASCII do protetor de tela. No protetor de tela, deve haver um único tubo que crescerá em direções semi-aleatórias.
O início do tubo será colocado aleatoriamente em qualquer uma das bordas da tela e a peça do tubo deverá ser perpendicular à borda (os primeiros tubos de canto podem ser horizontais ou verticais). Cada tique que o cano crescerá na direção em que está voltado (horizontal / vertical) com uma 80%
chance ou fará um canto com uma 20%
chance.
Representação de tubulação
Para criar o canal, 6 caracteres unicode serão usados
─ \u2500 horizontal pipe
│ \u2502 vertical pipe
┌ \u250C upper left corner pipe
┐ \u2510 upper right corner pipe
└ \u2514 lower left corner pipe
┘ \u2518 lower right corner pipe
Entrada
O programa / função terá 3 valores de entrada, que podem ser coletados através de parâmetros de função ou solicitados ao usuário.
- Quantidade de carrapatos
- Largura da tela
- Altura da tela
Quantidade de carrapatos
Para cada escala, um pedaço de tubo será adicionado à tela. Os canos substituirão os pedaços de canos antigos se aparecerem na mesma posição.
Por exemplo, pegue uma tela de tamanho 3x3
ticks == 3
─┐
┘
ticks == 4
─┐
└┘
ticks == 5
│┐
└┘
Sempre que um tubo sai da tela, como no último exemplo, com 5 tiques, um novo tubo aparecerá em uma borda aleatória. Por exemplo:
ticks == 6
│┐
└┘
─
O novo tubo deve ter 50% de chance de ser horizontal ou vertical.
Largura / altura da tela
A largura e a altura da tela podem ser combinadas em um único valor, se preferir no seu idioma preferido. A largura e a altura da tela sempre terão um valor mínimo de 1 e um valor máximo de 255. Se o idioma de sua escolha suportar um console ou uma tela de saída menor que uma grade de caracteres de 255x255, você poderá assumir que a largura e a altura serão nunca exceda os limites do seu console. (Exemplo: janela Windows 80x25 cmd)
Resultado
A saída do seu programa / função deve ser impressa na tela ou retornada de uma função. Para cada execução do seu programa, um conjunto diferente de pipes deve ser gerado.
Casos de teste
Os seguintes casos de teste são todos exemplos aleatórios de saídas válidas
f(4, 3, 3)
│
─┘
│
f(5, 3, 3)
│
─┘┌
│
f(6, 3, 3)
─│
─┘┌
│
f(7, 3, 3)
──
─┘┌
│
Obviamente, quanto mais ticks ocorrerem, mais difícil será provar a validade do seu programa. Portanto, é preferível postar um gif da sua saída em execução. Se isso não for possível, publique uma versão do seu código que inclua a impressão da saída. Obviamente, isso não conta para a sua pontuação.
Regras
- Este é o código-golfe , a menor quantidade de bytes ganha
- Aplicam-se brechas padrão
- Se você usar os caracteres de canal unicode no seu código-fonte, poderá contá-los como um único byte
Esse é um desafio bastante difícil que pode ser resolvido de várias maneiras criativas; você deve escrever uma resposta em uma linguagem mais detalhada, mesmo que já haja respostas em pequenos intervalos. Isso criará um catálogo de respostas mais curtas por idioma. Upvotes de bônus para gifs coloridos de fantasia;)
Feliz golfe!
Isenção de responsabilidade: Estou ciente de que os caracteres Unicode não são ASCII, mas, na falta de um nome melhor, chamo apenas de arte ASCII. Sugestões são bem-vindas :)