Braquilog , 12 bytes

7

Água-viva , 12 11 9 bytes

\P$'*
  i

Experimente online!

Explicação

O programa acima é equivalente ao seguinte pseudocódigo funcional:

\            P      $       i        '*
map_prefixes(print, reshape(input(), '*'))

O $(remodelar) cria uma sequência de Nasteriscos. \Pcria uma função que pega uma lista (ou string) e passa cada um de seus prefixos para P(print). Assim, este sucessivamente imprime cordas 1da Nasteriscos.

Martin Ender
fonte

Respostas:

7

R, 45 bytes

Para abordagem de loop:

for(i in 1:scan())cat(rep("*",i),"\n",sep="")
Billywob
fonte
6

Braquilog , 12 bytes

yke:"*"rj@w\

Experimente online!

Isso pressupõe que uma nova linha à direita seja aceitável

Explicação

yk                The range [0, …, Input - 1]
  e               Take one element I of that range
   :"*"rj         Juxtapose "*" I times to itself
         @w       Write that string followed by a new line
           \      False: backtrack to another element of the range

Sem nova linha à direita, 15 bytes

-:"*"rj:@[f~@nw

Experimente online!

Este funciona usando todos os prefixos de "*" × Input.

Fatalizar
fonte
6

Haskell, 35 38 bytes

Compreensão da lista graças a nimi:

f x=unlines[[1..n]>>"*"|n<-[1..x]]

Versão antiga:

f 0=""
f n=f(n-1)++([1..n]>>"*")++"\n"

Versão alternativa:

g n=([1..n]>>"*")++"\n"
f n=[1..n]>>=g
Craig Roy
fonte
Você pode usar em ([1..n]>>"*")vez de replicate n'*'salvar um byte. Eu também conto apenas 39 bytes.
Laikoni 10/10
Versão alternativa agradável! No entanto, acho que a contagem de bytes ainda é de um e deve ser 38. (Veja, por exemplo, aqui ) O problema pode ser a nova linha após a f 0=""qual é contada como um byte, mas mostrada como dois bytes / caracteres em alguns editores de texto.
Laikoni
Obrigado! Vejo agora que estava adicionando inicialmente uma nova linha à direita quando estava contando os caracteres. Não cometerá esse erro novamente!
Craig Roy
2
Você pode alternar para a compreensão da lista: f x=unlines[[1..n]>>"*"|n<-[1..x]].
nimi
6

Pyth, 7 bytes

VQ*\*hN

Acabei com um byte graças a @ETHproductions Experimente online

usando a técnica de @ PIetu1998

6 bytes

j*L*\*S
Dignissimus - Spammy
fonte
Boa resposta! Você pode substituir "*"por \*.
ETHproductions 10/10
@ETHproductions Eu nunca soube disso, obrigado!
Dignissimus - Spammy 10/10
Você pode remover outro byte com um mapa. j*L\*S(incluindo o Sintervalo, multiplique cada um *Lpor "*" \*, ou jpor nova linha) Pyth insere um Q implícito no final.
PurkkaKoodari
jm*\*htambém é de 6 bytes.
precisa saber é
6

2sable , 24 11 bytes

>G')Ç>çJN×,

Experimente online!

E nenhum sinal de asterisco! Jogou de 24 a 11 graças ao @Emigna .

Explicação:

>G')Ç>çJN×,
>            Push input+1
 G           For N in range (1,input+1)
  ')Ç>çJ     Push '*' by getting ascii code for ')' and adding 1
        Nx,  Print '*' repeated N times
Geno Racklin Asher
fonte
1
Algumas dicas õVYInão afeta seu código de forma alguma e pode ser removido. 1+é o mesmo que >. Se você criar o asterisco no loop, também poderá remover UX. Usar em ×vez do loop interno economiza ainda mais bytes. Sem alterar o método, você pode reduzir para 11 bytes ou menos.
Emigna
1
Agradável! Vou editar em breve
Geno Racklin Asher
Você poderia adicionar uma explicação?
Buffer Over Ler
Código maravilhoso, parabéns por receber a recompensa! O bot da comunidade parece ter concedido apenas 25 e não os 50 originais, acho que porque esqueci de conceder a recompensa antes do prazo, desculpe por isso.
Buffer Over Ler
1
Não se preocupe com isso. Estou feliz por atingir a marca de 100 repetições. @TheBitByte
Geno Racklin Asher
6

