Hoje, 11 de novembro, é conhecido como Dia da Lembrança , Dia do Armistício ou Dia dos Veteranos (dependendo do país), e é um dia de reflexão e gratidão para os militares e seus serviços, que começaram especificamente a refletir o fim das hostilidades europeias na primeira guerra mundial. Vamos refletir sobre isso com uma simples saída de arte ASCII de 11/11
.
Dada uma entrada n
, produza uma representação em arte ASCII 11/11
disso com n
unidades de altura. Especificamente, cada um 1
é composto por tubos verticais ||
, a barra é composta por barras //
e cada caractere tem dois espaços separados. Observe que isso significa variar larguras de saída - por exemplo, n=3
abaixo, veja como a "parte inferior" da barra é de dois espaços 1
à esquerda, mas há quatro espaços à 1
direita, de modo que a parte superior da barra alinha-se apropriadamente e há dois espaços à 1
direita.
n = 1
|| || // || ||
n = 2
|| || // || ||
|| || // || ||
n = 3
|| || // || ||
|| || // || ||
|| || // || ||
n = 4
|| || // || ||
|| || // || ||
|| || // || ||
|| || // || ||
n = 5
|| || // || ||
|| || // || ||
|| || // || ||
|| || // || ||
|| || // || ||
e assim por diante.
Entrada
Um número inteiro positivo único em qualquer formato conveniente , n > 0
.
Saída
Uma representação de arte ASCII de 11/11
, seguindo as regras e exemplos acima. Novas linhas à esquerda / à direita ou outro espaço em branco são opcionais, desde que os caracteres sejam alinhados adequadamente.
Regras
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
$'
eo$`
no regex? Eu nunca vi isso antes e adoraria entender melhor.$&
seria a própria partida).05AB1E , 24 bytes
Experimente online!
Explicação
Versão anterior de 26 bytes
Experimente online!
fonte
" "×"//"«.s¦R"|| || "s«vyû}»
, acontece que palendromizar não é um bom ajuste, por razões mais óbvias agora ... e você venceu meu número de bytes mais rápido de qualquer maneira, heh.Perl, 45 bytes
-9 bytes graças a @Gabriel Benamy
47 bytes de código + 1 byte para
-n
sinalizador.Executar com
-nE
sinalizadores:fonte
"|| ||"
a"|| "x2
e, em seguida, transformando(2+$_)
em apenas$_
+( .. )
a$@
tarefa. Funciona no meu computador, pelo menos.+( .. )
, obrigado. No entanto eu não posso mudar"|| ||"
a"|| "x2
porque eu preciso de dois espaços entre o||
."|| "
tem dois espaços após os tubos (não é só tornando corretamente aqui por alguma razão), e você está duplicando essa seqüência em"|| || "
que cuida dos extra de 2 espaços de$"x(2+$_)
||
quando havia dois.JavaScript (ES6),
8877 bytesA abordagem recursiva
pode não ser,não poderia ser a mais curta ..map
versão (88 bytes):Compreensão da matriz (86 bytes):
for
versão em loop (89 bytes):.replace
versão (85 bytes):fonte
Retina, 29 bytes
Porta da minha solução JavaScript. Observe o espaço depois
$*
e dois espaços depois||
.fonte
V , 30 bytes
Experimente online!
Como de costume, aqui está um hexdump:
fonte
5i|| <esc>3b2r/
. Você estará em um lugar um pouco diferente, porém, e eu não consigo ler V, então não tenho certeza se isso importa.Lote, 130 bytes
Não é uma porta da minha solução JavaScript. Como
|
s são difíceis de manipular no Lote, eu usox
s como espaços reservados e os substituo na saída, isso também reduz meu tamanho de código. Inicia definindos
a saída desejada paran=1
(n
é passada na linha de comando), depois insere espaços conforme necessário para obter a primeira linha para o valor real den
, depois passa pela impressão da sequência e deslocando a barra deixada por um caractere a cada vez.fonte
BaCon , 71 bytes
Um programa BASIC completo em uma linha.
fonte
1 TO
?Lisp comum, 216 bytes
Vou dizer logo de cara que esta é uma solução terrível para o desafio. No entanto, funciona e estou cansado.
Uso:
Por alguma razão, em vez de fazer qualquer coisa sã, decidi abordar isso com um loop dentro de uma
format
chamada. Esse loop percorre o conteúdo retornado pela outra construção de loop real no final, com os últimos seis elementos removidos (portanto, osbutlast
s repetidos ). O conteúdo do valor retornado por essa construção de loop consiste em uma contagem de preenchimento para a frente das barras, os caracteres de preenchimento (espaços), a contagem de preenchimento para a parte de trás das barras e, finalmente, os mesmos caracteres de preenchimento.Sou bastante novo no Lisp e entendo que definitivamente há muito espaço para melhorias aqui.
fonte
Python 2,
767571 bytesAinda trabalhando em uma versão mais curta, não é tão ruim assim.
obrigado mbomb007 por capturar um erro!
fonte
x='|| '*2;print x+(n-i)*' '+'//'+' '*i+x[::-1]
//
na última linha e dois espaços depois//
na primeira linha. Deve haver dois espaços em ambos os casos.R, 86 bytes
Apenas uma
for
abordagem simples de loop:fonte
Retina , 40 bytes
Experimente online!
Explicação
Isso transforma a entrada
N
emOnde
S
corresponde aosN
espaços.Há duas coisas acontecendo aqui.
;{:
indica que esse estágio e o último devem ser executados em um loop até que falhem ao alterar a sequência.:
indica que o resultado desse estágio deve ser impresso após cada iteração e;
indica que o resultado final do loop (e, portanto, de todo o programa) não deve ser impresso. O estágio em si apenas substitui osx
por|| ||
na primeira iteração (e não faz nada depois), para que agora tenhamos a primeira linha da saída necessária (e a imprima).Finalmente, isso muda o
//
caractere para a esquerda, desde que ainda restem pelo menos três espaços no//
. Depois, retornamos ao estágio anterior (que agora imprime apenas a linha atual, pois não há maisx
s) e depois repetimos.fonte
Ruby, 60 bytes
fonte
C,
116 9489 bytesExperimente no Ideone
fonte
Ruby,
767473 bytesComo função, são necessários
7372 bytes, contando a definição:fonte
Powershell, 66 bytes
fonte
read-host
-param($a)1..$a|%{$s="|| ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}
C #, 150 bytes
Golfe:
Ungolfed:
Teste:
Saída:
fonte
Groovy, 63 caracteres / bytes
Aqui está minha tentativa com o Groovy, usando um fechamento anônimo e loops simples para imprimir a arte ASCII na saída padrão:
{n->n.times{println'|| '*2+' '*(n-it-1)+'//'+' '*it+' ||'*2}}
Você pode experimentá-lo online aqui . Basta clicar em "Editar no console" e depois em "Executar script".
Tentando fazer o mesmo e retornando uma string em vez de imprimir, não consegui ficar abaixo de 71 bytes:
{n->a='';n.times{a+='|| '*2+' '*(n-it-1)+'//'+' '*it+' ||'*2+'\n'};a}
fonte
Python 3, 78 bytes
Ainda tentando encurtar ...
fonte
for
o mesmo para a mesma linha quedef
? (Assim:)def m(n):for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a)
Além disso, você pode salvar dois bytes substituindo(e+1)
por-~e
.