Introdução
Escreva um programa para produzir a espiral de saída do famoso pangram seguindo as regras dadas.
Desafio
Um pangram é uma frase que usa todas as letras de um determinado alfabeto pelo menos uma vez. Um dos mais famosos pangramas é o amplamente utilizado no visualizador de fontes do Windows, a saber " A rápida raposa marrom pula sobre o cachorro preguiçoso ". O desafio é gerar uma espiral com base neste texto.
Sua tarefa gera este texto exato:
heeeeellllllllllllazzzzzzzzzzz
hummmmmmmmmmmmmppppppppppppppy
hubrrrrrrrrrrrrrrrrrrooooooosy
hukyddddoooooooooooooooggggwsy
hukyveeeeerrrrrrrrrrrrrrrrtwsy
hukyvxjjjjjjjjjjuuuuuuuuuttwsy
hukyvxkbbrrrrrrrrrrrrrrrmttwsy
hukyvxkogggggggttttttttomttwsy
tukyvokoellllllllllllahomttwsy
tukyvokoeovvvvvvvvvvvzhomttwsy
tukyvocoeoummmmmmmmmezhomttwsy
tukyvocoeoufooooooopezhomttwsy
tukyvocohoufroooooxpezhomttwsy
tukyvoiohoufrquuuwxpezhomttwsy
tucyvoiohoufbqttiwxpezhomttwsy
tucyvoiohoufbeehiwxprzhomttwsy
tucyvoiohoufkccciwxprzeomttwsy
tjiyvoidhounnnnnnwxprzeomttwsy
tjiyvoidhojjjjjjjjxprzeomttwsy
tjiyvoidhssssssssssprzeopttwsy
tjiyvoidttttttttttttrzeopttwsy
tjiyvoiyyyyyyyyyyyyyyzqopttwoy
tjiyvouuuuuuuuuuuuuuuuqwpttwoy
tjiyvffffnnnnnnnnnnnnnnwpttwoy
tjiyossssssssssssssssssspthwoy
tjizzzzalllllllllllleeeeehhwoy
tjuuqqqqqqqqqqqqqqqqqeeeeehnod
txxxxxoooooooooooooooffffffnod
reeeeevvvvvvvvvvvvvvvvvvvvvvod
gggggggoooooooooooooood
Aqui está como é gerado,
- Havia uma raposa zelosa que gostou do pangram "A raposa marrom rápida salta sobre o cachorro preguiçoso". Um dia ele estava no centro de uma espiral externa e decidiu pular nela e pintar.
- Ele gostaria de examinar o pangram do começo ao fim e, se uma letra for a n-ésima letra do alfabeto, ele gostaria de pintá-lo várias vezes.
- No entanto, a raposa não era muito boa em fazer curvas nas esquinas; portanto, ao chegar a cada esquina, ele também teve que parar e passar para a próxima letra.
- Ele também decidiu repetir o pangram três vezes para enfatizar que ele é a raposa marrom rápida.
- Seu trabalho é mostrar como seria a espiral depois que a raposa pintasse todas essas letras.
(Versão simples sem contar histórias)
O famoso pangram "A rápida raposa marrom pula sobre o cachorro preguiçoso" é repetido três vezes, com os espaços removidos e todas as letras em minúsculas, para gerar
thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog
A espiral começa no centro e começa com a letra "t", começa indo para a direita e vai para fora no sentido horário. Se o caractere atual for a n-ésima letra do alfabeto, ele passará para o próximo caractere sempre que
- a espiral atinge um canto, ou
- as letras atuais são impressas exatamente n vezes.
Para melhor ilustrá-lo, explicarei como é gerada a espiral relacionada às três primeiras palavras "thequickbrown".
rooooo
rquuuw
bqttiw
beehiw
kccciw
nnnnnnw
A raposa parte de "t", vira à direita, alcança o 1º canto, pinta com o "t" e depois muda para "h" e desce, atinge o 2º canto, alterna para "e" e vai para a esquerda, atinge a A 3ª esquina muda para "q" e sobe, alcança a 4ª esquina, muda para "u" e vira para a direita, alcança uma esquina e muda para "i", desce, alcança uma esquina e muda para "c", continua esquerda, pinta com sucesso 3 "c" s antes de chegar à próxima esquina , muda para "k" e segue para a esquerda , alcança um canto imediatamente, muda para "b" e sobe, pinta 2 "b" s antes de chegar na próxima esquina, muda para "r"e continua para cima , chega a um canto e muda para "o", vai para a direita e depois para "w", para baixo, "n", para a esquerda.
Especificações
Você pode usar uma entrada opcional que contenha qualquer forma padrão da sequência
thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog
Sua saída deve ser formatada como uma sequência e deve ir para STDOUT em vez de arquivos ou STDERR, com as novas linhas colocadas corretamente. Dirigir e seguir linhas vazias não importam. Os espaços de cabeçalho e final em cada linha são permitidos, mas precisam ser consistentes. Portanto, se você adicionar 5 espaços antes de uma linha do texto fornecido, precisará adicionar exatamente 5 espaços antes de cada linha para que a espiral pareça a mesma.
Isso é código-golfe , o menor número de bytes vence.
Como de costume, as brechas padrão se aplicam aqui.
As explicações são bem-vindas, embora não sejam necessárias.
Título editado para torná-lo um pangram por comentário por caird coinheringaahing.
O cachorro preguiçoso é muito preguiçoso para aparecer na história.
Meu objetivo é criar um desafio de cadeia de caracteres em que a letra para saída não possa ser calculada por funções simples das coordenadas.
fonte
Respostas:
Stax ,
35343332 bytesExecute e depure on-line
Stax é um idioma em que trabalho há cerca de 6 meses. Este é o primeiro golfe público com ele. Vamos ao que interessa.
O Stax normalmente é gravado no conjunto de caracteres ASCII imprimíveis. Esse envio de 34 bytes é compactado em uma variante do conjunto de caracteres CP437. A representação ascii correspondente é
O Stax é um idioma baseado em pilha, mas possui duas pilhas de dados, "principal" e "entrada". A maioria das operações usa a pilha principal, mas a entrada é iniciada na pilha de entrada. As instruções Stax são principalmente sequências ascii de um ou dois caracteres. A maioria deles está sobrecarregada, o que significa que seu comportamento é determinado pelos poucos valores mais altos na (s) pilha (s).
Em um nível alto, esse programa cria uma grade anexando repetidamente seqüências de caracteres à última linha. Quando a última linha é preenchida, ela gira a grade no sentido horário. No final, espelha a grade horizontalmente. Mais detalhadamente, o programa funciona assim.
fonte
Carvão ,
664036 bytesExperimente online! Link é a versão detalhada do código. Editar: salvou 16 bytes usando o texto como entrada. Explicação:
Comece com 2
t
s por algum motivo.Faça um loop sobre todas as letras no pangram.
Já chegamos a um canto?
Mova para baixo (ou qualquer que seja a próxima direção) uma linha.
Gire a direção da impressão 90 ° no sentido horário.
Calcule o comprimento do próximo lado.
Termine de fixar a posição do cursor. (O carvão teria preferido que o lado terminasse logo antes da esquina, para que você girasse na esquina.)
Faça um loop tantas vezes quanto a posição da letra atual no alfabeto.
Se não chegamos à esquina,
Reduza a contagem e imprima a letra atual.
fonte
Rubi ,
217212209208 bytesExperimente online!
Gasta um bom tempo gerenciando indicadores, para que haja espaço para mais golfe.
-5 bytes: triplique o pangram antes de inserir. Obrigado a Weijun Zhou .
-3 bytes: preencha a sequência de entrada e apare a última perna, em vez de gerar a última perna do zero.
-1 bytes: use em
&&
vez de um operador ternário com um valor descartável.Explicação:
fonte
r
el
lambdas. Com base nas respostas atuais a última etapa parece ser um criador de problemas, embora não era quando eu escrevi o meu C trecho para gerar a saída de amostra ...s*=3
total e também omitir o0
no?:
operador. tio.run/…0
, porém, ou o Ruby puxac+=1
a linha a partir da próxima linha e a executa apenas na maioria das vezes. E bom desafio!