Gambar beberapa bintang ASCII

15

Tulis program atau fungsi yang menggambar bintang ASCII, dengan ukuran lengan sebagai input.

Ini bintang ukuran 1

_/\_
\  /
|/\|

Ini bintang ukuran 2

   /\
__/  \__
\      /
 \    /
 | /\ |
 |/  \|

Ini bintang ukuran 3

     /\
    /  \
___/    \___
\          /
 \        /
  \      /
  |  /\  |
  | /  \ |
  |/    \|

Dan seterusnya.

Memasukkan

Integer positif tunggal dalam format apa pun yang nyaman ,n > 0 .

Keluaran

Representasi ASCII-seni bintang, mengikuti aturan di atas. Leading / trailing newlines atau spasi putih lainnya adalah opsional, dengan ketentuan bahwa poin berbaris dengan tepat.

Aturan

  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber
6
Apakah ini hanya layar saya, atau apakah bintang-bintang terlihat abnormal tinggi dan tipis?
caird coinheringaahing
2
ASCII bodoh dan kurangnya miring dangkal ...
manusia
@cairdcoinheringaahing Font yang digunakan oleh SE tidak berbentuk persegi - ada spasi kosong yang signifikan di antara baris, yang meningkatkan distorsi.
AdmBorkBork

Jawaban:

12

Arang , 20 17 byte

-3 byte terima kasih kepada Neil.

Nν↙ν↑↑ν↖ν ×_ν↗ν‖M

Cobalah online!Tautan adalah untuk versi verbose.

Saya cukup senang dengan golf ini jadi ...

Penjelasan

Nν                 take a number as input and store in ν
  ↙ν               print / ν times downwards to the left
    ↑              move up once
     ↑ν            print | ν times upwards
       ↖ν          print \ ν times upwards to the left
                   print a space
          ×_ν      print _ ν times
             ↗ν    print / ν times upwards to the right
               ‖M  reflect horizontally
     /\                           
    /  \    "No, this is Patrick!"
___/    \___                      
\   ☉ ☉    /                      
 \   𝐷    /                       
  \      /                        
  |  /\  |                        
  | /  \ |                        
  |/    \| 
benar-benar manusiawi
sumber
Menggambarnya dari bawah ke atas menghemat 2 byte.
Neil
Untuk beberapa alasan, saya harus menambah argumen untuk Polygon... Apakah saya melakukan sesuatu yang salah?
totallyhuman
Itu karena Polygonmeninggalkan kursor pada karakter terakhir, tapi saya tidak menggunakan Polygon... sebenarnya saya juga tidak menggunakan kode terbaik, saya turun ke 17 sekarang.
Neil
Saya tidak tahu apakah jika saya mendapat 17 dengan cara yang sama Anda lakukan tetapi ... Terima kasih!
totallyhuman
Cukup dekat. Saya sebenarnya sudah Move(:Right); for (n) Print("_");.
Neil
5

SOGL V0.12 , 27 24 byte

╔*¹.╚№┼№.╝+ø┐.∙.1ž.╚┼+╬³

Coba Di Sini!

Penjelasan:

╔*                        push a string with input amount of underscores
  ¹                       wrap that in an array
   .╚                     push a "/" diagonal of the size of the input (the top lines)
     №                    reverse vertically
      ┼                   add horizontally the underscores behind the array
       №                  reverse vertically back
        .╝+               below that add a "\" diagonal (middle lines)
           ø              push an empty string as the base of the vertical bars
            ┐.∙           get an array of "|" with the length of the input
               .1ž        at [input; 1] in the empty string insert that
                  .╚┼     horizontally append a "/" diagonal
                     +    add that below everything else
                      ╬³  palindromize horizontally
dzaima
sumber
4

Python 2 ,  166 160 157 155  152 byte

The execPendekatan persis jumlah byte yang sama.

i=input();t,z=" \\";y=t*2
for k in range(i*3):s=k%i;o=i+~s;p=i+o;g="_ "[i>k+1]*p;print[g+"/"+y*k+z+g,t*s+z+y*p+"/",~-i*t+"|"+o*t+"/"+y*s+z+o*t+"|"][k/i]

Cobalah online!

Disimpan 3 byte berkat Jonathan Frech .

Tuan Xcoder
sumber
Anda dapat menyimpan beberapa byte dengan menggantinya t=" ";y,z=t*2,"\\"dengan t,z=" \\";y=t+t.
Jonathan Frech
@JonathanFrech Terima kasih.
Tn. Xcoder
3

