O código neste site está sendo esgotado rapidamente. Precisamos investir em cadeias renováveis. Portanto, você deve escrever um programa que pegue uma string e a converta em um moinho de vento.
O desafio
Vamos dar um exemplo simples de um moinho de vento. Pegue a corda abc
. O pivô é o caractere central, neste caso b
. Como a string tem 3 caracteres, cada saída terá exatamente três linhas de altura e três caracteres de largura. Aqui está sua saída na etapa 1. (Observe o espaço em branco)
abc
Para obter o próximo passo, gire cada caractere ao redor do pivô no sentido horário. Aqui está o passo 2:
uma b c
Aqui estão as etapas 3 a 8:
uma b c
uma b c
cba
c b uma
c b uma
c b uma
E no nono passo, ele volta o círculo completo para a string original:
abc
Observe que o mesmo b
permaneceu no mesmo local o tempo todo. Isso ocorre porque b
é o caractere dinâmico. Você deve escrever um programa ou função que use uma string como entrada e imprima repetidamente essa sequência até que o programa seja fechado.
Esclarecimentos
Todas as seqüências de entrada terão um número ímpar de caracteres. (Para que todo moinho de vento tenha um pivô)
Para manter o desafio simples, todas as cadeias conterão apenas caracteres alfabéticos maiúsculos e minúsculos.
A saída deve ter
len(input_string)
caracteres largos e altos.Não importa em qual etapa da sequência você inicia, desde que continue girando e girando para sempre.
Mais IO de teste:
Como o post já é bastante longo, aqui está um link para a saída do "moinho de vento":
Nota:
Como esse é um moinho de vento, seria incrível se você incluísse algum código padrão para animá-lo com um pequeno atraso de tempo ou com uma entrada do usuário entre cada etapa. No entanto, como alguns idiomas não possuem tempo embutido, isso não é obrigatório. A parte concorrente do seu envio pode imprimir a sequência o mais rápido possível.
Respostas:
MATL ,
353321 bytesO seguinte animará o moinho de vento ( 26 bytes )
Demo Online
Nesta versão, o
Xx
especificado para limpar a exibição e a1Y.
pausa de 1 segundo.Explicação
A idéia básica é que queremos criar duas versões da entrada. Uma versão "ortogonal"
E uma versão "diagonal"
Colocamos essas duas versões na pilha. Cada vez no ciclo, alternamos a ordem da pilha e giramos a parte superior no sentido horário.
fonte
JavaScript (ES6), 291 bytes
fonte
05AB1E ,
8853 bytesCódigo:
Experimente online! . Certifique-se de apertar o botão kill logo após executá-lo, porque ele entra em um loop infinito.
fonte
Ruby,
122119 bytesVersão ungolfed com sono, no programa de teste
A rotação não é muito convincente na altura total do console. Mas se você reduzir a altura ao comprimento da sequência de entrada, a rotação será muito mais convincente.
fonte
MATL ,
4744 bytesExperimente online! (mas mate-o imediatamente, loop infinito)
Com pausa de 1 segundo: 56 bytes
Experimente online! (novamente, loop infinito)
fonte
Python 3 , 193 bytes
Ungolfed
Recursivo, 177 bytes
(falha após alguns segundos)
Ungolfed
Outra solução, 268 bytes
Ungolfed
fonte
Pitão, 48 bytes
Experimente online! (Nota: esta é uma versão que não se repete eternamente, porque poderia travar o intérprete.)
Traduzido descaradamente da solução Python 3 por @ByHH .
Como funciona:
fonte