Quando criança, eu gostava muito de brincar com esses brinquedos:
Eles provavelmente pretendiam que eles fossem usados para arte, mas eu sempre os usei para matemática! Fractais, padrões, etc. Certa vez, recebi este desafio:
Construa um triângulo sem usar nenhum dos blocos de triângulo verdes.
Esse desafio me surpreendeu por mais tempo, até me deparar com uma maneira realmente bonita e simples de fazer isso com apenas três trapézios:
/\
/_/\
/__\_\
Agora, pegue este triângulo e gire-o:
______
\ \__/
\/ /
\/
Usando esses dois triângulos, podemos construir triângulos maiores a partir deles. Aqui está um triângulo de altura 2:
/\
/_/\
/__\_\
/\ \__/\
/_/\/ /_/\
/__\_\/__\_\
E aqui estão triângulos de altura 3-7:
#3
/\
/_/\
/__\_\
/\ \__/\
/_/\/ /_/\
/__\_\/__\_\
/\ \__/\ \__/\
/_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\
#4
/\
/_/\
/__\_\
/\ \__/\
/_/\/ /_/\
/__\_\/__\_\
/\ \__/\ \__/\
/_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\
#5
/\
/_/\
/__\_\
/\ \__/\
/_/\/ /_/\
/__\_\/__\_\
/\ \__/\ \__/\
/_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\/__\_\
#6
/\
/_/\
/__\_\
/\ \__/\
/_/\/ /_/\
/__\_\/__\_\
/\ \__/\ \__/\
/_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\/__\_\/__\_\
#7
/\
/_/\
/__\_\
/\ \__/\
/_/\/ /_/\
/__\_\/__\_\
/\ \__/\ \__/\
/_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\/__\_\/__\_\
/\ \__/\ \__/\ \__/\ \__/\ \__/\ \__/\
/_/\/ /_/\/ /_/\/ /_/\/ /_/\/ /_/\/ /_/\
/__\_\/__\_\/__\_\/__\_\/__\_\/__\_\/__\_\
O desafio
Escreva um programa ou função que use um número n e imprima um triângulo sem triângulo da altura n . Os espaços à direita em cada linha são aceitáveis e até uma nova linha à direita ou à direita também é aceitável. O IO pode estar em qualquer formato razoável. A entrada é garantida como um número inteiro positivo, para que você não precise se preocupar com números negativos, decimais, não números, etc.
Menor resposta em bytes ganha!
fonte
Respostas:
CJam, 47
Explicação:
Experimente online
fonte
Ruby, 79
A. (-4 bytes
-1
+1
) alterado de 0-indexado (.times
) para 1-indexado (1.upto
)B. (-5 bytes) alterado da matriz de três seqüências de caracteres de 6 caracteres para a seleção de substring de 6 caracteres da sequência de 18 caracteres.
C. (-1 byte)
m=n*3
->n*=3
D. (-5 bytes) reduziu todas as cinco barras invertidas duplas para barras invertidas simples (parcialmente possibilitadas pela reordenação da string necessária para o ponto A)
Ruby, 94
explicação
A unidade básica é um diamante 3x6 da seguinte forma (último caractere em cada linha duplicado para maior clareza :)
Tudo o que precisamos fazer é exibir uma janela adequada desse padrão. O Ruby's
ljust
permite que você use qualquer corda, não apenas espaços. Normalmente,ljust
seria usado para preencher uma sequência de caracteres imprimíveis adicionando espaços no final, mas aqui usamos o contrário: para preencher uma sequência de espaços adicionando caracteres imprimíveis no final.ungolfed no programa de teste
fonte
Retina ,
150122118 bytesA saída para este desafio parece incrível, a propósito!
A entrada está unária. A saída contém um avanço de linha à direita. O código usa a codificação ISO 8859-1. Observe o espaço à direita na penúltima linha.
Experimente online
Explicação
Se você quiser uma explicação mais aprofundada, comente ou me envie uma mensagem no chat.
Obrigado a Martin por jogar 32 bytes de desconto.
fonte
Linguagem de impressão ASCII da Tarmo, 46 bytes. (não concorrente)
Só de olhar para linguagens de programação tão estranhas como CJam, fico um pouco tonto com o quão complexa, antinatural e enigmática pode ser, que eu queria "ir ousadamente aonde nenhum homem foi antes" e inventar minha própria linguagem. Como resultado, criei meu próprio idioma para a impressão de padrões ascii.
A idéia básica é que você possa definir primeiro padrão e depois imprimir - usando o mesmo tipo de caractere '1' ou '2' ou qualquer outro número - você pode definir seu próprio padrão de impressão.
Depois que o padrão é definido (inicia do número até o final do número) - os próximos números executam a impressão do padrão.
Por exemplo
Saídas como esta:
Irá definir o padrão 1 e depois imprimi-lo imediatamente. Padrão é definido tudo separado por '|' personagem. 0 no final - atua como finalização de padrão.
Caracteres especiais como '$' são reservados como avanço de linha e '~' é reservado para espaçamento - metade - de padrão específico.
Will produz texto como este:
Em seguida, vai para loops. Esse precisa estar facilmente visível - então, retirei {} colchetes para for-loops, mas os nomes de variáveis são nomeados automaticamente - portanto, o primeiro colchete usará a variável 'a', o segundo 'b' e assim por diante. A iteração sempre passa de 0 a um número específico - e esse número é definido antes dos {} colchetes.
'n' é uma variável reservada para toda a entrada da função.
Então codifique:
Saídas Will (com n == 4):
E '#' é um modificador especial para o espaço em branco do eletrodo de compensação.
E finalmente a solução completa:
DrawPatterns.cs:
Com argumentos de linha de comando como este: -d "1 / \ | / _ / \ | / ___ \ 2 __ | / 0n {na-1 {½} 1a {2 # 1} $}" 3
O resultado será:
fonte
JavaScript (ES6), 119 bytes
Onde
\n
representa o caractere literal de nova linha. Se uma linha inicial comn*3
espaços e uma nova linha for aceitável, ela.slice(1)
poderá ser removida para salvar 9 bytes.fonte
Python 2, 118 bytes
Abordagem semelhante à resposta do nível do rio St rubi .
Experimente online
fonte
Python 2, 142 bytes
O princípio é muito parecido com outras respostas: pegue três cordas repetidas e as coloque em camadas de forma que você só precise aparar algumas delas para obter o triângulo, depois coloque-as à esquerda.
fonte
C ++, 395 bytes
Primeiro código de golfe com um tamanho glorioso de 395 bytes em C ++. No meu caso, parece um pouco como um concurso de ofuscação: D
fonte
Pitão, 66 bytes
Experimente online!
fonte