Disegna un triangolo asterisco


57

Ispirato da un'attività per la programmazione 101, ecco un'attività che si spera non sia troppo facile o che sia un duplicato (è un po 'difficile cercare cose come questa).

Ingresso:

  • Un numero intero positivo n >= 1.

Produzione:

  • n linee di asterischi, in cui ogni nuova riga ha un asterisco in più rispetto alla riga precedente e inizia con un asterisco nella prima riga.

Regole generali:

  • Questo è code-golf, quindi vince la risposta più breve in byte.
  • Poiché il corso è tenuto in C ++, non vedo l'ora di vedere soluzioni in C ++.

Caso di prova (n = 5):

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

6
Non duplicato, solo un sottoinsieme di Genera un triangolo rettangolo .
arte

2
Spazi di formazione ammessi su ogni linea?
Luis Mendo,

2
È accettabile una nuova riga finale?
Fatalizza il

1
È consentita una newline leader?
Riley,

Non vedo un motivo per cui no.
Sickboy,

Risposte:


41

Vim, 8 byte

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

Accetta l'input nel buffer readahead, quindi se l'input è 15, dovresti digitare quello e quindi il codice sopra. Questa è una regola sciocca, ma sembra essere consentita . Se hai inserito un registro come "a, ti limiteresti a rimanere @ain primo piano (10). Se lo avessi ottenuto dal file di avvio, avresti D@"invece anteposto (11).

Si basa sull'abuso di :set autoindent, che è predefinito nelle regole di vimgolf.com e predefinito in Vim 8 (e tutti lo usano comunque).

  • o <Esc>: Con il suo argomento numerico, se il tuo testo inizia con uno spazio bianco e lo hai :set autoindent, Vim si blocca e crea una cascata di rientri.
  • <C-V>{r*: Trasforma tutti quegli spazi in *s. Sto usando il blocco visivo in modo che, anche se le impostazioni del rientro scadente raggruppano silenziosamente i tuoi spazi in schede, otterrai comunque il giusto numero di *s.
  • J: A partire da opurtroppo ha lasciato una riga vuota in alto. Questo lo rimuove.

1
Questa risposta è follemente impressionante. Una delle migliori risposte vim che abbia mai visto.
DJMcMayhem

1
Sembra un pesce. O un razzo.
Stephan Bijzitter,

1
Mi sono scosso un po 'e ho licenziato Vim -u NONEper vederlo da solo ... Non ha funzionato, sembra che sia attivo autoindentnel vimrc predefinito , non vim 8 stesso, quindi ho dovuto accenderlo manualmente. Ma, cappello per l'ingegnosità di questa risposta! Ma perché c'è un solo spazio per nuova linea? Perché funziona solo con gli spazi ma non con altri personaggi? Ho ancora molto da imparare, sembra :)
Christian Rondeau,

Iniziare con O <Esc>non richiederà Jalla fine.
primo

1
@udioica è generalmente considerata accettabile una singola riga finale.
primo

23

JavaScript (ES6), 31 byte

Questo include un'interruzione di linea sia iniziale che finale.

Iniziamo con una stringa scontenente solo un'interruzione di riga. Quindi nelaboriamo le chiamate ricorsive, aggiungendo un asterisco sul lato sinistro di questa stringa ad ogni iterazione. La concatenazione di tutte le stringhe intermedie porta al risultato atteso.

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

Senza asterisco, 36 byte

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

Come funziona ?
Alexis_A

1
@Alexis_A - Ho aggiunto una breve descrizione.
Arnauld,

3
Bella risposta ricorsiva; Non avrei mai pensato alla tecnica che usi s. Puoi renderlo leggermente meno enigmatico con n?s+f(n-1,'*'+s):s.
ETHproductions

19

05AB1E , 7 6 byte

Utilizza la codifica CP-1252 .

'*×.p»

Versione senza asterisco a 8 byte:

žQTè×.p»

Provalo online!

Spiegazione

Esempio di input n = 5

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

@TheBitByte 10žQSè×.p»è un'estensione logica di questa risposta per ottenere ciò che volevi per la generosità ed è di soli 10 byte. Dai a Emigna la taglia se nessuno batte 10 byte ahah.
Magic Octopus Urn,

1
@carusocomputing: anche TžQè×.p»8 byte.
Emigna,

Sto ancora cercando di imparare la lingua, ho perso l'istruzione T; ho pensato che fosse strano che ci fossero un sacco di spinte Base2 ma nessuna base 10. Devo ancora frugare l'intero contenuto di info.txt per poter fare qualsiasi cosa in quella lingua eh.
Magic Octopus Urn,

@carusocomputing alcuni comandi sono davvero facili da perdere, specialmente se conosci un altro modo per farlo :)
Emigna,

1
@carusocomputing: non sono sicuro di cosa ti riferisci. L'unico comando elenco che sto usando qui è »e questo è un comando specifico per unire un elenco con delimitatori in una stringa (e Srovinarlo). Ma molti comandi 05AB1E vengono vettorializzati, sì.
Emigna,

15

PowerShell, 21 byte

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

Passa da un 1input $args[0]all'altro, ogni iterazione utilizza la moltiplicazione di stringhe per costruire una stringa di tanti $_asterischi. Il comportamento predefinito per l'implicito Write-Outputalla fine è con una nuova riga per il separatore, quindi lo otteniamo gratuitamente.

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 byte

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

Ideone

iè inizializzato a 1;
quindi execcomanda di eseguire la seguente stringa di codice, quindi deve essere costruita;
la stringa è "print'*'*i;i+=1;"la *seguente ma la stringa ha la precedenza su exece indica di ripetere prima i input()tempi della stringa ;
il execcomando ora esegue la stringa lunga che agisce come un ciclo, printinserendo un'altra stringa di lunghezza crescente, usando nuovamente *per ripetere il carattere '*', quindi incrementando icon i+=1.

Pitone 3, 41 byte:
def f(n):i=1;exec("print('*'*i);i+=1;"*n) ; o
lambda n,i=1:exec("print('*'*i);i+=1;"*n)


13

Gelatina , 6 5 byte

”*ẋþY

TryItOnline

Come?

”*ẋþ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

Bounty:
Non sono sicuro di quale sia la clausola no ordinals, dal momento che un personaggio è una ricerca di un ordinale.
La ricerca diretta sarebbe solo 42Ọẋþ³Yper 7 byte - dove ³ci arriva l'input)
Un metodo breve e leggermente indiretto sarebbe, per 8 byte , “)’Ọẋþ³Y- dove cerchiamo ')'nella tabella codici di jelly, che è 1-indicizzata, quindi “)’produce 42.


