Desafio
Todos sabemos sobre árvores de Natal normais - mas que tal uma árvore de Natal de cabeça para baixo ! Este é um desafio bastante fácil para o Natal. O objetivo deste desafio é me tornar uma árvore de Natal de cabeça para baixo ASCII. Aqui estão as regras para este desafio:
- Aceite um número inteiro ímpar positivo. Você pode assumir que sempre estará entre
7
e51
. A base da árvore será composta pelos caracteres:
___ \ / |
O topo da árvore (a estrela) será constituído por uma única
*
.Cada linha da árvore será construída usando o formato
<?>
onde?
houver qualquer número de-
s. Por exemplo, se estiver fazendo uma linha de comprimento5
, a linha deve ser<--->
. Ou, se estiver fazendo uma linha de comprimento8
, a linha deve ser<------>
.Aqui está como o corpo da árvore deve ser construído:
Pegue o número ímpar
n
dado como entrada e crie uma linha da árvore desse tamanho.Subtrair
4
a partirn
e criar uma linha da árvore que comprimento.Subtrair
2
a partirn
e criar uma linha da árvore que comprimento.Decrementar
n
por2
. Depois disso, a menos que sejan
igual5
, volte para a etapa 2.
A base (consulte a etapa 2.) a estrela (consulte a etapa 3.) e cada linha da árvore (consulte as etapas 4. e 5.) devem ser centralizadas usando a entrada do número ímpar original (consulte a etapa 1.) como o valor máximo largura.
Exemplos / Casos de Teste
odd number inputed: 7
___
\ /
|
<-----> line length -> 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 13
___
\ /
|
<-----------> line length -> 13
<-------> line length -> 13 - 4 = 9
<---------> line length -> 13 - 2 = 11
<-----> line length -> 11 - 4 = 7
<-------> line length -> 11 - 2 = 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 9
___
\ /
|
<-------> line length -> 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 17
___
\ /
|
<---------------> line length -> 17
<-----------> line length -> 17 - 4 = 13
<-------------> line length -> 17 - 2 = 15
<---------> line length -> 15 - 4 = 11
<-----------> line length -> 15 - 2 = 13
<-------> line length -> 13 - 4 = 9
<---------> line length -> 13 - 2 = 11
<-----> line length -> 11 - 4 = 7
<-------> line length -> 11 - 2 = 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
Regras
- Aplicam-se brechas padrão .
- Isso é código-golfe , então a resposta mais curta em bytes vence!
repeat the above steps until the odd number minus 2 equals 5
- na primeira entrada, o número ímpar é 7, e 7-2 = 5, portanto, a árvore deve terminar instantaneamente (eu sei que você quer dizer, mas precisa reformular)7
, a entrada mínima, você primeiro criar as três linhas de árvores (sub-etapas .1.1, .1.2, .1.3), em seguida, subtrair2
do número ímpar e testar se ele é igual5
. A instrução para verificar se o "número ímpar menos 2 é igual a 5" está no final, os outros três passos devem ser executados primeiro. Mas, para responder seu primeiro comentário, tudo bem.7
como entrada ou se pode aceitar4
, como no quarto número ímpar (ou3
se é 0).Respostas:
Python 3 ,
12712110510310098 bytesEsta é uma função lambda sem nome que retorna uma lista de linhas:
Experimente online!
A parte principal desta resposta é
(o-i+2-i%2*3)
, que calcula o número de traços a ter em uma linha. O restante da resposta está simplesmente convertendo isso na arte ASCII desejada.Muito obrigado ao Sr. Xcoder , por barbear 6 bytes e discutir comigo sobre o golfe no chat.
Agradecemos também a Lynn por perceber que
3*(i%2)
pode seri%2*3
, 2 bytes mais curto!fonte
f
cordas muito pequenos de matemáticao-i+2-i%2*3
salva dois bytes.C, 163 bytes
Experimente online!
Desenrolado:
fonte
Próton , 83 bytes
Agradecemos ao FlipTack por economizar 4 bytes e por colaborar no chat (na verdade, formamos uma ótima equipe). Economizou indiretamente 2 bytes graças a Lynn .
Experimente online!
fonte
Carvão , 28 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Imprima a base.
Faça um loop da metade do número de entrada para 1.
Imprima duas linhas, a primeira com uma a mais
-
que o índice do loop, a segunda com uma a menos.Espelho para completar a árvore.
Coloque a estrela.
fonte
SOGL V0.12 ,
3530 bytesExperimente aqui!
Usa o algoritmo de Neil's Charcoal , recebe a entrada como o índice nos números ímpares - então 13 corresponderia à entrada 7
fonte
Retina , 89 bytes
Experimente online! Explicação: O primeiro estágio converte a entrada em unário e anexa a
>
. O segundo estágio substitui dois-
s por a<
para corrigir o comprimento da linha. O terceiro estágio replica a ramificação, mas um pouco menor a cada vez, até que a ramificação não possa mais ser reduzida. A etapa final adiciona a base e a estrela.fonte
Javascript 506 bytes
Versão Golf:
Ungolf-version:
Uso:
console.log(tree(13)), console.log(tree(17)),
ES6 165 bytes (do meu amigo)
Versão Golf:
Ungolf-version:
Uso:
p(31); p(17);
fonte
const
palavras-chave etc.PowerShell , 131 bytes
Experimente online!
Bem, essa é uma bagunça certa para quem não conhece o PowerShell ... então, vamos ver o quanto eu posso explicar como funciona.
Para a explicação, eu vou estar usando
input = 17
.Começamos de maneira bastante simples, com a configuração da variável auxiliar
$i=2
e a configuração$x
para<something>
, com o<something>
início como um intervalo da entrada$args
até a5
, então17,16,15,...,6,5
. Esse intervalo é bombeado para um loop for.A cada iteração, começamos com a configuração da variável auxiliar
$j
como o resultado de umaif
instruçãoif($_%2){$i-2}else{($i++)}
,. Se for estranho$j=$i-2
, caso contrário$j=($i++)
. Isso, juntamente com$i=2
o começo, nos dá a sequência0, 2, 1, 3, 2, 4, 3, 5...
que corresponde exatamente a quantos espaços precisamos anexar à nossa linha de árvores. ;-) Nós levamos' '
e multiplicamos por esse número.Em seguida, precisamos de nossas filiais. Isso é feito com
'<'
mais a parte do meio'-'
multiplicada, mais o final'>'
. A multiplicação é feita reconhecendo que a-
alternativa se alterna em um2, 5, 2, 5, 2...
padrão com base no número de entrada$_
; portanto, estamos selecionando um pseudo-ternário com base nesse padrão.Para maiores esclarecimentos, eis os dois primeiros termos de cada seção:
Então agora definimos
$x
como uma matriz de ramificações (ou seja, strings). Fora do loop, agora construímos nossa árvore "em cima" com o número apropriado de espaços salvos$y
, depois exibimos nossos galhos$x
e depois a árvore "em baixo" com o*
. Cada um deles é deixado no pipeline e a saída está implícita em uma nova linha entre os itens.fonte
JavaScript (ES6),
150147 bytesMostrar snippet de código
fonte
Tela , 28 bytes
Experimente aqui!
Uma porta da minha resposta SOGL que é uma porta da resposta do Neil's Charcoal.
fonte
Minha tentativa no JS ESGoogoltriplex.
Mostrar snippet de código
fonte