Gambar ASCII X besar

20

Masalah

Terinspirasi oleh tantangan sebelumnya melakukan hal serupa

Diberikan noutput input integer positif bentuk yang mengikuti pola ini:

masukan n=1:

* *
 *
* *

masukan n=2:

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

masukan n=3:

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

dan seterusnya...

Ini memiliki sifat-sifat ini:

n*2+1 garis tinggi

"lengan" nlebar kecuali ketika mereka bergabung

garis tengahnya nlebar

jika nbahkan garis-garis di atas dan di bawah pusatnya n*2lebar

jika naneh garis-garis di atas dan di bawah pusat n*2-1lebar

Aturan

  • Mengikuti baris baru diterima
  • Celah standar berlaku
  • Bytes terpendek menang
  • Output dapat dicetak atau string atau array string

Suntingan

  • n=0 tidak perlu ditangani
  • Ruang tambahan diperbolehkan
LiefdeWen
sumber
2
Apakah boleh jika output memiliki 1bukannya *dan 0bukannya ruang?
JungHwan Min
Bisakah pola kita diindeks 0?
Leaky Nun
@JungHwanMin Saya akan mengizinkannya tetapi kemudian Anda tidak diizinkan untuk menang, mungkin akan terombang-ambing jika Anda paling dibesarkan.
LiefdeWen
@LeakyNun 0 Diindeks baik
LiefdeWen

Jawaban:

9

Arang , 13 12 byte

Terima kasih kepada @ErikTheOutgolfer untuk satu byte

FN«PX⁺*×*Iθ→

Cobalah online!

Ini adalah jawaban pertama saya untuk Arang, dan saya cukup yakin ini bukan golf, tetapi saya pikir saya akan mulai dari suatu tempat.

 FN«            # For input() (i in range(0,input()))
     P           # Print
       X          # In an 'X' shape
        ⁺*×*Iθ   # '*'+'*'*int(first_input)
               →  # Move the cursor right one
nmjcman101
sumber
@EriktheOutgolfer Saya tahu harus ada cara untuk melakukan itu! Terima kasih!
nmjcman101
Dan ya, itu tampak seperti golf.
Erik the Outgolfer
@EriktheOutgolfer Itu tidak sebelum Anda datang juga :)
nmjcman101
1
@thomasrutter Charcoal memiliki halaman kode khusus sendiri dengan 256 byte , di mana masing-masing karakter tersebut adalah 1 byte. Jadi itu tidak dikodekan dalam ASCII, di mana beberapa karakter ini memang akan menjadi beberapa byte. nmjcman101 +1 btw. Sedang mencoba jawaban Charcoal pertamaku kemarin, tetapi tidak benar-benar berhasil dalam beberapa menit sebelum pulang kerja. Jadi, Anda telah mengalahkan saya untuk itu. Saya memang belajar beberapa hal dari jawaban Anda, jadi terima kasih untuk itu.
Kevin Cruijssen
13

MATL , 16 byte

EQXyG:Y+tP+g42*c

Cobalah online!

Penjelasan

Pertimbangkan input 2sebagai contoh. Isi tumpukan ditunjukkan dengan yang lebih baru di bawah ini.

EQ    % Implicitly input n. Push 2*n+1
      %   STACK: 5
Xy    % Identity matrix of that size
      %   STACK: [1 0 0 0 0;
                  0 1 0 0 0;
                  0 0 1 0 0;
                  0 0 0 1 0;
                  0 0 0 0 1]
G:    % Push [1 2 ... n]
      %   STACK: [1 0 0 0 0;
                  0 1 0 0 0;
                  0 0 1 0 0;
                  0 0 0 1 0;
                  0 0 0 0 1],
                 [1 2]
Y+    % 2D convolution, extending size
      %   STACK: [1 2 0 0 0 0;
                  0 1 2 0 0 0;
                  0 0 1 2 0 0;
                  0 0 0 1 2 0;
                  0 0 0 0 1 2]
tP+   % Duplicate, flip vertically, add
      %   STACK: [1 2 0 0 2 1;
                  0 1 2 1 2 0;
                  0 0 1 4 0 0;
                  0 1 2 1 2 0;
                  1 2 0 0 1 2]
g     % Convert to logical
      %   STACK: [1 1 0 0 1 1;
                  0 1 1 1 1 0;
                  0 0 1 1 0 0;
                  0 1 1 1 1 0;
                  1 1 0 0 1 1]
