Introdução
Todos conhecemos o legal S (também conhecido como Superman S, Stüssy S, Super S, Skater S, Pointy S, Graffiti S etc. etc.): bilhões de crianças em idade escolar em todo o mundo atraíram esse S e imediatamente se sentiram orgulhosos de si mesmos. Caso você tenha esquecido ou tenha tido uma infância completamente não-legal , aqui está uma imagem do dito S legal:
Dado um fator de escala n
como entrada (onde ), produza o Cool S na arte ASCII.
Como desenhar
Na página da Wikipedia no Cool S:
Saída
O Cool S quando n
= 1 é:
^
/ \
/ \
/ \
| | |
| | |
\ \ /
\ \/
/\ \
/ \ \
| | |
| | |
\ /
\ /
\ /
v
E para valores diferentes de n
, você simplesmente aumenta os n
tempos de saída . Por exemplo, n
= 2:
^
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
v
Observe que as seções verticais são duas vezes mais longas e o espaçamento entre as linhas verticais é duas vezes maior.
E quando n
= 3:
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
\ /
\ /
v
Nota: Embora não seja obrigatório, seu código também pode suportarn
= 0:
^
/ \
\\/
/\\
\ /
v
Ganhando
O programa mais curto em bytes vence.
Λ
Respostas:
Carvão ,
58 53 47 4341 bytesExperimente online!
Eu só queria tentar outra abordagem, isso desenha o exterior através de reflexões (obrigado a Neil por expandir a ideia) e depois desenha a parte interna. Como o carvão vegetal tem
:Left
como direção padrão para desenhar linhas, eu uso essa direção o máximo possível para salvar alguns bytes desenhando o S horizontalmente, assim:E então eu só preciso girar a tela 90 graus no sentido anti-horário.
fonte
Rotate
? Isso me dá uma idéia ...Python 3 ,
255249248209 bytes-6 bytes graças a Kevin Cruijssen
-1 byte graças a Kevin Cruijssen
-39 bytes graças a Rod e Jo King
Experimente online!
Agora ele lida com n = 0.
fonte
o+~d
podem serm-d
erange(o)
podem serrange(m+1)
, e você pode removero=m+1\n
para salvar 6 bytes. Boa resposta, porém, +1 de mim.p(s)\np(s[::-1])
ap(s+q+s[::-1])
: 248 bytesprint
, e mais 4 por remoção[]
dejoin([...])
, totalizando 238 bytesq.join
em uma variável para salvar um byteq.join
, e a algumas outras coisasCarvão ,
474241 bytesExperimente online! Link é a versão detalhada do código. Explicação: Desenha as seguintes linhas em ordem:
Onde
5
está o caractere atual da stringv^
. No final do primeiro loop, o cursor é posicionado no ponto9
. A tela inteira é então girada para que a outra metade do Cool S possa ser desenhada. (Na verdade, a tela é girada duas vezes, mas este é apenas um detalhe de implementação.)O carvão não suporta,
RotateCopy(:Up, 4)
mas se o fizesse, isso funcionaria para 33 bytes:fonte
Tela ,
363229 bytesExperimente aqui!
Muita manipulação de pilha. explicação (desatualizada):
fonte
Python 2 ,
227208207202196181 bytesExperimente online!
Agradece a Jo King por 1 byte; e depois outros 5 bytes no total (via
n => 2*n
).Funciona para
n=0
também.fonte
C (GCC) ,
379353344334 bytesEu usei alguns
#define
s para eliminação de subexpressão e vários globais para se comunicar entre as funções internas. O loop principal vai {0,1,2,3,3,2,1,0} para construir o S.Obrigado a Jonathan Frech pelas sugestões.
Experimente online!
fonte
w -r-1
possivelmente poderia ser jogado paraw~r
.C (GCC) ,
260254 bytes-6 bytes graças ao ceilingcat .
Experimente online!
Atropelar
Podemos dividir a forma em partes:
Cada parte pode ser descrita por um número de linhas, três caracteres e três relacionamentos com determinados valores que decidem a largura do campo em cada linha.
Uma primeira iteração veio a ser:
As chamadas para a
g()
macro parecem muito com uma tabela que pode ser construída e repetida. As larguras de campo às vezes são relacionadas ao contador do índice e às vezes não. Podemos generalizar a largura do campoF * i + A
, onde F é um fator com o qual multiplicari
e A é algum valor a ser adicionado à largura. Portanto, a última largura da quarta chamada acima seria-2 * i + t
, por exemplo.Assim obtemos:
No final, não era muito menor do que uma versão mais rígida da
g()
chamada, mas menor é menor.fonte
Java, 435 bytes
A função em si leva 435 bytes. Certamente há espaço para melhorias, "alto nível", analisando as regras sobre onde colocar qual personagem (no final, o S é simétrico em pontos) e "baixo nível", no golfe clássico (talvez retirando outra variável ou combinando dois dos
for
loops). Mas é o primeiro tiro com essa linguagem bastante não-gótica:fonte
t=...
um pouco menos onde economizaria bytes. Se você tiver alguma dúvida sobre alguma das alterações que fiz, entre em contato. :)PHP ,
378374378377376335331328 bytes-3 bytes, graças ao manatwork
-4 bytes, usado str_pad em vez de str_repeat
-41 bytes, graças às sugestões do manatworks
-1 byte, mesclou dois incrementos em um + = 2
-1 byte, removido supérfluo \
-4 bytes ecoando uma vez.Esqueci que eu precisava passar a string para a função, então isso é mais bytesFunciona para n = 0 também.
Experimente online!
fonte
'v'
na finalecho
.$i>0
e$m>0
pode ser escrita simplesmente como$i
e$m
..
concatenação depois,
. Experimente online!Python 3 ,
321307 bytesObrigado a @EsolangingFruit por salvar 14 bytes
Experimente online!
Python 2 , 303 bytes
Experimente online!
fonte
'\\','/'
na segunda linha por*'\/'
para salvar três bytes.print
input()
automaticamenteeval()
a string, para que você possa pular aint()
chamada também.for l in L:print(*l,sep="")
(não acho que exista um equivalente no Python 2).