Gambarlah segitiga asterisk


57

Terinspirasi oleh tugas untuk pemrograman 101 inilah tugas yang mudah-mudahan tidak terlalu mudah atau merupakan duplikat (agak sulit untuk mencari hal-hal seperti ini).

Memasukkan:

  • Bilangan bulat positif n >= 1.

Keluaran:

  • n garis tanda bintang, di mana setiap baris baru memiliki satu tanda bintang lebih dari garis sebelumnya, dan mulai dengan satu tanda bintang di baris pertama.

Aturan umum:

  • Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang.
  • Karena kursus diajarkan dalam C ++, saya ingin sekali melihat solusi dalam C ++.

Test case (n = 5):

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

6
Tidak duplikat, cukup himpunan bagian Hasilkan segitiga siku-siku .
manatwork

2
Ruang pelatihan diizinkan di setiap baris?
Luis Mendo

2
Apakah garis trailing baru dapat diterima?
Fatalkan

1
Apakah baris baru terkemuka diizinkan?
Riley

Saya tidak melihat alasan mengapa tidak.
Sickboy

Jawaban:


41

Vim, 8 byte

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

Mengambil input dalam buffer readahead, jadi jika inputnya 15, Anda harus mengetikkannya dan kemudian kode di atas. Ini adalah aturan konyol, tapi tampaknya akan diizinkan . Jika Anda mendapat input dalam register "a, Anda hanya akan tetap @adi depan (10). Jika Anda mendapatkannya dari file awal, Anda akan membuatnya terlebih dahulu D@"(11).

Bergantung pada penyalahgunaan :set autoindent, yang merupakan default dalam aturan vimgolf.com dan default di Vim 8 (dan semua orang tetap menggunakannya).

  • o <Esc>: Dengan argumen nomornya, jika teks Anda dimulai dengan spasi putih, dan Anda memilikinya :set autoindent, Vim glitches dan menciptakan kaskade indentasi.
  • <C-V>{r*: Ubah semua ruang itu menjadi *s. Saya menggunakan blok visual sehingga, meskipun pengaturan indentasi buruk Anda secara diam-diam mengelompokkan spasi Anda ke dalam tab, Anda masih akan mendapatkan jumlah *s yang tepat.
  • J: Mulai dengan osayangnya meninggalkan garis kosong di bagian atas. Ini menghapusnya.

1
Jawaban ini sangat mengesankan. Salah satu jawaban vim paling keren yang pernah saya lihat.
DJMcMayhem

1
Itu terlihat seperti ikan. Atau roket.
Stephan Bijzitter

1
Saya bergerak sedikit dan memecat Vim -u NONEuntuk melihat ini sendiri ... Tidak berfungsi, sepertinya autoindentaktif di vimrc default , bukan vim 8 sendiri jadi saya harus mengubahnya secara manual. Tapi, topi untuk kecerdikan jawaban ini! Tetapi mengapa hanya ada satu ruang per baris baru? Mengapa hanya bekerja dengan spasi tetapi tidak dengan karakter lain? Sepertinya masih banyak yang harus saya pelajari :)
Christian Rondeau

Memulai dengan O <Esc>tidak akan membutuhkan Jdi akhir.
primo

1
@udioica, single trailing newline umumnya dianggap dapat diterima.
primo

23

JavaScript (ES6), 31 byte

Yang ini termasuk break-line terdepan dan tambahan.

Kami mulai dengan string syang hanya berisi break-line. Kemudian kami memproses npanggilan rekursif, menambahkan tanda bintang di sisi kiri string ini di setiap iterasi. Rangkaian semua string perantara mengarah ke hasil yang diharapkan.

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

Tanpa tanda bintang, 36 byte

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

Bagaimana cara kerjanya ?
Alexis_A

1
@Alexis_A - Saya telah menambahkan deskripsi singkat.
Arnauld

3
Jawaban rekursif yang bagus; Saya tidak akan pernah memikirkan teknik yang Anda gunakan s. Anda bisa membuatnya sedikit lebih samar n?s+f(n-1,'*'+s):s.
ETHproduksi

19

05AB1E , 7 6 byte

Menggunakan pengodean CP-1252 .

'*×.p»

Versi tanpa tanda bintang 8 byte:

žQTè×.p»

Cobalah online!

Penjelasan

Contoh menggunakan 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»adalah ekstensi logis dari jawaban ini untuk mendapatkan apa yang Anda inginkan untuk hadiah dan hanya 10 byte. Berikan Emigna hadiah jika tidak ada yang mengalahkan 10 byte haha.
Magic Gurita Guci

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