Brain-Flak 75 Bytes

Inclui +3 para -A

{(({})[()]<{({}[()]<(((((()()()){}()){})){}{})>)}{}((()()()()()){})>)}{}

Experimente online!


Explicação:

{(({})[()]<                                                        >)}
#reduce the top element by one until it is 0 after doing the following
#Push this element back on to act as a counter for the next step.
#(counts down from input to 0 we'll call this counter)

           {({}[()]<                          >)}
           #reduce the top element by one until it is 0 after doing the following
           #(counts down from counter to 0)

                    (((((()()()){}()){})){}{})  
                    #push 42 (the ASCII code for *)

                                                 {}
                                                 #pop the counter used to push
                                                 #the right number of *s

                                                   ((()()()()()){})
                                                   #push a 10 (newline)

                                                                      {}
                                                                      #pop the null byte
Riley
fonte
isso inclui um byte nulo na saída? Eu não acho que é permitido ...
Destrutível Lemon
Não, eu quero dizer um byte nulo
Destructible Lemon
@DestructibleWatermelon Sim, acho que sim. Fácil correção embora. Obrigado.
Riley
6

Dyalog APL , 8 bytes

'*'⍴⍨¨⍳

matricular a lista que consiste em

'*' a corda "*"

⍴⍨ remodelado por

¨ cada um

os inteiros 1 através do argumento

TryAPL online!

Adão
fonte
Parece 8 bytes para mim.
Erik the Outgolfer
1
if pode ser um byte único:(,⍕⊢)⌸⍳
ngn
@ngn Isso é muito inteligente! Publique como seu. Você pode realmente contar como um byte único que você escreve 7 bytes<sup>SBCS</sup>.
Adám 13/01/19
5

V , 8 bytes

Àé*hòlÄx

Experimente online!

DJMcMayhem
fonte
Ah sim Àé hòlÄ!
Jonathan Allan
2
@ JonathanAllan Ei, pelo menos é mais legível que Jelly. (Para mim);)
DJMcMayhem
A página de código de Jelly é muito bem organizada, eu acho. Confira o resumo da página Átomos do wiki, criada recentemente por Lynn.
Jonathan Allan
3
@ JonathanAllan Sim, eu acredito nisso. Pode não parecer, mas os mnemônicos de V são bem organizados por causa das chaves que você usa para digitá-los no vim. Portanto, minha solução no jargão vim-key é <M-@><M-i>*h<M-r>l<M-D>x(m significa meta, que significa alt). Todos esses são bons mnemônicos para o que o comando faz.
DJMcMayhem
5

JavaScript (ES6), 34 bytes

f=x=>x?f(x-1)+`
`+'*'.repeat(x):''
Huntro
fonte
5

Perl 6 , 23 bytes

{.put for [\~] '*'xx$_}

(Se a saída puder ser uma lista de "linhas" sem novas linhas .put for  possam ser removidas)

Explicação:

# bare block lambda with implicit parameter 「$_」
{
  .put            # print with trailing newline
    for           # for every one of the following
      [\~]        # produce using concatenation operator
        '*' xx $_ # list repeat '*' by the input
}

(Consulte a documentação para producese você não entender o que [\~] ...está fazendo)

Brad Gilbert b2gills
fonte
5

Perl 5, 22 20 bytes

say"*"x$_ for 1..pop

Execute-o com o -Einterruptor para obter say.

$ perl -E 'say"*"x$_ for 1..pop' 5
*
**
***
****
*****

Escrito como um programa completo, ficaria assim:

use strict;
use feature 'say';

# get the argument
my $limit = pop @ARGV;

foreach my $i (1 .. $limit) { 
    say "*" x $i; 
}
simbabque
fonte
Não tenho certeza se preciso de bytes extras para a opção de linha de comando.
Simboloque 10/10
Acredito que a -Ebandeira conta como 1 byte extra.
ETHproductions
Que tal pegar o número como entrada em vez de parâmetro? perl -E 'say"*"x$_ for 1..<>' <<< 5
manatwork
@ manatwork sim, isso funcionaria. Eu não sou bom em contar, no entanto. Não tenho certeza se isso é permitido.
Simboloque 10/10
1
-Eé gratuito (pois substitui o -eque seria necessário de qualquer maneira). Se você realmente deseja pegar o número na linha de comando (por que não, mesmo que <>seja 1 byte menor e permitido), você deve usar em popvez de shift(2 bytes mais curto)! De qualquer forma, seja bem-vindo ao PPCG, feliz em vê-lo jogando golfe!
Dada
5

