Essa pergunta é inspirada na pergunta de Kevin Cruijssen .
Agora que o tapete está arrumado, queremos enrolá-lo. Sua tarefa é escrever um programa que use uma string e retorne uma espiral feita com essa string (representando um tapete enrolado visto de lado).
O procedimento para uma etapa de rolar o tapete é o seguinte. Há um exemplo para ilustrar o que quero dizer. Observe que o exemplo começa com um tapete parcialmente enrolado para melhor entendimento:
ac
rpet
- Separe a "cabeça" da "cauda" do tapete: a cabeça é o que foi rolado até agora, a cauda é o que resta a ser rolado.
Head: ac Tail:
rp et
- Gire a cabeça 90 °, no sentido horário.
Rotated head: ra Tail (unchanged):
pc et
- se a largura da nova cabeça (aqui
2
) for menor ou igual ao comprimento da cauda (aqui2
)- então, coloque em cima da cauda
- caso contrário, o tapete (como estava no início da etapa) foi enrolado
New carpet: ra
pc
et
Repita o procedimento quantas vezes for necessário.
Dois exemplos mostrando todas as etapas do tapete rolando:
carpet
c
arpet
ac
rpet
ra
pc
et
0123456789
0
123456789
10
23456789
21
30
456789
432
501
6789
Algumas precisões:
- Você não precisa mostrar todas as etapas intermediárias, apenas o tapete enrolado (por exemplo, se você encontrar uma maneira não iterativa de calcular o resultado, é perfeito). Além disso, você não precisa imprimir nenhum espaço em branco à esquerda; nos exemplos acima, mostro apenas para alinhar as coisas.
- Input é uma String, uma lista / matriz de caracteres
- A saída é impressa em stdout ou em um arquivo.
- A entrada é boa: o comprimento é de pelo menos 1 caractere e, no máximo, uma constante suficientemente pequena para que não cause problemas, mas você não pode usar essa constante em seu programa; o conteúdo da string é apenas caracteres legais ([a-zA-Z0-9]), codificando de acordo com sua preferência.
- Isso é código-golfe , então a resposta mais curta em bytes vence. Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação para sua resposta, se achar necessário.
ProgrammingPuzzlesAndCodeGolf
- o comprimento final da cauda maior que 1 me tropeçou.
print
dentro de a lambda
.