42*   % Multiply by 42.
      %   STACK: [42 42  0  0 42 42;
                   0 42 42 42 42  0;
                   0  0 42 42  0  0;
                   0 42 42 42 42  0;
                  42 42  0  0 42 42]
c     % Convert to char. Char 42 is '*'. Char 0 is displayed as space
      %   STACK: ['**  **';
                  ' **** ';
                  '  **  ';
                  ' **** ';
                  '**  **']
Luis Mendo
sumber
Anda lebih cepat dari saya ...
Leaky Nun
@LeakyNun Sangat jarang :-)
Luis Mendo
Saya berharap Jelly memiliki konvolusi 2D ... Saya harus menambahkan 0 di setiap baris dan kemudian menerapkan jumlah vektor ...
Leaky Nun
1
@ LeakyNun Anda tahu apa yang mereka katakan tentang konvolusi ...
Luis Mendo
1
@LuisMendo Dalam hati saya, Anda adalah pemenang untuk menggunakan konvolusi, membawa kembali kenangan indah seperti itu.
LiefdeWen
9

Jelly , 15 byte

Ḥ‘Ḷ⁶ẋ;€”*ẋ$»Ṛ$Y

Cobalah online!

Erik the Outgolfer
sumber
Sangat bagus. 8 byte lebih pendek dari saya.
Leaky Nun
@ LeakyNun Pendekatan langsung membantu sedikit.
Erik the Outgolfer
Pendekatan yang sangat bagus
Jonathan Allan
@ JonathanAllan Ya, terutama jika Anda belajar »vektorisasi ...
Erik the Outgolfer
1
Saya sangat suka nama pengguna Anda! Tapi saya berharap Anda menggunakan "vi" atau "vim" sebagai gantinya, sehingga Anda dapat memilih "Erik the vi King" ... (Penggemar Monty Python di sini ...)
Olivier Dulac
4

V , 18 17 byte

Menyimpan satu byte berkat trik input @ DJMcMayhem.

Àé*ÄJÀälÀñ2ÙÀl2x>

Cobalah online!

Penjelasan

Àé*ÄJÀäl

Ini menyisipkan [n]*'*'+[n]*' '+[n]*'*'

        Àñ        ' [arg] times
          2Ù      ' Duplicate the current line down twice
            Àl    ' Move right [arg] times
              2x  ' Delete two characters
                > ' Indent this line one space

Setiap iterasi dari loop buffer berasal

|**   ***

Untuk

***   ***
 |** ***
***   ***

Di mana |kursor dengan *di bawahnya

nmjcman101
sumber
Wow. Anda waaay mengungguli saya. Kerja bagus! Beberapa tips: Anda bisa melakukan Àé*ÄJÀälalih - alih Àá*Àá Àá*, dan Anda bisa melakukannya <M-c>, yaitu ã(mnemonic: center ) untuk pindah ke tengah garis, yang merupakan byte lebih pendek dari Àl. Cobalah online!
DJMcMayhem
@DJMcMayhem Saya mencoba untuk berbicara dengan Anda di banyak tempat yang berbeda. Saya akan mencuri saran pertama yang saya pikir, tetapi <M-c>jeda untuk angka yang lebih tinggi
nmjcman101
3

05AB1E , 18 byte