succede qualcosa di interessante quando si usa uno 0 iniziale nell'input, ad es. prova "0414141" come input. Non ho idea delle lingue del golf, quindi non saprei da dove cominciare cercando di spiegarlo.
Luca,

Penso che sia valutato come una stringa e quindi scorre attraverso di essa come una stringa è un iterabile e quindi ogni carattere viene valutato come un numero intero dato che sono tutte cifre (ad esempio, si verificherà un errore con "ciao")
Jonathan Allan,

11

C #, 42 byte

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

Programma completo con test case:

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

Ne hai bisogno poiché è una funzione ricorsiva.
Adrianmp,

giusto. Non l'ho visto
Cyoce l'

10

Pyth , 6 byte

j._*"*

Provalo qui .

Spiegazione

j            Join by newlines
 ._          all prefixes of
    *        the result of repeating
      "*     the string "*"
             as many times as the implicit input 

3
La mia prima risposta Pyth
Luis Mendo,

9

GNU sed , 25 24 20 + 1 (n flag) = 21 byte

Modifica: 4 byte in meno sulla base dei commenti di Riley

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

Provalo online!

Esempio di esecuzione: l'input è in formato unario, che per sed è consentito in base a questo consenso

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

*
**
***
****

Nell'output è presente una nuova riga principale, ma ciò è consentito dall'OP.