Perl, 19 bytes

-4 bytes graças a @Ton Hospel e seu retrabalho da solução!

eval"s//*/;say;"x<>

Precisa de sinalizador gratuito -E(ou -M5.010) para executar. Pega um número da entrada:

perl -E 'eval"s//*/;say;"x<>' <<< "5"
dada
fonte
1
Você pode fazer evalo mesmo comprimento que a forsolução (usando em <>vez de pop) comeval"s//*/;say;"x<>
Ton Hospel 10/16/16
@TonHospel Ineed, nice! obrigado!
Dada
5

J, 11 8 bytes

Economizou 3 bytes graças a milhas!

]\@#&'*'

Aqui está uma decomposição:

(]\@#&'*') x
x (]\@#) '*'
]\ (x # '*')

Agora, este último lê como "os prefixos ( ]\) da string que consiste em xcópias de '*'". Observar:

   5 ]\@# '*'
*
**
***
****
*****
   ]\ 5# '*'
*
**
***
****
*****
   ]\ 5 # '*'
*
**
***
****
*****
   ]\@#&'*' 5
*
**
***
****
*****

Caso de teste

   f =: ]\@#&'*'
   f 3
*
**
***
   f 5
*
**
***
****
*****
   f 1
*
   f 2
*
**
   f &. > ;/1+i.10
+-+--+---+----+-----+------+-------+--------+---------+----------+
|*|* |*  |*   |*    |*     |*      |*       |*        |*         |
| |**|** |**  |**   |**    |**     |**      |**       |**        |
| |  |***|*** |***  |***   |***    |***     |***      |***       |
| |  |   |****|**** |****  |****   |****    |****     |****      |
| |  |   |    |*****|***** |*****  |*****   |*****    |*****     |
| |  |   |    |     |******|****** |******  |******   |******    |
| |  |   |    |     |      |*******|******* |*******  |*******   |
| |  |   |    |     |      |       |********|******** |********  |
| |  |   |    |     |      |       |        |*********|********* |
| |  |   |    |     |      |       |        |         |**********|
+-+--+---+----+-----+------+-------+--------+---------+----------+

Soluções mais antigas de 11 bytes

'*'#~"+1+i.

Isso é equivalente

'*' #~"0 1 + i.

1 + i.é o intervalo [1, x]. Em seguida, '*' #~"0aplicado a esse intervalo, forma cópias (elemento) de '*'.

Programa de bônus:

