Introdução
A idéia é usar o caractere asterisco (estrela) *
para exibir uma estrela ascii-art em uma dimensão especificada. A cota é um número de entrada maior ou igual a que especifica a altura em linhas do ponto superior da estrela. As estrelas aqui devem ser seis estrelas pontiagudas, com tamanhos maiores, com melhor aparência da perspectiva da imagem.
Em todos os casos, a representação artística das estrelas deve aparecer como dois triângulos que se sobrepõem, como mostrado nos exemplos a seguir.
Parametrics
A figura a seguir e a tabela de dados descrevem atributos para os sete primeiros tamanhos da estrela. Cada um dos parâmetros cresce em uma progressão aritmética à medida que aumenta, exceto que é diferente .
Exemplos
Para uma entrada de 1 (o caso degenerado), a saída do programa deve ser a seguinte:
*
*****
*****
*
Entrada de 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Desafio
Sua tarefa é criar uma função ou programa que aceite o número N como entrada e, em seguida, produza a estrela de tamanho apropriado usando apenas caracteres e o
*
caractere.
- Você pode assumir que o valor de entrada é sempre um número inteiro positivo.
- O espaço em branco à direita nas linhas de saída está OK.
- O algoritmo do programa deve ser geral o suficiente para qualquer entrada produzir a saída de arte em estrela. Obviamente, existem limitações práticas devido ao tamanho da saída de exibição.
- A saída deve ser impressa em STDOUT.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam.
Pontuação
Isso é código-golfe, então o código com o menor número de bytes vence!
Respostas:
05AB1E , 21 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
3*s≠-L·<
curtir6*s≠·-ÅÉ
ou curtir≠3/-6*ÅÉ
, mas infelizmente nenhuma é mais curta .. Ótima resposta, como sempre! :)xs3*<ŸRsLì'*×.º.C.∊
para 19 :). Eu menti, não funciona para 1. Deixando para inspiração.Haskell , 114 bytes
Cria uma função
g
que pega um número e produz umaIO
mônada que imprime a estrela em STDOUT. Eu acho que está tudo bem.Experimente online!
Explicação
Primeiro vamos falar sobre o lambda.
Isso leva um número
n
, para ser desenhado como estrelas. Imprimimos o dobro de estrelas e, em seguida, mais 1 e colocamos à direita no tamanho da imagem. Colocamos isso à direita pora
espaços para centralizar a linha de estrelas. Podemos usar esse lambda para desenhar cada linha.A partir deste lambda, criamos
(%)
.(%)
começa commapM_
o lambda para transformar um perfil na forma.Agora tudo o que precisamos fazer é fazer uma lista do perfil da estrela. Podemos fazer isso criando primeiro um triângulo
[1..a]
e preenchendo-o com alguns zeros++replicate b 0
. Se pegarmos o perfil do triângulo e o invertermos, obteremos a outra metade da estrela. Para superimpor, basta criar um novo perfil, onde cada entrada é o máximo dos dois triângulos. Isto ézipWith max
.Em seguida, chamamos isso de uma de duas maneiras: quanto
3%1
à entrada de1
e com o(3*a-1)%a
contrário.A partir daqui, brincamos um pouco com alguns dos valores para raspar alguns bytes. Como
3*a-1
é bastante longo, compensamos alguns de nossos outros valores por 1, para que tudo seja cancelado e, em3*a
vez disso, tenhamos o comportamento pretendido . Ou seja, começamos nossa lista em2
vez de1
e fazemos em2*n-3
vez de2*n-1
compensar a mudança.Versão alternativa, 114 bytes
Este cria uma função sem ponto
(%)<*>min 2
Experimente online!
Experimente online!
Experimente online!
fonte
R ,
125107101 bytesExperimente online!
Abordagem anterior (diferente):
R ,
150148136135130128 bytesExperimente online!
fonte
Python 2 ,
1019997 bytesExperimente online!
-2 bytes, graças a Lynn
fonte
i+x>n*6or
salva dois bytes.i+x>~i/n/2%2*6*n
ou algo assimi+x>3*n*(~i/n&2)
(ambos os 96 bytes).JavaScript (V8) ,
101108 bytesEDIT: +7 bytes para imprimir em STDOUT
Experimente online!
Comentado (sem
print
)fonte
Gelatina , 21 bytes
Um programa completo que aceita um número inteiro positivo que imprime em STDOUT.
Experimente online! Ou veja uma suíte de testes .
Quão?
fonte
Tela ,
2523 bytesExperimente aqui!
15 bytes sem manipulação
1
fonte
Gelatina , 21 bytes
Experimente online!
Um link monádico que aceita um único número inteiro como argumento à esquerda e retorna uma sequência Jelly separada por nova linha com a estrela como saída. Quando executado como um programa completo, imprime implicitamente a estrela em STDOUT.
Explicação
fonte
×3’»3
o mesmo comprimento ^ _ ^ɓ
lo, não importava, mas o mantive porque ainda gostei!Carvão , 25 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Desenhe um pentágono irregular representando o quarto superior direito da estrela, mas com revestimento especial
1
para tornar a linha uma coluna extra mais larga.Reflita para completar a estrela.
Invólucro mais especial para tornar a estrela
1
mais alta.Solução alternativa, também 25 bytes:
Experimente online! Link é a versão detalhada do código. Explicação:
Imprima um extra
*
para o caso de1
.Desenhe a metade esquerda de um triângulo do tamanho apropriado.
Reflita para completar o triângulo.
Sobreponha-o ao seu reflexo, exceto no caso de
1
, caso em que apenas o reflita.14 bytes sem revestimento especial para
1
:Experimente online! Link é a versão detalhada do código. Explicação:
Desenhe um triângulo do tamanho apropriado.
Sobreponha-o ao seu reflexo.
fonte
Perl 6 , 74 bytes
Experimente online!
Cria literalmente um triângulo com as proporções corretas e o sobrepõe a uma cópia invertida usando a sequência ou o operador (
~|
). Saída como uma lista de linhas com um espaço em branco à esquerda e à direita.Explicação:
fonte
J ,
5350 bytesExperimente online!
destroçado
como
Use uma tabela de funções (como uma tabela de tempos da 3ª série) para construir metade do triângulo usando
>:
(maior ou igual) como a função. Em seguida, inverta cada linha, corte a última coluna e costure os dois lados para obter o triângulo completo (mas composto por 1 e 0). Adicionen
linhas de zeros na parte inferior. Finalmente, inverta a coisa toda e sobreponha-a ao original, usando boolean ou+.
para obter o resultado. Em seguida, gire 1 para*
e 0 para espaços.fonte
T-SQL, 194 bytes
@
é o valor de entrada@c
lida com a largura do triângulo superior@d
lida com o triângulo inferior de largura@e
contém a saída@c
ou@d
- isso economiza alguns bytes@f
lida com o caso especial de 1 como entrada.@c*@=3
determina quando usar@f
. 5 bytes mais barato que escrever@c=3and @=1
Experimente online
fonte
Japt
-R
, 25 bytes+5 bytes para
n=1
: \Tente
fonte