Spiegazione:

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 si Pcorre prima della sostituzione e è consentita una nuova riga iniziale non è necessario /0$/. Se una nuova riga non è consentita, puoi comunque salvare un byte con x;G;:;/*/P;s:\n.:*\n:;t. Ho chiesto informazioni su una newline leader, ma non ho ancora ricevuto risposta.
Riley,

8

Matlab, 26 23 byte

Buon vecchio Matlab ...

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

Ha spazi bianchi finali. trilti dà la matrice triangolare inferiore.

modifica: salvato 2 bythes grazie a Luis Mendo


Hai ragione - grazie - ancora non molto competitivo: P
mathause l'

8

C ++ - 92 96 byte

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

Provalo 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()); 
}

dovrebbe essere 'int main () {}' per +4 byte.

vero, dannazione - comportamento così non standard di gcc / ideone
Anedar

7

Meduse , 12 11 9 byte

\P$'*
  i

Provalo online!

Spiegazione

Il programma sopra è equivalente al seguente pseudocodice funzionale:

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

L' $(Reshape) crea una serie di Nasterischi. \Pcrea una funzione che accetta un elenco (o una stringa) e passa ciascuno dei suoi prefissi a P(stampa). Quindi, questo stampa successivamente stringhe di 1a Nasterischi.


7

R, 45 byte

Per l'approccio ad anello:

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

6

Brachylog , 12 byte

yke:"*"rj@w\

Provalo online!

Ciò presuppone che una nuova riga finale sia accettabile

Spiegazione

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

Nessuna nuova riga finale, 15 byte

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

Provalo online!

Questo funziona prendendo tutti i prefissi di "*" × Input.


6

Haskell, 35 38 byte

Comprendi la lista grazie a nimi:

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

Vecchia versione:

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

Versione alternativa:

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

È possibile utilizzare ([1..n]>>"*")invece di replicate n'*'salvare un byte. Conto anche solo 39 byte.
Laikoni,

Bella versione alternativa! Tuttavia, penso che il conteggio dei byte sia ancora pari a uno e dovrebbe essere 38. (Vedi ad esempio qui ) Il problema potrebbe essere la nuova riga dopo la f 0=""quale viene conteggiato come un byte, ma mostrato come due byte / caratteri in alcuni editor di testo.
Laikoni,

Grazie! Vedo ora che inizialmente stavo aggiungendo una nuova riga finale quando stavo contando i personaggi. Non commettere più questo errore!
Craig Roy,

2
È possibile passare a una lista di comprensione: f x=unlines[[1..n]>>"*"|n<-[1..x]].
nimi,

6

Pyth, 7 byte

VQ*\*hN

Cancellato un byte grazie a @ETHproductions Provalo online

usando la tecnica di @ PIetu1998

6 byte

j*L*\*S

Bella risposta! È possibile sostituire "*"con \*.
ETHproductions

@ETHproductions Non l'ho mai saputo, grazie!
Dignissimus - Spammy,

Puoi rimuovere un altro byte con una mappa. j*L\*S(inclu Sive range, moltiplica ciascuno *Lper "*" \*, join per newline) Pyth inserisce una Q implicita alla fine.
PurkkaKoodari,

jm*\*hè anche 6 byte.
hakr14

6

2 file , 24 11 byte

>G')Ç>çJN×,

Provalo online!

E nessun segno di asterischi! Giocato a golf dalle 24 alle 11 grazie a @Emigna .

Spiegazione:

>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
Alcuni consigli õVYInon influisce in alcun modo sul codice e può essere rimosso. 1+è lo stesso di >. Se crei l'asterisco nel loop puoi anche rimuoverlo UX. L'uso al ×posto del ciclo interno consente di risparmiare ancora più byte. Senza cambiare metodo è possibile ottenere questo fino a 11 byte o meno.
Emigna,

1
Bello! Lo modificherò presto
Geno Racklin Asher,

Potresti aggiungere una spiegazione?
Buffer Over Leggi il

Codice meraviglioso, congratulazioni per ottenere la taglia! Il bot della comunità sembra aver assegnato solo 25 e non i 50 originali, perché mi sono dimenticato di assegnare la taglia prima della scadenza, mi dispiace per quello.
Buffer Over Leggi il

1
Non ti preoccupare. Sono contento di aver raggiunto il punteggio di 100 rep. @TheBitByte
Geno Racklin Asher,

6

Brain-Flak 75 byte

Include +3 per -A

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

Provalo online!


Spiegazione:

{(({})[()]<                                                        >)}
#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

questo include un byte nullo nell'output? Non credo sia permesso ...
Limone distruttibile

No, intendo un byte nullo
Destructible Lemon

@DestructibleWatermelon Sì, credo. Facile soluzione però. Grazie.
Riley,

6

Dyalog APL , 8 byte

'*'⍴⍨¨⍳

maturare l'elenco composto da

'*' la stringa "*"

⍴⍨ rimodellato da

¨ ciascuno di

gli interi 1 tramite l'argomento.

ProvaAPL online!


A me sembrano 8 byte.
Erik the Outgolfer,

1
se può essere un singolo byte:(,⍕⊢)⌸⍳
ngn

@ngn Questo è molto intelligente! Pubblicalo come tuo. Puoi davvero contarlo come un singolo byte che scrivi 7 bytes<sup>SBCS</sup>.
Adám,

5

V , 8 byte

Àé*hòlÄx

Provalo online!


Oh si Àé hòlÄ!
Jonathan Allan,

2
@JonathanAllan Ehi, almeno è più leggibile di Jelly. (Per me);)
DJMcMayhem

La code page di Jelly è, penso che sia abbastanza ben organizzata. Dai un'occhiata alla revisione generale della pagina Atomi del wiki fatta di recente da Lynn.
Jonathan Allan,

3
@JonathanAllan Sì, ci credo. Potrebbe non sembrare, ma i mnemonici di V sono ben organizzati a causa dei tasti che usi per digitarli in VIM. Quindi la mia soluzione nel gergo chiave di vim è <M-@><M-i>*h<M-r>l<M-D>x(m sta per meta, che significa alt). Tutti questi sono abbastanza buoni mnemonici per quello che fa il comando.
DJMcMayhem

5

JavaScript (ES6), 34 byte

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

5

Perl 6 , 23 byte

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

(Se l'output può essere un elenco di "righe" senza le nuove righe .put for può essere rimosso)

Spiegazione:

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

(Vedi la documentazione per producese non capisci cosa [\~] ...sta facendo)


5

Perl 5, 22 20 byte

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

Eseguilo con l' -Einterruttore per ottenere say.

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

Scritto come un programma completo sarebbe simile al seguente:

use strict;
use feature 'say';

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

foreach my $i (1 .. $limit) { 
    say "*" x $i; 
}
  • shifte poplavorare implicitamente su @ARGV(l'elenco degli argomenti) al di fuori dei sottotitoli
  • ..è l' operatore di gamma
  • say include una nuova riga
  • xè un operatore per ripetere le stringhe ed è spiegato in perlop

Non sono sicuro se ho bisogno di byte extra per l'opzione della riga di comando.
simbabque,

Credo che la -Ebandiera valga come 1 byte extra.
ETHproductions

Che ne dici di prendere il numero come input anziché come parametro? perl -E 'say"*"x$_ for 1..<>' <<< 5
arte

@manatwork sì, funzionerebbe. Non sono bravo a contare però. Non sono sicuro che sia permesso.
simbabque,

1
-Eè gratuito (in quanto sostituisce ciò -eche sarebbe necessario comunque). Se vuoi davvero prendere il numero dalla riga di comando (perché no, anche se <>è 1 byte più corto e consentito), dovresti usare popinvece di shift(2 byte più corto)! Comunque, benvenuto su PPCG, felice di vederti giocare a golf!
Dada,

5

Perl, 19 byte

-4 byte grazie a @Ton Hospel e alla sua rielaborazione della soluzione!

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

Ha bisogno di bandiera libera -E(o -M5.010) per funzionare. Prende un numero dall'input:

perl -E 'eval"s//*/;say;"x<>' <<< "5"

