Desenhe um triângulo asterisco


57

Inspirado por uma tarefa de programação 101, aqui está uma tarefa que, esperançosamente, não é muito fácil ou é uma duplicata (meio difícil de procurar coisas como essa).

Entrada:

  • Um número inteiro positivo n >= 1.

Resultado:

  • n linhas de asteriscos, em que cada nova linha possui um asterisco a mais que a linha anterior e começando com um asterisco na primeira linha.

Regras gerais:

  • Isso é código-golfe, então a resposta mais curta em bytes vence.
  • Como o curso é ministrado em C ++, estou ansioso para ver soluções em C ++.

Caso de teste (n = 5):

*
**
***
****
*****

6
Não duplicado, apenas subconjunto de Gerar um triângulo retângulo .
manatwork

2
Espaços de treinamento permitidos em cada linha?
Luis Mendo

2
Uma nova linha à direita é aceitável?
Fatalize 10/10

1
É permitida uma nova linha líder?
Riley

Não vejo uma razão para não.
Sickboy

Respostas:


41

Vim, 8 bytes

o <Esc><C-V>{r*J

Recebe entrada no buffer readahead; portanto, se a entrada for 15, digite-a e, em seguida, o código acima. Esta é uma regra tola, mas parece ser permitida . Se você tiver entrado em um registro como esse "a, basta ficar @ana frente (10). Se você o obteve no arquivo inicial, prefira D@"(11).

Depende do abuso de :set autoindent, que é o padrão nas regras do vimgolf.com e o padrão no Vim 8 (e todo mundo usa de qualquer maneira).

  • o <Esc>: Com seu argumento numérico, se o seu texto começar com espaço em branco e você o tiver :set autoindent, o Vim sairá com falhas e criará uma cascata de recuo.
  • <C-V>{r*: Transforme todos esses espaços em *s. Estou usando o bloco visual para que, mesmo que suas configurações de recuo ruim agrupem silenciosamente seus espaços em guias, você ainda obtenha o número certo de *s.
  • J: Começando com, oinfelizmente, deixou uma linha em branco no topo. Isso remove.

1
Essa resposta é incrivelmente impressionante. Uma das respostas mais legais do vim que eu já vi.
DJMcMayhem

1
Parece um peixe. Ou um foguete.
Stephan Bijzitter 12/10

1
Eu tremi um pouco e demiti o Vim -u NONEpara ver isso sozinho ... Não funcionou, parece que autoindentestá ativado no vimrc padrão , não no próprio vim 8, então tive que ativá-lo manualmente. Mas, tirando o chapéu para a ingenuidade desta resposta! Mas por que há apenas um espaço por nova linha? Por que funciona apenas com espaços, mas não com outros caracteres? Eu ainda tenho muito a aprender parece :)
Christian Rondeau

Começando com O <Esc>não exigirá Jno final.
primo

1
@udioica, uma única nova linha à direita é geralmente aceitável.
primo

23

JavaScript (ES6), 31 bytes

Este inclui uma quebra de linha principal e uma posterior.

Começamos com uma string scontendo apenas uma quebra de linha. Em seguida, processamos nchamadas recursivas, adicionando um asterisco no lado esquerdo dessa string a cada iteração. A concatenação de todas as seqüências intermediárias leva ao resultado esperado.

f=(n,s=`
`)=>n?s+f(n-1,'*'+s):s

Sem asterisco, 36 bytes

f=(n,s=`
`)=>n?s+f(n-1,atob`Kg`+s):s

Como funciona ?
Alexis_A

1
@Alexis_A - Adicionei uma breve descrição.
Arnauld 10/10

3
Boa resposta recursiva; Eu nunca teria pensado na técnica que você usa s. Você pode torná-lo um pouco menos enigmático n?s+f(n-1,'*'+s):s.
ETHproductions

19

05AB1E , 7 6 bytes

Usa a codificação CP-1252 .

'*×.p»

Versão de 8 bytes sem asterisco:

žQTè×.p»

Experimente online!

Explicação

Exemplo usando entrada n = 5

'*      # push "*"
        # STACK: "*"
  ×     # repeat input number times
        # STACK: "*****"
   .p   # get prefixes of string
        # STACK: ['*', '**', '***', '****', '*****']
     »  # join by newlines
        # implicit print

@TheBitByte 10žQSè×.p»é uma extensão lógica desta resposta para obter o que você queria para a recompensa e tem apenas 10 bytes. Dê a Emigna a recompensa se ninguém vencer 10 bytes haha.
Magic Octopus Urn

1
@carusocomputing: TžQè×.p»são 8 bytes pares.
Emigna

Ainda tentando aprender o idioma, perdeu a instrução T; pensei que era estranho que houvesse uma tonelada de empurrões da Base2, mas não a base 10. Ainda preciso vasculhar todo o conteúdo do info.txt para poder fazer qualquer coisa nesse idioma heh.
Magic Octopus Urn

@carusocomputing alguns comandos são realmente fáceis de perder, especialmente se você sabe outra maneira de fazê-lo :)
Emigna

1
@carusocomputing: Não sei ao que você está se referindo. O único comando de lista que estou usando aqui é »e esse é um comando especificamente para mesclar uma lista com delimitadores em uma string (e Sisso estragaria). Mas muitos comandos 05AB1E se vetorizam, sim.
Emigna

15

PowerShell, 21 bytes

1..$args[0]|%{'*'*$_}

Faz um loop da 1entrada $args[0], cada iteração usando a multiplicação de string para construir uma string com muitos $_asteriscos. O comportamento padrão para os implícitos Write-Outputno final é com uma nova linha para separador; portanto, obtemos isso de graça.

