Escreva um programa ou função que, quando fornecido n
, imprima uma espiral de n
caracteres composta há muito tempo pelo alfabeto latino, ABCDEFGHIJKLMNOPQRSTUVWXYZ
repetida conforme necessário. Essa espiral deve percorrer o alfabeto apenas para a frente.
Relacionada à Espiral do Alfabeto , embora a espiral percorra o alfabeto para frente e para trás, e a espiral seja constante.
Casos de teste
4 AB
DC
40 UVWXYZ
TGHIJA
NSFABKB
MREDCLC
LQPONMD
KJIHGFE
0
10 GHIJ
FAB
EDC
1000 UVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
TGHIJKLMNOPQRSTUVWXYZABCDEFGHIJA
SFABCDEFGHIJKLMNOPQRSTUVWXYZABKB
REZCDEFGHIJKLMNOPQRSTUVWXYZABCLC
QDYBMNOPQRSTUVWXYZABCDEFGHIJCDMD
PCXALEFGHIJKLMNOPQRSTUVWXYZKDENE
OBWZKDEFGHIJKLMNOPQRSTUVWXALEFOF
NAVYJCDMNOPQRSTUVWXYZABCDYBMFGPG
MZUXIBCLCDEFGHIJKLMNOPQREZCNGHQH
LYTWHABKBABCDEFGHIJKLMNSFADOHIRI
KXSVGZAJAZGHIJKLMNOPQROTGBEPIJSJ
JWRUFYZIZYFUVWXYZABCDSPUHCFQJKTK
IVQTEXYHYXETQRSTUVWXETQVIDGRKLUL
HUPSDWXGXWDSPUVWXYZYFURWJEHSLMVM
GTORCVWFWVCROTGHIJAZGVSXKFITMNWN
FSNQBUVEVUBQNSFABKBAHWTYLGJUNOXO
ERMPATUDUTAPMREDCLCBIXUZMHKVOPYP
DQLOZSTCTSZOLQPONMDCJYVANILWPQZQ
CPKNYRSBSRYNKJIHGFEDKZWBOJMXQRAR
BOJMXQRARQXMLKJIHGFELAXCPKNYRSBS
ANILWPQZQPWVUTSRQPONMBYDQLOZSTCT
ZMHKVOPYPONMLKJIHGFEDCZERMPATUDU
YLGJUNOXONMLKJIHGFEDCBAFSNQBUVEV
XKFITMNWVUTSRQPONMLKJIHGTORCVWFW
WJEHSLMLKJIHGFEDCBAZYXWVUPSDWXGX
VIDGRKJIHGFEDCBAZYXWVUTSRQTEXYHY
UHCFQPONMLKJIHGFEDCBAZYXWVUFYZIZ
TGBEDCBAZYXWVUTSRQPONMLKJIHGZAJA
SFAZYXWVUTSRQPONMLKJIHGFEDCBABKB
REDCBAZYXWVUTSRQPONMLKJIHGFEDCLC
QPONMLKJIHGFEDCBAZYXWVUTSRQPONMD
LKJIHGFE
Regras
- Sua entrada será um número inteiro não negativo
0 <= n <= 1000
, mas seu código deve lidar teoricamente com qualquer número inteiro não negativo. - Seu formato de saída pode estar em qualquer formato são, com delimitadores, se necessário.
- Rotações e reflexões são equivalentes.
- Seu alfabeto pode estar em maiúsculas ou minúsculas.
- Os espaços vazios em sua espiral podem ser preenchidos com quaisquer nulos não alfabéticos que você achar conveniente.
- A espiral em si pode ter qualquer forma que você achar melhor. Espirais retangulares funcionam melhor com soluções ASCII, mas soluções gráficas podem ser mais curtas com espirais circulares.
- Espaços iniciais e finais e novas linhas são permitidos.
- Isso é código de golfe. A resposta mais curta em bytes (ou equivalente) vence.
Como sempre, se algo não estiver claro ou incorreto, informe-me nos comentários. Boa sorte e bom golfe!
Respostas:
Logotipo,
12987 bytesSolução gráfica, implementada como função
Isso foi construído com o intérprete de logotipo da Calormen.com . A
S
função pega o número de caracteres como parâmetro e os desenha em espiral.A. Decidi que parecia melhor (e reduziu em 42 bytes ) omitir a correção da orientação da letra. Também reforcei o espaçamento que não alterava a contagem de bytes. Se você realmente enrolar um alfabeto, seria mais parecido com isso de qualquer maneira.T
função gera letras na vertical para impedir que elas girem com a espiral.Versão atualizada (rolo de cartas)
Invocação
Invoque da seguinte maneira:
S
iteraçõesSaída de amostra
Versão antiga (letras sempre na vertical)
Saída antiga removida para economizar espaço. Veja aqui .
fonte
95
irá alterar a tensão da espiral e alterar o15
espaçamento linear das letras.Javascript (ES6),
203201 bytesDemo
A demonstração abaixo deve ser executada preferencialmente em página inteira.
Mostrar snippet de código
fonte
R, 46 ou 51 bytes, dependendo do espaçamento
(versão atualizada do plot: a espiral cinza não é plotada por padrão, mas eu a adicionei depois para mostrar que as letras realmente estão em uma espiral.)
A espiral não tem espaçamento constante, então espero que esteja tudo bem. Se for necessário um espaçamento constante, comece com
s=(1:scan())^.5
e adicione 5 bytes ao total. Então a saída é a seguinte (n = 150):fonte
Python 3.5,
180157152147147 bytes-6 devido a Sherlock9
-5 devido a Kap.
Solução revisada, python 3.x:
Solução anterior:
Explicação
r
é uma lista de listas que contém a espiral. A idéia básica é que novas letras sejam adicionadas à linha inferior da espiral (r[-1].append(chr(x%26+65))
). Quando a linha inferior é preenchida, a espiral é girada 90 no sentido horário e uma nova linha vazia é adicionada à parte inferior (r = list(zip(*r[::-1]))+[[]]
).O truque é descobrir quando girar a espiral. Na primeira solução, o gerador
(j<1for i in R(n)for j in R(i//2+1))
produz uma sequência de valores Verdadeiro / Falso que informam quando girar a espiral. Na solução revisada, mudei a maneira comor
é inicializado. Agora, quando o comprimento da linha inferior for igual ao comprimento da linha superior, a espiral precisará ser girada.fonte
if len(r[-1])==len(r[0]):r=list(zip(*r[::-1]))+[[]]
porif len(r[-1])==len(r[0]):r=[*zip(*r[::-1]),[]]
para salvar 5 bytes.range
uma vez, é possível removerR
para salvar bytes. Você também pode salvar bytes convertendo sua resposta em um programa completo, mas para preservar o uso de[*zip(*r[::-1]),[]]
, precisará usá-lorange(int(input()))
.for x in range(int(input())):r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]
desde que você verifique quando a última linha é igual ou superior à primeira linha.n
nesta versão. Você precisa usarint(input())
ou agrupar o backup em uma função.for
loop: #for x in range(int(input())):r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]
MATL ,
2118 bytesA entrada
0
sai com um erro (que é permitido por padrão ).Experimente online!
Explicação
fonte
Python 2,
8482 bytesEstou usando a tartaruga novamente. É tão divertido! : D
Experimente online
Infelizmente, o Trinket.io possui uma tela horrivelmente pequena. Eu mudei
9+i
para9+i/9
e ajustado o ponto de partida da tartaruga com a finalidade de tela de captura esta imagem, de modo que mais da saída caberia:fonte
from turtle import*
e outro de mudar dewhile
parafor i in range(input())
Pitão, 32 bytes
Um programa que imprime uma espiral ASCII retangular em minúsculas. Dependendo da entrada, uma linha ou coluna de espaço em branco à esquerda ou à direita pode estar presente.
Experimente online
Como funciona
fonte
TSQL,
386362358306 bytesObserve que o TSQL não tem como rotacionar texto. Este script começa em A e calcula em qual direção a próxima letra deve ser colocada. (direita, baixo, esquerda, esquerda, esquerda, cima, cima, direita ...)
O script pode lidar com um máximo de 7744 letras.
Golfe:
Ungolfed:
Violino
fonte
Python 2, 243 bytes
Ideone it!
fonte
PHP , 219 bytes
Experimente online!
PHP, 260 bytes
Versão antiga
fonte