Introdução
Parcialmente inspirado por essa pergunta do StackOverflow , vamos desenhar um Lightning Bolt ASCII.
Escreva um programa que obtenha um número inteiro positivo n
via STDIN ou linha de comando e emita o ASCII Lightning Bolt abaixo.
Entrada
Número inteiro positivo que n
representa o número de camadas de zigue-zague de raios para desenhar.
Saída de exemplo
n = 1
__
\ \
\ \
\ \
\/
n = 2
__
\ \
\ \
__\ \
\ __\
\ \
\ \
\/
n = 3
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
n = 4
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
. . . etc
Notas Adicionais
- Você pode escrever uma função que aceite
n
como único argumento e imprima ou retorne a string. - Espaços à direita e novas linhas estão bem.
- Não há espaços à esquerda, exceto onde apropriado para o padrão designado.
- O menor código em bytes vence.
Respostas:
Java,
201196189186182 bytesObviamente não é o melhor, mas é em Java.
fonte
main
método.main
não deve contar para a contagem de bytes, e talvez alguns idiomas com palavras-chave detalhadas devam ter macros permitidas. Então seria interessanteCJam, 41 bytes
Provavelmente posso extrair mais alguns bytes, mas aqui está uma compactação. Eu escolhi uma base que levaria a não imprimíveis.
Experimente online .
O raio é dividido em
top + middle * (input-1) + bottom
, ondetop
,middle
,bottom
(comprimida utilizando a conversão de bases) são(Os espaços estão marcados com
.
s)40 bytes
Graças ao Optimizer
fonte
top + middle * (input-1) + bottom
, ele me lembrou que PowerShell poderia multiplicar cordas: PJavaScript ( ES6 ) 76
Usando a sequência de modelo, as três novas linhas são significativas e contadas.
Teste a execução do snippet (apenas Firefox)
fonte
PowerShell,
7263 bytesWindows estúpido e seu \ r \ n ... Isso poderia ter sido
6759 bytes!fonte
PHP -
84 7978 bytesVisualize a fonte de resultados ou envolva-a
<pre />
para verificar os resultados. As novas linhas são necessárias no código.O -1 poderia ser movido para o
define
, mas considerei isso uma trapaça.1º aprimoramento: substitua
\n
por novas linhas reais2º: Como eu posso definir um var, usei um CONTANT, segura o
$
. + um espaço desnecessário em str_repeat3º: removeu acidentalmente o -1, mas salvou um byte usando em
<?=
vez de eco.fonte
Pyth,
6054 bytes (Obrigado @isaacg)Minha primeira tentativa em Pyth, provavelmente muito ruim.
Verifique aqui .
fonte
\n
. Além disso, o primeiro\\
no programa poderia ser apenas um\
.CJam, 50 bytes
Experimente aqui
fonte
Brainfuck, 164 bytes
Com comentários:
Ok, como essa resposta Brainfuck vence Java e C #?
fonte
> <> (Peixe), 409 bytes
Execute por
fish.py bolt.fish --value n
ondebolt.fish
está o nome do programa en
é sua entrada inteira positiva.Não é curto, mas parece legal. Minha tentativa foi tentar fazer parecer um relâmpago. Além disso, sempre erros na conclusão.
fonte
Perl, 69 + 1
69 caracteres, mais 1 para a
-n
linha de comando alternar para buscar entrada de stdin.Exemplo de uso:
fonte
perl -pe'$_="__\ns s"."__s\\ __\\\n s"x--$_." s \\/";s!s!\\ \\\n!g'
. Além disso\n
pode ser substituído por uma quebra de linha literal para outros 3 caracteres salvos.Javascript (ES6), 86
Não vou ganhar, mas eu amo a solução em 1 linha e odeio barras.
fonte
atob
documentaçãoC, 101 bytes
Minha implementação não tão original em c
fonte
C #, 221 bytes
Essa não é a melhor ou a menor resposta, mas achei que tentaria. A resposta da Fsacer é muito mais curta e acho que você deveria conferir. Eu apenas decidi fazer isso apenas como um método alternativo.
fonte
class C{static void Main(string[]n){var e=int.Parse(n[0]);var o=@"__{0}\ \{0} \ \{0}";while(e-->1){o+=@"__\ \{0}\ __\{0} \ \{0}";}System.Console.Write(o+@" \ \{0} \/{0}","\n");}}
C #, 166 bytes
EDIT 1: aprimorou o resultado de 186B para 173B
EDIT 2: salvou 1B usando em
PadLeft
vez dePadRight
EDIT 3: salvou 8B removendo
PadLeft
o segundo parâmetro e usando literais de string literalfonte
public
no início e, em vez de usar uma matriz de caracteres, você pode usarString.PadRight(int, char)
, que é mais curto e permitirá que você use um caractere ascii que não precise escapar.Awk, 101 + 8 bytes
101 caracteres, mais 8 para
-v n=$1
obter um número inteiro do shell.Novo neste site SE, não está claro se esses parâmetros devem contar.
Ungolfed
Exemplo de uso:
fonte
-v
peça. Sem mencionar que toda a ideia da variável é desnecessária, assim como oEND
bloco separado . 89 caracteres:{l="\\ \\";print"__\n"l"\n "l;for(;--$1;)print"__"l"\n\\ __\\\n "l;print" "l"\n \\/"}
pastebin.com/NCznF9kHPython
978278char:Este é o meu primeiro código de golfe
@ (^ _ ^) @
Teste aqui
fonte
C,
119108 bytesPrimeira tentativa, 150 bytes
main
está aceitando um argumento int, então execute assim:./lightning . . .
para passar4
como argumento.fonte
Python 3,
126118117 bytesApenas algo para nos começar.
fonte
[0]*(n-1)
da calha para obtern-1
iterações. Você também pode escrever(n-1)
como~-n
.i in [0]
parai in[0]
.for i in[0]*~-n:p(' \\ \\\n__\\ \\\n\\ __\\')
.Python 2, 76 bytes
Basta imprimir as três primeiras linhas, depois as próximas três linhas
n-1
e depois as 2 linhas finais. Tudo de uma só vez.E aqui está uma boa tentativa de uma alternativa que (infelizmente) use exatamente o mesmo número de bytes:
fonte
*
, que me dá 77 bytes - ou não o inline, mas custa 79 bytes. :(F #, 98 caracteres, 105 bytes
fonte
CJam 54 Chars
não é o mais curto, mas desde que eu comecei o CJam hoje, estou feliz com isso.
Tente
fonte
Pascal:
149142141137 caracteresAfinal, a única força do golfe de Pascal é que as barras invertidas não precisam escapar ...
fonte
for n:=2 to n do
também funciona.Planilhas Google, 60 bytes
Função de planilha anônima que leva a entrada do intervalo
[A1]
e as saídas para a célula chamadora.fonte
Perl 5 , 58 + 1 (
-n
) = 59 bytesExperimente online!
fonte
EspecificaçõesBAS -
135104 bytesO apóstrofo nas instruções PRINT move o cursor para uma nova linha.
O SpecBAS permite incorporar caracteres ASCII em uma string por meio de
#n
, portanto, incorporou alguns retornos de carro (ASCII 13).Construiu uma sequência usando retornos de carro e outros caracteres e, em seguida, usou-a
REP$
para repeti-la o número necessário de vezes.fonte
PHP 155
Versão Ungolfed
fonte
echo$l=PHP_EOL,"__$l";$g="\\ \\$l";for($i=0;$i<$argv[1];$i++){echo($i?"__$g\\ __\\$l":$g)," $g";}echo" $g",' \\/',$l;
$i=0
; remova os suportes dofor
loop; incremente o contador dentro do loop (echo($i++?"…
).Java,
183180 bytesLua, 110 bytes
fonte
Retina , 46 bytes
Toma a entrada como unária.
Cada linha deve ir para seu próprio arquivo e
#
deve ser alterada para nova linha nos arquivos. Isso é impraticável, mas você pode executar o código como está, como um arquivo, com o-s
sinalizador, mantendo os#
marcadores. Você pode alterar as#
linhas para novas linhas na saída para facilitar a leitura, se desejar. Por exemplo:O algoritmo é muito simples. Os pares de linhas (regex - pares substitutos) executam as seguintes etapas de substituição:
1
da entrada unária.\ \
partes compactadas do raio para obter a saída desejada.fonte
Powershell, 59 bytes
Script de teste:
Saída:
Explicação:
Este script é tradicional
top
+middle
+bottom
. Há apenas uma coisa inteligente: a vírgula antes da cadeia do meio força a repetir um elemento da matriz em vez de uma cadeia. Portanto, cada ummiddle
é exibido em uma nova linha.fonte