Java 8, 385 376 344 304 285 280 268 264 252 250 + 19 byte

n -> {int s = 2 * n, w = 2 * s, e = n-1, i = 0, o, l [] [] = int baru [n * 3] [w]; untuk (; i <n; l [i] [s + ~ i] = l [n + i] [w + ~ i] = l [o] [s + ~ i] = 47, l [i] [o] = l [o] [ o] = l [n + i] [i] = 92, l [e] [i] = l [e] [w - ++ i] = 95, l [o] [e] = l [o] [ s + n] = 124) o = s + i; untuk (int [] b: l) System.out.println (String baru (b, 0, w). ganti (" ", ""));}

Cobalah online!

Roberto Graham
sumber
Anda dapat mempersingkat 10 byte menggunakan trik bitwise dan memindahkan semua deklarasi integer Anda di luar loop Anda ( 270 byte )
Mr. Xcoder
Dan Anda dapat menyimpan 2 byte lagi dengan menggerakkan int o=loop luar juga ( 268 byte )
Mr. Xcoder
Anda dapat menyimpan 4 byte lebih banyak dengan menyingkirkan tanda kurung for-loop dan menggunakan ++ langsung pada kejadian terakhir i, seperti ini: 264 byte .
Kevin Cruijssen
1
252 byte
Nevay
@Nevay Sangat pintar, terima kasih
Roberto Graham
2

Mathematica, 189 byte

n(
  s_±x_±y_:=s->Array[If[x==y,s," "]&,{n,n}];
  StringRiffle[Characters@{"_/\\_","\\  /","|/\\:"}/.
    {"_"±#±n,"|"±#2±n,":"±#2±1,"\\"±#±#2,"/"±(n-#+1)±#2," "±0±1}
    /.":"->"|"//ArrayFlatten,"
",""])

Jalur 2 mendefinisikan operator pembantu ±, yang digunakan untuk membuat jalur 4 mengevaluasi untuk:

{"_"  -> Array[If[#1 == n,          "_", " "] &, {n, n}], 
 "|"  -> Array[If[#2 == n,          "|", " "] &, {n, n}], 
 ":"  -> Array[If[#2 == 1,          ":", " "] &, {n, n}], 
 "\\" -> Array[If[#1 == #2,         "\\"," "] &, {n, n}], 
 "/"  -> Array[If[1 + n - #1 == #2, "/", " "] &, {n, n}], 
 " "  -> Array[If[0 == 1,           " ", " "] &, {n, n}]}

Pada baris 3, ReplaceAll( /.) mengambil matriks yang mewakili bintang ukuran 1 serta daftar aturan di atas. Untuk langkah terakhir, kami menggunakan ArrayFlatten, yang lebih pendek dari SubstitutionSystem, dan StringRiffle.

hftf
sumber
2

Java 7, 295 byte

Solusi adalah metode f.

String s(String s,int n){while(n-->0)s=" "+s;return s;}String f(int x){String n="\n",s="/",b="\\",o="",u="_";int i=0;for(x--;i<x;u+="_")o+=s(s,2*x-i+1)+s(b,2*i++)+n;o+=u+s+s(b,2*i)+u+n;while(i>=0)o+=s(b,x-i)+s(s,4*x-2*(x+~i--))+n;while(i++<x)o+=s("|",x)+s(s,x-i)+s(b,2*i)+s("|",x-i)+n;return o;}

Cobalah Online (JDK 8)

Tidak disatukan

String s(String s, int n) {
    while (n-- > 0)
        s = " " + s;
    return s;
}

String f(int x) {
    String
        n = "\n",
        s = "/",
        b = "\\",
        o = "",
        u = "_"
    ;
    int i = 0;
    for (x--; i < x; u += "_")
        o += s(s, 2*x - i + 1) + s(b, 2 * i++) + n;
    o += u + s + s(b, 2 * i) + u + n;
    while (i >= 0)
        o += s(b, x - i) + s(s, 4*x - 2*(x + ~i--)) + n;
    while (i++ < x)
        o += s("|", x) + s(s, x - i) + s(b, 2 * i) + s("|", x - i) + n;
    return o;
}

Ucapan Terima Kasih

  • -1 byte terima kasih kepada Kevin Cruijssen
Jakob
sumber
0

Python 2 , 137 byte

n=input()
b,f,s,v='\/ |'
for i in range(3*n):u=i/~-n*n*'_';d=f+i%n*2*s+b;print[u+d+u,b+s*2*(3*n+~i)+f,v+d.center(2*n)+v][i/n].center(4*n)

Cobalah online!

Lynn
sumber