Considere um bloco quadrado de texto, N caracteres de largura por N de altura, para um número inteiro ímpar N maior que 1.
Como exemplo, seja N = 5 e o texto seja:
MLKJI
NWVUH
OXYTG
PQRSF
ABCDE
Observe que este é o alfabeto (além de Z) em espiral no sentido anti-horário a partir do canto inferior esquerdo. É como um tapete enrolado.
"Desenrolar" o texto um quarto de volta no sentido horário, para que fique no FGHI
mesmo nível dos ABCDE
resultados:
PONM
QXWL
RYVK
STUJ
ABCDEFGHI
Esse desenrolar pode ser feito mais 7 vezes até que o texto seja uma única linha:
SRQP
TYXO
UVWN
ABCDEFGHIJKLM
UTS
VYR
WXQ
ABCDEFGHIJKLMNOP
WVU
XYT
ABCDEFGHIJKLMNOPQRS
XW
YV
ABCDEFGHIJKLMNOPQRSTU
YX
ABCDEFGHIJKLMNOPQRSTUVW
Y
ABCDEFGHIJKLMNOPQRSTUVWX
ABCDEFGHIJKLMNOPQRSTUVWXY
Desafio
O desafio é escrever um programa que é um bloco de texto N × N que gera o número de vezes que "desenrolou" um quarto de volta quando é reorganizado nos padrões de desenrolamento e executado.
Realmente existem dois concursos aqui: (espero que não seja muito complicado)
- Faça isso com o menor N. (até um limite de N = 3)
- Faça isso com o maior N. (sem limite)
Não haverá uma resposta aceita, mas o vencedor em cada uma dessas categorias receberá pelo menos 50 representantes de recompensa de mim. Em caso de empate, as respostas mais antigas vencem.
Exemplo
Se o seu bloco de código for
MyP
rog
ram
executá-lo como deve produzir 0.
Corrida
rM
oy
ramgP
deve produzir 1.
Corrida
or
ramgPyM
deve produzir 2.
Corrida
o
ramgPyMr
deve produzir 3.
Por fim, a execução ramgPyMro
deve gerar 4.
Detalhes
- A saída deve ser impressa em stdout (ou a alternativa mais próxima) sozinha. Não há entrada.
- Você só pode usar ASCII imprimível (códigos hexadecimais 20 a 7E, que inclui espaço) no seu código.
- Os espaços preenchem o espaço vazio nos arranjos de desenrolamento. (A menos que você esteja desenrolando para a esquerda.)
- Somente os arranjos de completamente quadrado a completamente plano precisam ter saída válida. Nenhum outro acordo será executado.
- Você pode não ler sua própria fonte.
- Você pode usar comentários.
- N = 1 é excluído, pois em muitos idiomas o programa
0
funcionaria. Se desejar, você pode desenrolar para a esquerda e não para a direita. Então por exemplo
MyP rog ram
torna-se
Pg yo Mrram
e assim por diante. Nenhum espaço extra é adicionado ao rolar dessa maneira. As linhas acabam
(Relacionado: Escreva um programa retangular que produz o número de vezes que foi girado )