Å4bS{I·ƒDÂ~„ *èJ,À

Cobalah online!

Penjelasan

Contoh untuk n=2

Å4                   # push a list of 4s with length as the input
                     # STACK: [4,4]
  b                  # convert each to binary
                     # STACK: [100, 100]
   S{                # split into digit list and sort
                     # STACK: [0, 0, 0, 0, 1, 1]
     I·ƒ             # input*2+1 times do
        D            # duplicate top of stack
                     # 1st iteration: [0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1]
                     # 2nd iteration: [0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0]
                     # 3rd iteration: [0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0]
         Â~          # or each item in the duplicate with its reverse
                     # 1st iteration: [0, 0, 0, 0, 1, 1], [1, 1, 0, 0, 1, 1]
                     # 2nd iteration: [0, 0, 0, 1, 1, 0], [0, 1, 1, 1, 1, 0]
                     # 3rd iteration: [0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0]
           „ *èJ     # use the resulting binary list to index into the string " *"
                     # 1st iteration: [0, 0, 0, 0, 1, 1], "**  **"
                     # 2nd iteration: [0, 0, 0, 1, 1, 0], " **** "
                     # 3rd iteration: [0, 0, 1, 1, 0, 0], "  **  "
                ,    # print
                 À   # rotate list left
Emigna
sumber
3

V , 23 byte

Àé*ÄJÀälÀñÙãlxx>ñyHæGVp

Cobalah online!

Hexdump:

00000000: c0e9 2ac4 4ac0 e46c c0f1 d9e3 6c78 783e  ..*.J..l....lxx>
00000010: f179 48e6 4756 70                        .yH.GVp

Untuk alasan apa pun, tantangan ini jauh lebih sulit di V daripada yang terakhir. Karena pendekatan umum kita n kali, menumbuhkan 'x' tidak akan berfungsi di sini, sebagai gantinya kita akan membangun bagian atas X, menyalinnya dan membaliknya, lalu menempelkan kedua bagian bersama-sama.

Penjelasan:

Àé*ÄJÀäl                " Insert ('*' * n) + (' ' * n) + ('*' * n) 
                        " The obvious way would be 'Àé*ÀÁ ÀÁ*', but this 
                        " non-obvious way saves us a byte
        Àñ      ñ       " 'n' times:
          Ù             "   Duplicate this line (below us)
           ãl           "   Move to the center of this line
             xx         "   Delete two characters
               >        "   And indent this line with one space.

Melakukan indentasi pada akhir loop, memungkinkan kita untuk mengambil keuntungan dari akhiran implisit . Ini juga dengan mudah membuat n + 1 baris, yang persis merupakan bagian atas dari 'X'. Katakanlah inputnya adalah 4. Kemudian pada titik ini, buffer terlihat seperti ini:

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

Dan kita berada di baris terakhir. Jadi kita:

                yH      " Copy the whole buffer and move to the first line
                  æG    " Reverse every line
                    Vp  " And paste what we just copied *over* the current
                        " line, deleting it in the process
DJMcMayhem
sumber
Saya melakukan ãxxhal itu pada awalnya juga, tetapi saya pikir itu rusak untuk misalnya n = 8?
nmjcman101
@ nmjcman101 Ah, Anda benar. Tidak apa-apa jika Anda melakukannya ãl, atau jika Anda membuat indentasi sebelum pemusatan, tetapi itu sebenarnya tidak menyimpan byte. Saya tidak mengerti mengapa ini bekerja untuk angka yang lebih kecil.
DJMcMayhem
3

C #, 139 130 115 byte

-1 byte dengan membuat string dan panggilan WriteLine, sehingga menghemat pemeriksaan untuk baris baru.
-6 byte terima kasih kepada Kevin dan teknik main golfnya!
-2 byte dengan mengganti n*3-ndengan n*2.
-15 byte setelah Kevin dengan ramah menunjuk saya ke arah yang benar: Saya hanya bisa mengembalikan string daripada mencetaknya, sehingga menghemat panggilan System.Console.WriteLine(). Dan beberapa tips lainnya juga ...

n=>{var s="";for(int i,j=0;j<=n*2;j++,s+='\n')for(i=0;i<n*3;)s+=i>=j&i<j+n|i<=n*3-j-1&i++>=n*2-j?'*':' ';return s;}

Cobalah online!

Tidak Terkumpul:

class Program
{
    static void Main(string[] args)
    {
        System.Func<int, string> g = n =>
        {
            var s = "";
            for (int i, j = 0; j <= n*2; j++, s += '\n')
                for (i = 0; i < n*3;)
                    s += i >= j & i < j+n | i <= n*3-j-1 & i++ >= n*2-j ? '*' : ' ';
            return s;
        };

        System.Console.Write(f(1));
        System.Console.Write(f(2));
        System.Console.Write(f(3));
        System.Console.Write(f(5));
        System.Console.Write(f(8));

        System.Console.ReadKey();
    }
}

Itu hanya mengulang sepanjang baris dan kolom ruang yang diperlukan untuk mencetak X besar dan mencetak baik a '*'atau a ' 'tergantung pada kondisi.

Charlie
sumber
1
+1! Beberapa hal kecil untuk golf. Semua &&bisa &dan ||bisa |dalam hal ini. for(int j=0;dapat for(int j=0,i;dan kemudian Anda dapat menghapus int di depan idalam lingkaran dalam. Juga, setelah perubahan pertama &dan |, Anda juga dapat menghapus bagian i++dalam for-loop, dan mengubah i==n*3-1?...kei++==n*3-1?... .
Kevin Cruijssen
@KevinCruijssen terima kasih banyak! Saya mengubah loop dalam dan sekarang saya membuat string sehingga saya bisa menelepon WriteLine, disimpan hanya 1 byte. Jadi sekarang saya tidak yakin apa yang harus dilakukan dengan saran terakhir Anda.
Charlie
1
Btw, mengapa System.Console.WriteLine? Mengembalikan string: n=>{string s="";for(int i,j=0;j<n*2+1;j++,s+="\n")for(i=0;i<n*3;)s+=i>=j&i<j+n|i<=n*3-j-1&i++>n*2-j-1?'*':' ';return s;}lebih pendek [ 120 byte ] (dan juga menghilangkan tanda kurung dengan meletakkan segala sesuatu di dalam for-loop. Berikut ini adalah tautan-TIO untuk menunjukkannya berfungsi. Juga, jangan ragu untuk menambahkan ini (atau Anda sendiri) TIO-tautan ke jawaban Anda. :)
Kevin Cruijssen
1
@KevinCruijssen Saya tidak tahu bahwa TIO dapat menangani kode C #! Saya menambahkan WriteLinedalam kode karena OP meminta untuk mengeluarkan X besar, bukan hanya untuk mengembalikannya , jadi saya merasa bahwa keluaran X (dengan memanggil WriteLinemetode) harus menjadi bagian dari kode. Meskipun demikian, saya masih belum terbiasa dengan aturan kode-golf, dan saya tidak tahu lisensi apa yang dapat saya ambil saat menulis kode. Saya baru saja melihat bahwa beberapa jawaban lain di sini mencetak X dalam kode, dan beberapa lainnya mencetaknya di footer. Apa pendekatan yang valid dalam kasus ini?
Charlie
1
Biasanya mengembalikan string serta menggunakan fungsi sebagai ganti program diizinkan secara default, kecuali dinyatakan sebaliknya. Juga, dalam pertanyaan itu menyatakan " Output dapat dicetak atau string atau array string ", sehingga mengembalikan string diperbolehkan. :) Oh, dan satu hal lagi yang bisa dilakukan golf: j<n*2+1bisa j<=n*2. Saya juga telah membuat port Java 8 dari jawaban Anda dengan byte-count yang sama, mengkredit jawaban luar biasa Anda.
Kevin Cruijssen
3

Haskell , 88 87 86 byte

-1 terima kasih kepada @Laikoni

(!)=replicate
x n=[zipWith max(reverse m)m|m<-[i!' '++n!'*'++(n*2-i)!' '|i<-[0..n*2]]]

Cobalah online!

bartavelle
sumber
1
zipWith max m(reverse m)dapat disingkat menjadi zipWith max(reverse m)m. Ini sama dengan zipWith max=<<reverse$m, dan kemudian mdapat digarisbawahi: Coba online!
Laikoni
2

MATLAB, 153 126 byte (17,6% ↓)

Berkat komentar @ LuisMendo, fungsi disp()dapat menampilkan karakter tanpa tanda kutip tunggal, sehingga saya dapat mencegah penggunaan fprintfdengan formatsdan menghilangkan beberapa byte. Selain itu, komentarnya mengingatkan saya bahwa saya perlu menggunakan char(32)untuk memberikan ruang daripadachar(0) (null).

n=input('')
r=2*n+1
c=3*n
a=0
for i=0:n-1
a=a+[zeros(r,i),diag(1:r),zeros(r,c-r-i)];
end
a((a+flipud(a))>0)=10
disp([a+32 ''])

Cobalah online!

MATLAB, 153 byte

n=input('')
r=2*n+1
c=3*n
a=0
for i=0:n-1 
a=a+[zeros(r,i),diag(1:r),zeros(r,c-r-i)];
end
a((a+flipud(a))>0)=42
fprintf([repmat('%c',1,c),'\n'],char(a)')

Contoh hasil: n = 10

**********          **********
 **********        ********** 
  **********      **********  
   **********    **********   
    **********  **********    
     ********************     
      ******************      
       ****************       
        **************        
         ************         
          **********          
         ************         
        **************        
       ****************       
      ******************      
     ********************     
    **********  **********    
   **********    **********   
  **********      **********  
 **********        ********** 
**********          **********
Guoyang Qin
sumber
2

Python 2 , 93 90 89 83 byte

-3 bytes berkat Leaky Nun
-1 byte terima kasih kepada Zachary T
-6 bytes berkat xnor

n=input()
x=n*'*'+n*'  '
exec"print`map(max,x,x[::-1])`[2::5];x=' '+x[:-1];"*(n-~n)

[Cobalah online!] [TIO-j3xwsktf]

Mulai dengan string seperti '*** 'untuk n=3, melamar map/maxuntuk mengambil *spasi untuk setiap posisi, lalu menambahkan spasi dan menghapus karakter terakhir dari string dan melakukan ini semua lagi.

tongkat
sumber
90 byte
Leaky Nun
Tidak bisakah Anda ganti n*2*' 'dengan n*' '?
Zacharý
The map(maxdapat dilakukan langsung tanpa zip. Juga, n*2+1adalah n-~n.
xnor
1

Haskell , 70 byte

f n=[[last$' ':['*'|y<-[1..n],(c-n-y)^2==r^2]|c<-[1..3*n]]|r<-[-n..n]]

Cobalah online!

Menghasilkan daftar string.

Untuk setiap posisi baris r, kolom c, menggunakan rumus untuk menentukan apakah itu termasuk dalam salah satu dari dua band diagonal dan begitu juga *.

Tidak
sumber
1

Java 8, 119 118 byte

n->{String r="";for(int i=0,j;i<=n*2;i++,r+="\n")for(j=0;j<n*3;r+=j>=i&j<i+n|j<=n*3-i-1&j++>=n*2-i?"*":" ");return r;}

Port dari @CarlosAlejo jawaban C # yang luar biasa , setelah saya membantunya bermain golf beberapa hal. Jadi, pastikan Anda juga mendukungnya!

Coba di sini.

Kevin Cruijssen
sumber
1

Javascript (ES2017), 155 157 byte

n=>[...e=[...Array(n+1)].map((a,i)=>[...d=((b=''.padEnd(n))[c='slice'](i)+'*'.repeat(n)+b[c](0,i))[c](n/2)].reverse().join``+d[c](n%1)),...e.reverse()[c](1)]

Mengembalikan array string. Saya melakukan operasi pada array kemudian mirror itu. Ini mungkin dapat dioptimalkan dengan matriks seperti jawaban lain, tetapi saya ingin menjadi unik.

Sunting: Seperti yang ditunjukkan oleh Neil, untuk nilai genap n, garis tengah tidak nlebar, jadi saya menambahkan modulus untuk mendeteksi genap / ganjil saat mengiris kolom.

n=5
['*****     *****',
 ' *****   ***** ',
 '  ***** *****  ',
 '   *********   ',
 '    *******    ',
 '     *****     ',
 '    *******    ',
 '   *********   ',
 '  ***** *****  ',
 ' *****   ***** ',
 '*****     *****']

Tidak disatukan

n => {
  e = [...Array(n+1)].map((a, i) => {   // Create and iterate over array with n+1 elements
    b = ''.padEnd(n)                    // String of n spaces
    d = (b.slice(i) + '*'.repeat(n) + b.slice(0, i)).slice(n/2) // Create row string
    return [...d].reverse().join`` + d.slice(1) // Mirror and combine row horizontally
  })
  return [...e,...e.reverse().slice(1)] // Mirror and combine vertically
}

Kuadran

n=5
   *****
  ***** 
 *****  
*****   
****    
***     

Cermin Secara horizontal

n=5
*****     *****
 *****   ***** 
  ***** *****  
   *********   
    *******    
     *****     

Cermin Secara Vertikal

n=5
*****     *****
 *****   ***** 
  ***** *****  
   *********   
    *******    
     *****     
    *******    
   *********   
  ***** *****  
 *****   ***** 
*****     *****
andrewarchi
sumber
Ini menghasilkan output yang salah bahkan n- garis tengah tidak nlebar.
Neil
0

Mathematica, 148 byte

T=Table;(a=Join[T[T["*",i],{i,(n=#)+2,2n,2}],T[Join[t=T["*",n],T[" ",y],t],{y,1,n,2}]];Column[Row/@Join[Reverse@a,{T["*",n]},a],Alignment->Center])&
J42161217
sumber
0

R, 102 byte

Kode:

n=scan();x=matrix(" ",M<-3*n,N<-2*n+1);for(i in 1:N)x[c(i-1+1:n,M+2-i-1:n),i]="*";cat(x,sep="",fill=M)

Uji:

> n=scan();x=matrix(" ",M<-3*n,N<-2*n+1);for(i in 1:N)x[c(i-1+1:n,M+2-i-1:n),i]="*";cat(x,sep="",fill=M)
1: 10
2: 
Read 1 item
**********          **********
 **********        ********** 
  **********      **********  
   **********    **********   
    **********  **********    
     ********************     
      ******************      
       ****************       
        **************        
         ************         
          **********          
         ************         
        **************        
       ****************       
      ******************      
     ********************     
    **********  **********    
   **********    **********   
  **********      **********  
 **********        ********** 
**********          **********
djhurio
sumber
0

CJam, 24 byte

{:T2*){S*T'**+}%_W%..e>}

Ini adalah blok yang mengambil nomor dari tumpukan dan menampilkan daftar garis ke tumpukan.

Penjelasan:

{                        e# Stack:           | 2
 :T                      e# Store in T:      | 2, T=2
   2*                    e# Multiply by 2:   | 4
     )                   e# Increment:       | 5
      {                  e# Map over range:  | [0
       S                 e#   Push space:    | [0 " "
        *                e#   Repeat string: | [""
         T               e#   Push T:        | ["" 2
          '*             e#   Push char '*': | ["" 2 '*
            *            e#   Repeat char:   | ["" "**"
             +           e#   Concatenate:   | ["**"
              }%         e# End:             | ["**" " **" "  **" "   **" "    **"]
                _        e# Duplicate:       | ["**" " **" "  **" "   **" "    **"] ["**" " **" "  **" "   **" "    **"]
                 W%      e# Reverse:         | ["**" " **" "  **" "   **" "    **"] ["    **" "   **" "  **" " **" "**"]
                   ..e>  e# Overlay:         | ["**  **" " ****" "  **" " ****" "**  **"]
                       } e# End
Buah Esolanging
sumber
0

Python 2 , 110 byte

x=a=0
n=c=input()
while x<2*n+1:
    print ' '*a+'*'*n+' '*c+'*'*(2*n-2*a-c)
    x+=1
    a=n-abs(n-x)
    c=max(0, n-2*a)

Program ini memecah setiap baris menjadi 4 bagian, spasi pertama, bintang pertama, spasi kedua dan kemudian bintang kedua. Untuk setiap garis horizontal X, ia menghitung berapa banyak bintang atau ruang yang dibutuhkan untuk masing-masing dari 4 bagian garis, kemudian membuat dan mencetak string itu.

jacoblaw
sumber
0

Retina , 144 byte

.+
 $&$* $&$* $&
 
$`#$'¶
¶\d+$

( *)#( *)(\d+)
$1$3$**$2#$3$* #$2$3$**$1
( +)(\*+)( *)(# +#)\3\2\3 +
$3$2$1$4$1$2$3
+` (# +#)
$1 
+` #...
#
##

Cobalah online! Penjelasan:

.+
 $&$* $&$* $&

Tambahkan 2n + 1 spasi sebelum nilai input (satu untuk setiap jalur output).

$`#$'¶

Ganti setiap ruang dengan #dan kumpulkan hasilnya. Ini memberikan garis diagonal #s, ruang empuk di kedua sisi, dengan nilai input suffixed.

¶\d+$

Hapus nilai input asli, karena kami sekarang memiliki salinan di setiap baris.

( *)#( *)(\d+)
$1$3$**$2#$3$* #$2$3$**$1

Bangun dua garis diagonal ns *, dengan kolom pemisah nruang yang terbungkus sepasang #s.

( +)(\*+)( *)(# +#)\3\2\3 +
$3$2$1$4$1$2$3

Pada garis-garis di mana *s lebih dekat ke tengah, bertukar dua bagian di sekitar. Ini memberikan penampilan yang menyerupai > | | <.

+` (# +#)
$1 

Pindahkan | |s ke kiri sejauh mereka akan pergi, memberikan semacam >> > <penampilan.

+` #...
#

Untuk setiap spasi di antara #huruf s, hapus tiga karakter berikut. Ini bergabung > <menjadi X.

##

Hapus #s sekarang tidak perlu .

Neil
sumber