1
Puoi fare evalla stessa lunghezza della forsoluzione (usando <>invece di pop) coneval"s//*/;say;"x<>
Ton Hospel il

@TonHospel Ineed, bello! Grazie!
Dada,

5

J, 11 8 byte

Salvato 3 byte grazie alle miglia!

]\@#&'*'

Ecco una decomposizione:

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

Ora, quest'ultimo si legge come "i prefissi ( ]\) della stringa costituita da xcopie di '*'". Osservare:

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

Caso di prova

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

Soluzioni precedenti a 11 byte

'*'#~"+1+i.

Questo è equivalente

'*' #~"0 1 + i.

1 + i.è la gamma [1, x]. Quindi, '*' #~"0applicato a questa gamma forme (elementi) copie di '*'.

Programma bonus:

[:#&'*'\#&1

Questa è una forcella chiusa #&'*'\applicata al risultato #&1dell'input. #&1fornisce un array di xquelli e #&'*'\forme '*'ai prefissi di questo array.

Casi test

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

È inoltre possibile ottenere i prefissi della stringa di ncopie di '*'per 8 byte utilizzando]\@#&'*'
miglia

@miles: e un'altra versione da 9 byte:'*'"0\@i.
Giona

5

Tasti Vim, 22 , 18

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

Enorme merito a @Udioica per aver trovato una fantastica risposta vim che ho ampliato. Questa risposta non contiene alcun asterisco, nella speranza di vincere la taglia.

