Ok, minha primeira pergunta de golfe. Por favor, seja gentil :) Eu sei que há muitos quebra-cabeças ASCII: P, mas aqui vamos nós.
A tarefa é simples, use sua linguagem de programação favorita para imprimir uma ondulação triangular. A entrada deve ser do tamanho da ondulação.
Cada triângulo é espaçado igualmente. Basicamente, você continua adicionando os triângulos até que não haja espaço suficiente para o menor triângulo.
Você tem espaços em branco em qualquer lugar que quiser, desde que as ondulações sejam iguais ao exemplo com o tamanho correto.
Exemplo
q)g 1
__
\/
q)g 2
____
\ /
\/
q)g 3
______
\ /
\ /
\/
q)g 4
________
\ __ /
\ \/ /
\ /
\/
q)g 5
__________
\ ____ /
\ \ / /
\ \/ /
\ /
\/
q)g 6
____________
\ ______ /
\ \ / /
\ \ / /
\ \/ /
\ /
\/
q)g 7
______________
\ ________ /
\ \ __ / /
\ \ \/ / /
\ \ / /
\ \/ /
\ /
\/
q)g 8
________________
\ __________ /
\ \ ____ / /
\ \ \ / / /
\ \ \/ / /
\ \ / /
\ \/ /
\ /
\/
Como sempre, o código mais curto vence :)
Respostas:
Pitão, 31 bytes
Demonstração.
Explicação:
fonte
GNU sed -nr, 210
Um começo:
A entrada é um número inteiro unário positivo via STDIN, conforme esta meta-pergunta .
Resultado:
fonte
C, 165 bytes
Antes das etapas do golfe que destroem a legibilidade:
Isso faz um loop sobre todos os caracteres no retângulo que contém a figura e avalia as equações de linha que separam o interior do triângulo da parte externa, bem como as que separam as diferentes partes do triângulo.
fonte
n,x,y,b,c;main(c,v)char**v;{for(n=atoi(v[1]);y<=n;++y)for(x=-n;x<=n;putchar(x++-n?b>6*y?95:b<6*y-4&c>0&c%4==1?"/\\"[x<1]:32:10))c=(b=2*n-abs(2*x+1))-2*y+2;}
Retina , 182 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 um arquivo com a-s
bandeira, mantendo os#
marcadores. Você pode alterar as#
linhas para novas linhas na saída para facilitar a leitura, se desejar. Por exemplo:O código ainda não está muito bom.
fonte
C - 206 bytes
i,j,m,k,a,b;main(i,v)char**v;{m=atoi(v[1])*2;while(k<m*(m/2+1)){i=k/m;j=k%m;a=i*3,b=(i+j)%2;putchar("_\\/ "[j>=a&&j<m-a?0:j>i-2&&b&&j<i*3-1&&j<m/2?1:j<=m-i&&!b&&j>m-a&&j>=m/2?2:3]);if(j==m-1)puts("");k++;};}
Saída de exemplo
fonte
int
. Além disso, se você as declarar no escopo global, elas serão inicializadas automaticamente como 0. Em vez de terputchar()
várias chamadas em ramificações diferentes, você poderá usar uma única chamada e substituir asif
instruções por operadores ternários. É claro que fica difícil ler dessa maneira, mas é completamente dentro do espírito deste site escrever código feio se for mais curto. :)JavaScript ( ES6 ) 165
180 204Execute o snippet no Firefox para testar. Se retornar a string não for suficiente, usar alerta para saída é 2 caracteres a mais.
fonte