PS C:\Tools\Scripts\golfing> .\draw-asterisk-pattern.ps1 5
*
**
***
****
*****

PS C:\Tools\Scripts\golfing> .\draw-asterisk-pattern.ps1 2
*
**

PS C:\Tools\Scripts\golfing> .\draw-asterisk-pattern.ps1 7
*
**
***
****
*****
******
*******

13

Python 2, 37 34 bytes

i=1;exec"print'*'*i;i+=1;"*input()

Ideone

ié inicializado para 1;
em seguida, execcomandos para executar a seguinte cadeia de código, portanto, ela deve ser construída;
a cadeia é "print'*'*i;i+=1;"apenas a *seguinte: a cadeia tem precedência sobre exece instrui a repetir primeiro os input()tempos da cadeia ;
o execcomando agora executa a cadeia longa que age como um loop, printinserindo outra cadeia de comprimento crescente, usando novamente *para repetir o caractere '*'e depois incrementando icom i+=1.

Python 3, 41 bytes:
def f(n):i=1;exec("print('*'*i);i+=1;"*n) ; ou
lambda n,i=1:exec("print('*'*i);i+=1;"*n)


13

Gelatina , 6 5 bytes

”*ẋþY

TryItOnline

Quão?

”*ẋþY - Main link: n
”*    - literal string "*"
   þ  - form outer product with the dyadic function:
  ẋ   -     repeat list (right input is an implicit range(n), Jelly defaults to 1-based)
            so the outer product is like:
            [[i*'*' for i in range(1,len("*")+1)] for x in range(1,n+1)]
    Y - join with line feeds
      - implicit print

Recompensa:
Não sei ao certo qual é a cláusula no ordinals, pois um personagem é uma pesquisa de um ordinal.
Pesquisa direta seria apenas 42Ọẋþ³Ypara 7 bytes - onde o ³-nos recebe o input)
Um método um pouco indireta curto seria, por 8 bytes , “)’Ọẋþ³Y- onde pesquisar ')'na página de código de geléia, que é 1-indexados de modo “)’produz 42.


algo interessante acontece quando você usa um 0 inicial na entrada, por exemplo. tente "0414141" como uma entrada. Eu não tenho noção das línguas do golfe, então não saberia por onde começar a tentar explicar.
Lucas

Eu acho que é avaliada como uma string e, portanto, itera através dela, como uma string é iterável e, em seguida, cada caractere é avaliado como um número inteiro, pois todos são dígitos (será um erro com "oi", por exemplo)
Jonathan Allan

11

C #, 42 bytes

f=n=>n<1?"":f(n-1)+"\n"+new string('*',n);

Programa completo com caso de teste:

using System;

namespace DrawAnAsteriskPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,string>f= null;
            f=n=>n<1?"":f(n-1)+"\n"+new string('*',n);

            Console.WriteLine(f(5));
        }
    }
}

Você precisa, pois é uma função recursiva.
adrianmp

direito. Não vi isso
Cyoce 11/11


9

GNU sed , 25 24 20 + 1 (sinalizador n) = 21 bytes

Edit: 4 bytes a menos com base em Riley comentários de

x;G;:;P;s:\n.:*\n:;t

Experimente online!

Exemplo de execução: a entrada está no formato unário, que para sed é permitido com base nesse consenso

me@LCARS:/PPCG$ sed -nf draw_triangle.sed <<< "0000"

*
**
***
****

Uma nova linha principal está presente na saída, mas isso é permitido pelo OP.

Explicação:

x;G             # prepend a newline to unary string
:               # start loop
   P            # print first line only
   s:\n.:*\n:   # shift one unary char from 2nd line to 1st, converted to a '*'
t               # repeat

Se você Pexecutar a cópia antes da substituição e uma nova linha principal for permitida, não será necessário /0$/. Se uma nova linha não for permitida, você ainda poderá salvar um byte x;G;:;/*/P;s:\n.:*\n:;t. Perguntei sobre uma nova linha líder, mas ainda não recebi resposta.
Riley

8

Matlab, 26 23 bytes

Bom e velho Matlab ...

@(n)tril(repmat('*',n))

Tem espaços em branco à direita. trilfornece a matriz triangular inferior.

editar: economizou 2 bytes graças a Luis Mendo


Você está certo - graças - ainda não muito competitivo: P
mathause

8

C ++ - 92 96 bytes

#include<string>
int main(){int n;std::string s;scanf("%d",&n);for(;n--;)puts((s+="*").data());}

Experimente online

Ungolfed:

//this one hurts, but c++ strings are mutable
#include<string> 
int main(){
    int n;
    //this one hurts as well
    std::string s; 
    //read input to n
    //longer than 'std::cin>>n', but no #include<iostream> needed
    scanf("%d",&n); 
    // same as 'while(n--)', also characterwise, but way cooler
    for(;n--;) 
        //add a '*' the string
        //data() does the same as c_str()
        //puts automatically adds an '\n'
        puts((s+="*").data()); 
}

deve ser 'int main () {}' para +4 bytes.

verdade, maldito - comportamento de modo não-padrão de gcc / ideone
Anedar

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.


7

R, 45 bytes

Para abordagem de loop:

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

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.


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

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

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

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

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!


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!


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):''

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)


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; 
}

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"

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
+----------+----------+
|*         |*         |
|**        |**        |
|***       |***       |
|****      |****      |
|*****     |*****     |
|******    |******    |
|*******   |*******   |
|********  |********  |
|********* |********* |
|**********|**********|
+----------+----------+

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.


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
*
**
***

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 ).



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.


Explicação em breve? : P
FlipTack
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.