fundo
Quando eu era mais jovem, aprendi um método de desenhar uma forma estranha de "S", que eu (junto com meus colegas de classe) achei fascinante. Hoje, eu o redescobri e, devido à sua abordagem fórmula para desenhá-lo, pensei que poderia levar a um desafio interessante: P
Desenhando o "S"
OS pode ser desenhado seguindo estas etapas simples:
Primeiro, desenhe 2 linhas de três linhas verticais da seguinte maneira
| | |
| | |
Em seguida, conecte a linha superior esquerda com a linha do meio inferior e o meio superior com a linha de baixo direita para produzir
| | |
\ \
| | |
Por fim, desenhe uma parte superior e inferior da imagem atualmente desenhada, para que ela pareça
^
/ \
| | |
\ \
| | |
\ /
v
Como você pode ver, isso resulta em uma forma "S". No entanto, quando estendido (desenhando-o com mais de 2 linhas), produz um padrão muito interessante. Sua tarefa é reproduzir esse padrão interessante.
Tarefa
Dado um número inteiro onde n >= 2
, imprima O S com n
linhas a serem feitas a partir dele. A saída pode ser retornada de uma função e a entrada pode ser obtida em métodos padrão. O espaço em branco à direita / à direita para a imagem geral e para cada linha é bom. No entanto, os espaços de linha à esquerda devem ser consistentes para que o "não seja quebrado. Você pode exibir como uma lista de linhas.
Casos de teste
input
output
---
2
^
/ \
| | |
\ \
| | |
\ /
v
---
8
^
/ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ /
v
---
10
^
/ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ /
v
Este é um código de golfe, então o código mais curto vence! Boa sorte,
S
do fresco S , e chama uma versão infinita do umS Chain
Respostas:
Python 2 , 47 bytes
Experimente online!
fonte
C # (.NET Core) ,
7369666462 bytesDois bytes a menos e aparência perl, graças ao Barodus. Não pensou em usar int? para nulos.
Experimente online!
fonte
new string[n+1]
faz? Eu nunca vi isso antes.new string[n+1]
foi algum tipo de construtor seqüência complicada e não uma declaração de matriz -.-)Python 3 , 48
56 59 61bytesExperimente online!
fonte
\ \
.05AB1E ,
2726 bytesExperimente online!
Versão alternativa de 27 bytes
Experimente online!
Explicação
fonte
'^…/ \©IF„| ûû„\ û}\®R'v).C
sem olhar.Japonês ,
342523 bytesTeste online! Saídas como uma matriz de linhas;
-R
sinalizador adicionado para participar de novas linhas. (Obrigado @Shaggy)Primeiratentativa, pode ser improvável ...Como funciona
fonte
SOGL V0.12 ,
262518 bytesExperimente aqui!
Usa a mesma estratégia que a resposta Japt da ETHproductions
Explicação:
fonte
push "|" and " "
o que diabos é que builtinJavaScript (ES6), 60 bytes
Snippet de teste
Mostrar snippet de código
fonte
n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'
(usando crase e novas linhas literais)Carvão ,
272625 bytes-1 byte graças a Carlos Alejo. -1 byte graças ao ASCII-only.
Experimente online! Link é a versão detalhada. # charcoal-verbose-obfucation
fonte
\r
: `^ ⸿ / × \ ⸿ | | | ⸿ \ Iθ / ⸿ v`. Versão detalhada .\r
como o caminho para obter novas linhas do jeito são. Obrigado!Perl 5 ,
3937 bytesExperimente online!
Raspou dois bytes com a sugestão de @DomHastings
fonte
Na verdade , 49 bytes
Experimente online!
Explicação:
fonte
05AB1E , 38 bytes
Experimente online!
fonte
C (gcc) , 82 bytes
Experimente online!
fonte
C # (.NET Core) ,
1017773 bytesEconomizou 24 bytes graças a i cri everytim !
Guardado 4 bytes graças a Kevin Cruijssen !
Experimente online!
Como de costume, repetir seqüências em C # é uma dor.
fonte
--n>=0
paran-->0
es+="/\n v";return s;
parareturn s+"/\n v";
salvar alguns bytes.Retina , 38 bytes
Experimente online!
Imprime uma coluna de espaços à esquerda e à direita em cada linha.
Explicação
A principal economia de bytes vem da omissão dos espaços em todas as partes literais e da inserção deles no final. A figura é estruturada de forma que nunca haja dois não espaços próximos um do outro, portanto, se apenas removemos todos eles, podemos quase consertar a forma inserindo um espaço em todas as posições no final:
torna-se:
Isso está quase correto, exceto pelo recuo. O
^
ev
estão faltando dois espaços. Na verdade, é mais fácil de corrigir, porque se inserirmos um espaço explícito na frente de cada um deles, isso resultará em dois espaços adicionais no final. As linhas com as barras são mais complicadas porque exigem apenas um espaço adicional. Para corrigir isso, inserimos um caractere de espaço reservado lá (x
). Quando inserimos os espaços no final, não apenas os inserimos para todas as correspondências vazias, mas opcionalmente correspondemos a issox
. Isso significa que, em vez de inserir um espaço na frente dox
, ox
próprio é substituído. E ainda haverá uma partida vazia logo após ox
. Isso significa que todox
adiciona exatamente um espaço sem alterar mais nada. Então, o que queremos configurar é o seguinte:o que nos dará o resultado desejado. Então aqui está o código:
Converta a entrada para unário.
Converta cada uma
1
em duas linhas com|||
ex\\
(e um avanço de linha inicial).Insira as duas primeiras linhas com
^
ex/\
.Corrija a final
x\\
transformando a última\
em/
e acrescentando uma linha aov
.Substitua cada
x
correspondência vazia por um espaço.fonte
Pitão, 46 bytes
Suíte de teste.
fonte
%" ^\n / %s/\n v"*Q"\\\n| | |\n \
Pitão, 40 bytes
Bastante semelhante ao de Steven Hewitt, mas desenvolvido de forma independente.
Experimente Online
Explicação
fonte
Pitão,
333231 bytesObrigado Sr. Xcoder por um byte.
Experimente on-line: Demonstration or Test Suite
fonte
Retina , 45 bytes
Esta é uma solução bastante simples.
Experimente online
Se a arte pudesse ser indexada em 1, seria um pouco menor (44 bytes):
fonte
Pip ,
454233 bytesExperimente online!
Explicação
O código é realmente simples, embora as novas linhas tornem mais difícil a leitura. Aqui está uma maneira melhor de ver a estrutura:
O elemento repetido na cadeia S é
Tome isso como uma string literal e repita-a
a
vezes (ondea
é o primeiro argumento da linha de comando). Em seguida, acrescente o prefixo:e acrescente o sufixo:
e imprima.
(Eu gosto de como isso acabou parecendo um programa> <>.)
fonte
MATL ,
474443 bytes-3 bytes graças a Giuseppe
Experimente online!
fonte
' ^' ' / \ 'XK'| | |'XJ`' \ \'JGq@-]KP' v'
é 44 bytes.Haskell, 53 bytes
Experimente online!
fonte
Excel, 60 bytes
fonte
PowerShell ,
83, 57 bytesExperimente online!
De acordo com as sugestões do @ AdmBorkBork,
for
usando um intervalo numérico.;
Cordas substituídas e combinadas.fonte
for
loop usando1..--$args[0]|%{ }
.";"
e é mais barato se livrar$s
completamente. 57 bytes1..$args
oportunidade. Não sei ao certo qual é a etiqueta correta neste site. Eu faço alterações na minha resposta e credito a você ou você publica sua solução como uma resposta separada?AsciiDots , 88 bytes
Experimente online!
fonte
Geléia , 32 bytes
Porta chata da solução Python de Lynn .
Experimente online!
Explicação:
fonte
Na verdade , 30 bytes
Isso funciona com o mesmo princípio da resposta Japt da ETHproductions , onde espaços extras são adicionados posteriormente, e toda a cadeia é dividida em linhas de 5 para impressão implícita. Experimente online!
Ungolfing
fonte
Geléia ,
2523 bytesIsso funciona com o mesmo princípio que a resposta Japt da ETHproductions , onde espaços extras são adicionados posteriormente e toda a cadeia é dividida em cadeias de comprimento 5 antes da impressão. Experimente online!
Edit: Eu sabia que havia uma maneira de se juntar à parte superior e inferior da cadeia S de uma maneira mais golfista. Graças a Erik, o Outgolfer, por -2 bytes.
Ungolfing
fonte
“\|||\”ẋ“ ^ /“/ v”jKs5Y
Carvão , 25 bytes
Experimente online! Link é a versão detalhada do código.
fonte
↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
bash, 67 bytes
Experimente online
fonte
Java 8,
9376 bytesPorto de @IanH. Resposta C # .NET do depois que eu joguei um pouco mais.
Experimente aqui.
fonte
string
vs.var
n->
vsn=>
;)