Masih berusaha mempelajari bahasa itu, ketinggalan instruksi T; pikir itu aneh bahwa ada banyak dorongan Base2 tetapi tidak ada basis 10. Saya masih harus menjelajahi seluruh isi info.txt untuk dapat melakukan apa saja dalam bahasa itu heh.
Magic Gurita Guci

@caruscomputing beberapa perintah sangat mudah untuk dilewatkan, terutama jika Anda tahu cara lain untuk melakukannya :)
Emigna

1
@carusocomputing: Tidak yakin apa yang Anda maksud. Satu-satunya perintah list yang saya gunakan di sini adalah »dan itu adalah perintah yang khusus untuk menggabungkan daftar dengan pembatas menjadi string (dan Sakan merusaknya). Tapi banyak perintah 05AB1E yang melakukan vectorize, ya.
Emigna

15

PowerShell, 21 byte

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

Loop dari 1input $args[0], setiap iterasi menggunakan perkalian string untuk membangun string yang banyak $_tanda bintang. Perilaku default untuk implisit Write-Outputpada akhirnya adalah dengan baris baru untuk pemisah, jadi kami mendapatkannya secara gratis.

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

idiinisialisasi ke 1;
kemudian execperintah untuk mengeksekusi string kode berikut, sehingga harus dibangun;
string adalah "print'*'*i;i+=1;"tetapi *berikut string akan didahulukan atas execdan menginstruksikan untuk pertama ulangi string input()kali;
yang execperintah sekarang mengeksekusi string panjang yang bertindak seperti lingkaran, printing string lain dari meningkatnya panjang, lagi menggunakan *untuk mengulang karakter '*', kemudian incrementing idengan i+=1.

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


13

Jelly , 6 5 byte

”*ẋþY

TryItOnline

Bagaimana?

”*ẋþ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:
Saya tidak yakin apa klausa no ordinal itu, karena karakter adalah pencarian dari ordinal.
Pencarian langsung hanya akan 42Ọẋþ³Yuntuk 7 byte - di mana ³mendapatkan kita input)
Metode pendek sedikit tidak langsung akan, untuk 8 byte , “)’Ọẋþ³Y- di mana kita mencari ')'di halaman kode jelly, yang 1-diindeks sehingga “)’menghasilkan 42.


sesuatu yang menarik terjadi ketika Anda menggunakan 0 dalam input, misalnya. coba "0414141" sebagai input. Saya tidak mengerti bahasa golf sehingga saya tidak tahu harus mulai dari mana untuk menjelaskannya.
Lukas

Saya pikir itu dievaluasi sebagai string dan karenanya beralih melintasi itu sebagai string adalah iterable dan kemudian setiap karakter dievaluasi menjadi integer karena mereka semua digit (itu akan kesalahan dengan "hi" misalnya)
Jonathan Allan

11

C #, 42 byte

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

Program lengkap dengan 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));
        }
    }
}

Anda memerlukannya karena ini adalah fungsi rekursif.
adrianmp

Baik. Tidak melihat itu
Cyoce

10

Pyth , 6 byte

j._*"*

Coba di sini .

Penjelasan

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

3
Jawaban Pyth pertama saya
Luis Mendo

9

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

Sunting: 4 byte lebih sedikit berdasarkan komentar Riley

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

Cobalah online!

Jalankan contoh: input dalam format unary, yang untuk sed diizinkan berdasarkan konsensus ini

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

*
**
***
****

Baris baru terkemuka hadir dalam output, tetapi ini diizinkan oleh OP.

Penjelasan:

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