Spiegazione:

L'input viene digitato prima del resto del programma. Udioica ha inventato questo fantastico trucco. La digitazione <n>O <esc>creerà una piramide di spazi e una riga vuota, purché tu abbia :set autoindentabilitato. Questa opzione è attiva di default in vim 8 e neovim, sebbene non nelle versioni precedenti di vim. Dal momento che questo crea anche una linea aggiuntiva, usiamo Jper unire questa linea con quella successiva, che effettivamente rimuove la linea sotto di noi.

Ora a questo punto, dobbiamo sostituire tutti questi spazi con asterischi. Se non fossi preoccupato di usare gli asterischi nel mio codice, selezionerei visivamente l'intera cosa <C-v>{e il tipo r*, che sostituisce ogni carattere della selezione con un asterisco. Ma non posso farlo.

Quindi apriamo le pagine di aiuto per :h r. La cosa interessante di questo è che nella finestra di vim, questa pagina viene visualizzata come:

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

Con il cursore sulla prima 'r'. Tuttavia, il file stesso contiene effettivamente questo testo:

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

Abbastanza conveniente. Quindi spostiamo su un carattere con le strappiamo il testo r*con yE([y] ank alla [E] nd di questa parola).

Per chiudere questo buffer, utilizziamo il collegamento per salvare un file ZZ. Ora, selezioniamo visivamente i nostri spazi ed eseguiamo il testo strappato come se lo avessimo digitato facendo @". Questo funziona perché "@" esegue il seguente registro come tasti di scelta rapida e "è il registro predefinito per lo strappo.


Ti interessa spiegare come funziona?
corvus_192,

@ corvus_192 Ho aggiunto una spiegazione più ampia, oltre a giocare a golf un po 'di più.
DJMcMayhem

La dimensione del file di dati non dovrebbe essere aggiunta al conteggio dei byte?
circa il

@aross la dimensione del file di aiuto? No, perché questo file è installato insieme a vim ed è una funzione predefinita.
DJMcMayhem

5

C, 47 46 45 43 byte

Riceve input dalla riga di comando

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

Fondamentalmente se n non è 0 ricorrere a n-1. nella parte superiore della ricorsione dove n è 0 stampa solo una nuova riga, il ciclo for termina quando n è -1 o ~ n è zero, altrimenti stampa ASCII 42 che è '*'. Provalo su ideone

C ++ 58 byte + 19 per includere 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
*
**
***

A me sembra funzionare con &&: n?f(n-1):0n&&f(n-1).
arte

@manatwork Grazie amico. salvando un altro byte
cleblanc l'

In ideone la stampa di 2 triangoli mostra alla fine ce n'è uno '\ n' in più: * ** *** * ** *** **** ***** Dico il caso 0 la fine del caso di revursion, stampa ancora uno \ n
RosLuP

@RosLup Sì, sta stampando una nuova riga iniziale e finale. Penso che l'OP abbia detto che era OK nei suoi commenti.
Cleblanc,

4

Retina , 14 byte

Il conteggio dei byte presuppone la codifica ISO 8859-1.

.+
$**
.
$`$&¶

Provalo online!

Spiegazione

.+
$**

Trasforma l'input Nin Nasterischi.

.
$`$&¶

Sostituisci ogni asterisco con tutto fino a incluso l'asterisco (questo è il $`$&) e un avanzamento riga (questo il ).



4

Cubix , 22 byte

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

Provalo online! Emette una nuova riga finale.

All'inizio non ero sicuro di riuscire a farlo stare su un cubo 2, ma alla fine ha funzionato bene:

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

Aggiungerò una spiegazione quando avrò tempo, si spera più tardi oggi.


Spiegazione presto? : P
FlipTack,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.