[:#&'*'\#&1

Este é um garfo com tampa #&'*'\aplicado ao resultado da #&1entrada.#&1fornece uma variedade de xunidades e#&'*'\ formas formas'*' para os prefixos dessa matriz.

Casos de teste

   f1 =: '*'#~"+1+i.
   f2 =: [:#&'*'\#&1
   f1 1
*
   f2 2
*
**
   f1 3
*
**
***
   f2 4
*
**
***
****
   f2 5
*
**
***
****
*****
   f1 5
*
**
***
****
*****
   (f1;f2)3
+---+---+
|*  |*  |
|** |** |
|***|***|
+---+---+
   f1;f2
f1 ; f2
   (f1;f2)5
+-----+-----+
|*    |*    |
|**   |**   |
|***  |***  |
|**** |**** |
|*****|*****|
+-----+-----+
   (f1;f2)10
+----------+----------+
|*         |*         |
|**        |**        |
|***       |***       |
|****      |****      |
|*****     |*****     |
|******    |******    |
|*******   |*******   |
|********  |********  |
|********* |********* |
|**********|**********|
+----------+----------+
Conor O'Brien
fonte
Você também pode obter os prefixos da série de ncópias de '*'por 8 bytes utilizando]\@#&'*'
milhas
@miles: e outra versão de 9 bytes:'*'"0\@i.
Jonah
5

Teclas Vim, 22 , 18

O <esc>J:h r<cr>lyEZZ<C-v>{@"

Crédito enorme para @Udioica por ter encontrado uma resposta impressionante do vim que eu expandi. Esta resposta não contém nenhum asterisco, na esperança de ganhar a recompensa.

Explicação:

A entrada é digitada antes do restante do programa. Udioica veio com esse truque incrível. A digitação <n>O <esc>criará uma pirâmide de espaços e uma linha vazia, desde que você tenha :set autoindentativado. Esta opção é ativada por padrão no vim 8 e no neovim, embora não nas versões mais antigas do vim. Como isso também cria uma linha extra, usamosJ para associá-la à próxima, o que efetivamente remove a linha abaixo de nós.

Agora, neste ponto, precisamos substituir todos esses espaços por asteriscos. Se eu não estivesse preocupado com o uso de asteriscos no meu código, selecionaria visualmente tudo <C-v>{e digitariar* , que substituem cada caractere da seleção por um asterisco. Mas eu não posso fazer isso.

Então, abrimos as páginas de ajuda para :h r. O interessante sobre isso é que, na janela do vim, esta página é exibida como:

                            r
r{char}         Replace the character under the cursor with {char}.
                ...

Com o cursor no primeiro 'r'. No entanto, o próprio arquivo realmente contém este texto:

                            *r*
r{char}         Replace the character under the cursor with {char}.
                ...

Bastante conveniente. Então, passamos um caractere com l, e puxamos o texto r*com yE([y] ank para o [E] e esta palavra).

Para fechar esse buffer, usamos o atalho para salvar um arquivo ZZ. Agora, selecionamos visualmente nossos espaços e executamos o texto arrancado como se o tivéssemos digitado @". Isso funciona porque "@" executa o seguinte registro como pressionamentos de tecla vim e "é o registro padrão para puxar.

DJMcMayhem
fonte
Gostaria de explicar como funciona?
Corvus_192
@ corvus_192 Adicionei uma explicação mais extensa, além de jogar golfe um pouco mais.
DJMcMayhem
O tamanho do arquivo de dados não deve ser adicionado à contagem de bytes?
Aross 17/16 /
@aross o tamanho do arquivo de ajuda? Não, porque este arquivo está instalado ao lado do vim e é um recurso padrão.
DJMcMayhem
5

C, 47 46 45 43 bytes

Recebe entrada da linha de comando

f(n){for(n&&f(n-1);~n;putchar(n--?42:10));}

Basicamente, se n não for 0, recursão em n-1. na parte superior da recursão, em que n é 0, apenas imprime uma nova linha; o loop for termina quando n é -1 ou ~ n é zero; caso contrário, imprime o ASCII 42, que é '*'. Experimente em ideone

C ++ 58 bytes + 19 para incluir o iostream é 77

#include<iostream>
int f(int n){for(n&&f(n-1);~n;std::cout<<(n--?"*":"\n"));}

main(c,v)char**v;
{
    f(atoi(v[1]));
}

a.exe 3
*
**
***
cleblanc
fonte
Para mim, parece trabalhar com &&: n?f(n-1):0n&&f(n-1).
manatwork
@manatwork Obrigado amigo. salvando outro byte
cleblanc 11/11
No ideone, a impressão de 2 triângulos mostra no final, há um '\ n' a mais: * ** *** * ** *** **** ***** Eu digo o caso 0, o fim do caso de revursion, print one \ n more
RosLuP 11/11
@RosLup Sim, está imprimindo uma nova linha inicial e uma posterior. Eu acho que o OP disse que estava tudo bem nos comentários dele.
Cleblanc # 12/16
4

Retina , 14 bytes

A contagem de bytes assume a codificação ISO 8859-1.

.+
$**
.
$`$&¶

Experimente online!

Explicação

.+
$**

Transforme a entrada Nem Nasteriscos.

.
$`$&¶

Substitua cada asterisco por tudo, inclusive esse asterisco (este é o $`$&) e um avanço de linha (este ).

Martin Ender
fonte
4

Cubix , 22 bytes

?(.;I:^;/-.@o;(!\>'*oN

Teste online! Gera uma nova linha à direita.

No começo, eu não tinha certeza de que conseguiria encaixar isso em um cubo 2, mas no final funcionou bem:

    ? (
    . ;
I : ^ ; / - . @
o ; ( ! \ > ' *
    o N
    . .

Vou acrescentar uma explicação quando tiver tempo, espero hoje mais tarde.

ETHproductions
fonte
Explicação em breve? : P
FlipTack