Esta competição acabou. Obrigado pelas entradas interessantes que não são esolang e parabéns a Jakuje pelo envio vencedor do JavaScript.
Na grande tradição dos Desafios de Arte ASCII neste site, aqui está outro. Dada uma entrada, desenhe uma espiral.
&>----v
||>--v|
|||>v||
|||@|||
||^-<||
|^---<|
^-----<
Simples, sim? Heh, heh, heh ... Sim ...
(Inspirado na postagem ASCII Dragons Curve e na postagem ASCII Art of the Day do Optimizer )
Entrada
A entrada será na forma de uma série de parâmetros, extraídos do argumento STDIN / função usual / etc., Qualquer que seja seu idioma equivalente, composto por quatro partes. Essas partes podem ser quatro argumentos separados, um quádruplo, uma matriz de tamanho 4, etc. Por simplicidade e consistência ao longo do desafio, representarei a entrada como uma única palavra.
- Um número inteiro
2 ≤ x ≤ 20
que especifica o tamanho da espiral em termos de "quadrados", com cada caractere impresso representando um "quadrado" em tamanho. Teoricamente, isso pode ter um escopo enorme, mas, como estamos desenhando a arte ASCII, um limite superior seguro será 20, para que caiba de maneira um tanto decente na tela. - Uma única letra de
d u r
oul
, indicando o movimento inicial do "quadrado" inicial (para baixo, para cima, direita, esquerda). - Um opcional
c
, indicando "anti-horário". Sec
omitido, assuma a rotação no sentido horário da espiral. - Um número inteiro final
1 ≤ y ≤ 10
que especifica quantas vezes repetir o desenho em espiral, usando o "quadrado" final da espiral anterior como o "quadrado" inicial da nova. Estou escolhendo um limite superior de 10 porque quero que o desenho termine em algum momento. - Alguns exemplos de entradas:
20lc5
13d2
2rc1
De interesse, observe que valores ímpares para a entrada de tamanho resultarão no centro @
sempre exato de uma espiral, mas valores pares podem ter o deslocamento "quadrado" inicial em qualquer uma das quatro direções diagonais, dependendo da direção da inicial. viagem. Isso pode resultar em alguns ... padrões interessantes. Veja os dois exemplos pares abaixo.
A entrada que não segue a especificação de entrada (por exemplo, 11q#s
) é indefinida e espero totalmente que o programa vomite adequadamente. :)
Saída
Saída é uma saída imprimível ASCII via STDOUT equivalente ao idioma, com as seguintes especificações:
- O "quadrado" inicial (de cada recursão) deve ser marcado com um sinal de arroba
@
. - O "quadrado" final deve ser marcado com um e comercial
&
. No caso de várias recursões, apenas o "quadrado" final deve ser marcado&
. - Os cantos do caminho em espiral precisam "apontar" na direção da viagem, usando
< > v ^
. - O deslocamento vertical precisa ser desenhado por tubos
|
. - O deslocamento horizontal precisa ser desenhado com traços
-
. - Os "quadrados" substituídos por recursões posteriores devem exibir a direção da viagem mais recente. Isso resultará em recursões "mais recentes" que parecem estar em camadas sobre as recursões "mais antigas". Veja o
4rc3
exemplo abaixo. - Uma nova linha final à direita está OK, os espaços à esquerda podem ser uma obrigação e, portanto, são permitidos, mas os espaços à direita não são permitidos.
- Não vou atracar você se você usar seqüências de escape para desenhar a arte ASCII para STDOUT, mas ficarei silenciosamente desapontado com você. (Você ainda será elegível para a recompensa se usá-las)
Exemplos
2d4
= diâmetro de 2, começa descendo, no sentido horário, 4 recursões
&@@@@
^<<<<
Neste exemplo, o desenho começa no canto superior direito @
, desce um, deixa um, sobe um. Nesse ponto, terminamos a 2d
parte e, portanto, iniciamos a 2ª recursão, para que tenhamos outra @
, descendo uma, deixada uma, subindo uma; depois a 3ª recursão; depois a quarta e finalmente a nossa &
.
4rc3
= diâmetro de 4, começa indo à direita, no sentido anti-horário, 3 recursões
&--<
v-<|
|@^|<
>--^|
|@^|<
>--^|
|@^|
>--^
Neste exemplo, o desenho começa no fundo @
, sobe um, sobe um, gira em espiral, até chegar ao meio @
e terminar a 4rc
parte. Isso então se repete mais duas vezes para obter as 3 recursões completas solicitadas. Observe que 4rc1
seria apenas o bloco 4x4 superior esquerdo deste exemplo.
7u1
= diâmetro de 7, começa subindo, no sentido horário, 1 recursão (observe que é o mesmo que a introdução)
&>----v
||>--v|
|||>v||
|||@|||
||^-<||
|^---<|
^-----<
Vencimento e restrições
Este é o Code Golf, então a menor resposta em bytes vence. As submissões devem estar na forma usual de programa / função / CJam Code Block / etc. Aplicam-se restrições de brecha padrão. Motorista profissional em curso fechado. Se a irritação persistir, interrompa o uso e consulte seu médico.