Jika Anda Pmembatalkan sebelum substitusi dan baris baru terkemuka diizinkan, Anda tidak perlu /0$/. Jika baris baru tidak diizinkan, Anda masih dapat menyimpan byte x;G;:;/*/P;s:\n.:*\n:;t. Saya bertanya tentang baris baru terkemuka, tetapi belum mendengar kabar.
Riley

8

Matlab, 26 23 byte

Matlab tua yang baik ...

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

Memiliki spasi spasi tambahan. trilmemberi Anda matriks segitiga bawah.

sunting: disimpan 2 bythes terima kasih kepada Luis Mendo


Anda benar - terima kasih - masih belum terlalu kompetitif: P
mathause

8

C ++ - 92 96 Bytes

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

Cobalah online

Tidak Disatukan:

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

harus 'int main () {}' untuk +4 byte.

benar, sial - perilaku yang tidak standar gcc / ideone
Anedar

7

Ubur-ubur , 12 11 9 byte

\P$'*
  i

Cobalah online!

Penjelasan

Program di atas setara dengan pseudocode fungsional berikut:

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

The $(membentuk kembali) menciptakan string Ntanda bintang. \Pmembuat fungsi yang mengambil daftar (atau string) dan melewati masing-masing awalannya ke P(cetak). Karenanya, ini berturut-turut mencetak string 1ke Ntanda bintang.


7

R, 45 byte

Untuk pendekatan loop:

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

6

Brachylog , 12 byte

yke:"*"rj@w\

Cobalah online!

Ini mengasumsikan bahwa garis baru yang tertinggal dapat diterima

Penjelasan

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

Tidak ada garis baru, 15 byte

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

Cobalah online!

Ini bekerja dengan mengambil semua awalan "*" × Input.


6

Haskell, 35 38 byte

Daftar pemahaman berkat nimi:

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

Versi lama:

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

Versi alternatif:

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

Anda dapat menggunakan ([1..n]>>"*")alih-alih replicate n'*'menyimpan byte. Saya juga hanya menghitung 39 byte.
Laikoni

Versi alternatif yang bagus! Namun saya pikir jumlah byte masih dengan satu dan harus 38. (Lihat misalnya di sini ) Masalahnya mungkin baris baru yang kemudian f 0=""dihitung sebagai satu byte, tetapi ditampilkan sebagai dua byte / karakter dalam beberapa editor teks.
Laikoni

Terima kasih! Saya melihat sekarang bahwa saya awalnya menambahkan baris baru ketika saya menghitung karakter. Tidak akan membuat kesalahan itu lagi!
Craig Roy

2
Anda dapat beralih ke daftar pemahaman: f x=unlines[[1..n]>>"*"|n<-[1..x]].
nimi

6

Pyth, 7 Bytes

VQ*\*hN

Merobohkan byte berkat @ETHproduk Coba online

menggunakan Teknik @ PIetu1998

6, byte

j*L*\*S

Jawaban bagus! Anda bisa menggantinya "*"dengan \*.
ETHproduk

@ ETHproductions Saya tidak pernah tahu tentang itu, terima kasih!
Dignissimus - Spammy

Anda dapat menghapus byte lain dengan peta. j*L\*S(termasuk Srentang, gandakan masing-masing *Ldengan "*" \*, join dengan baris baru) Pyth menyisipkan Q implisit pada akhirnya.
PurkkaKoodari

jm*\*hjuga 6 byte.
hakr14

6

2sable , 24 11 byte

>G')Ç>çJN×,

Cobalah online!

Dan tidak ada tanda-tanda bintang! Bermain golf mulai 24 hingga 11 berkat @Emigna .

Penjelasan:

>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
Beberapa tips. õVYItidak memengaruhi kode Anda dengan cara apa pun dan dapat dihapus. 1+sama dengan >. Jika Anda membuat tanda bintang di loop, Anda juga dapat menghapus UX. Menggunakan ×alih-alih lingkaran dalam menyimpan lebih banyak byte. Tanpa mengubah metode Anda bisa mendapatkan ini hingga 11 byte atau kurang.
Emigna

1
Bagus! Saya akan segera mengedit
Geno Racklin Asher

Bisakah Anda menambahkan penjelasan?
Buffer Over Read

Kode yang luar biasa, selamat atas hadiahnya! Bot komunitas tampaknya hanya memberi penghargaan 25 dan bukan yang asli 50 saya pikir karena saya lupa memberi hadiah sebelum batas waktu, maaf untuk itu.
Buffer Over Baca

1
Jangan khawatir tentang itu. Hanya senang mencapai tanda 100-rep. @TheBitByte
Geno Racklin Asher

6

Brain-Flak 75 Bytes

Termasuk +3 untuk -A

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

Cobalah online!


Penjelasan:

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

ini termasuk output byte nol? Saya tidak berpikir itu diperbolehkan ...
Destructible Lemon

Tidak, maksudku byte nol
Destructible Lemon

@DestructibleWatermelon Ya, saya rasa tidak. Mudah diperbaiki. Terima kasih.
Riley

6

Dyalog APL , 8 byte

'*'⍴⍨¨⍳

matrify daftar yang terdiri dari

'*' string "*"

⍴⍨ dibentuk kembali oleh

¨ setiap

bilangan bulat 1 melalui argumen.

TryAPL online!


Sepertinya 8 byte bagi saya.
Erik the Outgolfer

1
jika bisa satu byte:(,⍕⊢)⌸⍳
ngn

@ Ngn Itu sangat pintar! Posting itu sebagai milikmu. Anda memang dapat menghitungnya sebagai byte tunggal yang Anda tulis 7 bytes<sup>SBCS</sup>.
Adám

5

V , 8 byte

Àé*hòlÄx

Cobalah online!


Oh ya Àé hòlÄ!
Jonathan Allan

2
@ JonathanAllan Hei, setidaknya ini lebih mudah dibaca daripada Jelly. (Untuk saya);)
DJMcMayhem

Halaman kode Jelly, menurut saya cukup baik. Lihatlah halaman Atom wiki yang dibuat oleh Lynn baru-baru ini.
Jonathan Allan

3
@ Jonathan Allan Ya, saya akan percaya. Ini mungkin tidak terlihat seperti itu, tetapi mnemonik V terorganisir dengan baik karena tombol yang Anda gunakan untuk mengetikkannya di vim. Jadi solusi saya dalam istilah vim-key adalah <M-@><M-i>*h<M-r>l<M-D>x(m singkatan dari meta, yang berarti alt). Semua itu adalah mnemonik yang cukup bagus untuk apa yang dilakukan perintah.
DJMcMayhem

5

JavaScript (ES6), 34 byte

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

5

Perl 6 , 23 byte

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

(Jika output dibolehkan menjadi daftar "baris" tanpa baris baru .put for dapat dihapus)

Penjelasan:

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

(Lihat dokumentasi untuk producejika Anda tidak mengerti apa yang [\~] ...sedang dilakukan)


5

Perl 5, 22 20 byte

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

Jalankan dengan -Esaklar untuk mendapatkan say.

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

Ditulis sebagai program lengkap akan terlihat seperti ini:

use strict;
use feature 'say';

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

foreach my $i (1 .. $limit) { 
    say "*" x $i; 
}

Tidak yakin apakah saya perlu byte tambahan untuk saklar baris perintah.
simbabque

Saya percaya -Eflag dihitung sebagai 1 byte tambahan.
ETHproduk

Bagaimana dengan mengambil nomor sebagai input dan bukan parameter? perl -E 'say"*"x$_ for 1..<>' <<< 5
manatwork

@manatwork ya itu akan berhasil. Saya tidak pandai menghitung. Tidak yakin apakah itu diizinkan.
simbabque

1
-Egratis (karena menggantikan -eyang akan tetap diperlukan). Jika Anda benar-benar ingin mengambil nomor dari baris perintah (mengapa tidak, walaupun <>1 byte lebih pendek, dan diizinkan), Anda harus menggunakan popalih-alih shift(2 byte lebih pendek)! Bagaimanapun, selamat datang di PPCG, senang melihat Anda bermain golf!
Dada

5

Perl, 19 byte

-4 Bytes berkat @Ton Hospel dan pengerjaan ulang solusinya!

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

Membutuhkan flag -E(atau -M5.010) gratis untuk dijalankan. Mengambil angka dari input:

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

1
Anda dapat membuat evalpanjang yang sama dengan forsolusinya (menggunakan <>bukan pop) denganeval"s//*/;say;"x<>
Ton Hospel

@TonHospel Ineed, bagus! Terima kasih!
Dada

5

J, 11 8 byte

Disimpan 3 byte berkat mil!

]\@#&'*'

Berikut ini adalah dekomposisi:

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

Sekarang, yang terakhir ini dibaca sebagai "awalan ( ]\) dari string yang terdiri dari xsalinan '*'". Mengamati:

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

Kasus cobaan

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

Solusi 11 byte yang lebih lama

'*'#~"+1+i.

Ini setara

'*' #~"0 1 + i.

1 + i.adalah kisaran [1, x]. Lalu, '*' #~"0diterapkan ke rentang ini bentuk (elemen) salinan '*'.

Program bonus:

[:#&'*'\#&1

Ini adalah garpu tertutup yang #&'*'\diterapkan pada hasil #&1input. #&1memberikan array xyang, dan #&'*'\bentuk '*'ke awalan array ini.

Uji kasus

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

Anda juga bisa mendapatkan awalan dari string nsalinan '*'untuk 8 byte menggunakan]\@#&'*'
mil

@miles: dan versi 9 byte lainnya:'*'"0\@i.
Jonah

5

Vim, 22 , 18 penekanan tombol

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

Penghargaan besar bagi @Udioica karena memberikan jawaban vim yang luar biasa yang saya kembangkan. Jawaban ini tidak mengandung tanda bintang, dengan harapan memenangkan hadiah.

Penjelasan:

Input diketik sebelum sisa program. Udioica datang dengan trik yang luar biasa ini. Mengetik <n>O <esc>akan membuat piramida ruang dan satu baris kosong, selama Anda telah :set autoindentmengaktifkannya. Opsi ini aktif secara default di vim 8 dan neovim, meskipun bukan versi vim yang lebih lama. Karena ini juga membuat garis tambahan, kami gunakan Juntuk bergabung dengan baris ini dengan yang berikutnya, yang secara efektif hanya menghapus garis di bawah kami.

Sekarang pada titik ini, kita perlu mengganti semua ruang ini dengan tanda bintang. Jika saya tidak khawatir tentang menggunakan tanda bintang dalam kode saya, saya hanya akan memilih semuanya secara visual <C-v>{dan mengetik r*, yang menggantikan setiap karakter pilihan dengan tanda bintang. Tetapi saya tidak bisa melakukan itu.

Jadi kami membuka halaman bantuan untuk :h r. Hal yang menarik tentang ini adalah bahwa di vim-window, halaman ini ditampilkan sebagai:

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

Dengan kursor di 'r' pertama. Namun, file itu sendiri sebenarnya mengandung teks ini:

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

Cukup nyaman. Jadi kita memindahkan satu karakter dengan l, dan menarik teks r*dengan yE([y] ank ke [E] dan kata ini).

Untuk menutup buffer ini, kami menggunakan pintasan untuk menyimpan file ZZ. Sekarang, kami secara visual memilih spasi kami, dan menjalankan teks yang ditarik ke atas seolah-olah kami telah mengetiknya dengan melakukan @". Ini berfungsi karena "@" menjalankan register berikut sebagai vim-keystrokes, dan "adalah register default untuk mencabut.


Mau jelaskan cara kerjanya?
corvus_192

@ corvus_192 Saya telah menambahkan penjelasan yang lebih luas, serta bermain golf lagi.
DJMcMayhem

Bukankah ukuran file data harus ditambahkan ke jumlah byte?
aross

@ Aross ukuran file bantuan? Tidak, karena file ini diinstal bersama vim, dan merupakan fitur default.
DJMcMayhem

5

C, 47 46 45 43 byte

Mengambil input dari baris perintah

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

Pada dasarnya jika n bukan 0 recurse pada n-1. di atas rekursi di mana n adalah 0 itu hanya mencetak baris baru, untuk loop berakhir ketika n adalah -1 atau ~ n adalah nol, jika tidak mencetak ASCII 42 yang merupakan '*'. Cobalah di ideone

C ++ 58 Bytes + 19 untuk termasuk iostream adalah 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
*
**
***

Bagi saya sepertinya bekerja dengan &&: n?f(n-1):0n&&f(n-1).
manatwork

@manatwork Terima kasih bud. menyimpan byte lain
cleblanc

Dalam ideone cetakan 2 segitiga menunjukkan di akhir ada satu '\ n' lebih: * ** *** * ** *** **** ***** Saya katakan kasing 0 ujung kasing revursion, cetak satu lagi
RosLuP

@RosLup Ya itu mencetak baris baru yang memimpin dan tertinggal. Saya pikir OP mengatakan tidak apa-apa dalam komentarnya.
cleblanc

4

Retina , 14 byte

Hitungan byte mengasumsikan penyandian ISO 8859-1.

.+
$**
.
$`$&¶

Cobalah online!

Penjelasan

.+
$**

Ubah input Nmenjadi Ntanda bintang.

.
$`$&¶

Ganti setiap tanda bintang dengan semuanya hingga dan termasuk tanda bintang itu (ini adalah $`$&) dan linefeed (ini yang ).



4

Cubix , 22 byte

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

Uji secara online! Menghasilkan baris baru yang tertinggal.

Pada awalnya saya tidak yakin saya bisa memasukkan ini ke dalam 2-kubus, tetapi pada akhirnya itu berhasil:

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

Saya akan menambahkan penjelasan ketika saya punya waktu, semoga hari ini nanti.


Penjelasan dalam waktu dekat? : P
FlipTack
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.