วาดดาว ASCII บางดวง


15

เขียนโปรแกรมหรือฟังก์ชั่นที่วาดดาว ASCII โดยกำหนดขนาดของแขนเป็นอินพุต

นี่คือดาวขนาด 1

_/\_
\  /
|/\|

นี่คือดาวขนาด 2

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

นี่คือดาวขนาด 3

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

และอื่น ๆ

อินพุต

เป็นจำนวนเต็มบวกเดียวในรูปแบบที่สะดวกใด ๆn > 0 ,

เอาท์พุต

การเป็นตัวแทน ASCII-art ของดาวตามกฎข้างต้น ขึ้นบรรทัดใหม่ / นำขึ้นบรรทัดใหม่หรือพื้นที่ว่างอื่นเป็นทางเลือกโดยมีเงื่อนไขว่าคะแนนเรียงกันอย่างเหมาะสม

กฎระเบียบ

  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการตีกอล์ฟตามปกติและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

6
มันเป็นแค่หน้าจอของฉันหรือว่าดวงดาวดูสูงและผอมผิดปกติ?
caird coinheringaahing

2
ASCII โง่และขาด slants ตื้น ...
สิ้นเชิงมนุษย์

@cairdcoinheringaahing แบบอักษรที่ใช้โดย SE ไม่ใช่สแควร์ - มีช่องว่างที่สำคัญระหว่างบรรทัดซึ่งเพิ่มการบิดเบือน
AdmBorkBork

คำตอบ:


12

ถ่าน , 20 17 ไบต์

-3 ไบต์ขอบคุณ Neil

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

ลองออนไลน์! ลิงก์คือเวอร์ชัน verbose

ฉันมีความสุขมากกับกอล์ฟนี้ดังนั้น ...

คำอธิบาย

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!"
___/    \___                      
\   ☉ ☉    /                      
 \   𝐷    /                       
  \      /                        
  |  /\  |                        
  | /  \ |                        
  |/    \| 

การวาดจากด้านล่างไปด้านบนบันทึก 2 ไบต์
Neil


นั่นเป็นเพราะPolygonทิ้งเคอร์เซอร์ไว้ที่ตัวละครตัวสุดท้าย แต่ฉันไม่ได้ใช้Polygon... อันที่จริงฉันไม่ได้ใช้รหัสที่ดีที่สุดเช่นกันตอนนี้ฉันอายุไม่ถึง 17
Neil

ฉันไม่รู้ว่าถ้าฉันได้ 17 แบบเดียวกับที่คุณทำ แต่ ... ขอบคุณ!
สิ้นเชิงมนุษย์

ใกล้พอ Move(:Right); for (n) Print("_");ที่จริงผมมี
Neil

5

SOGL V0.12 , 27 24 ไบต์

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

ลองที่นี่!

คำอธิบาย:

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

4

Python 2 ,  166 160 157 155  152 ไบต์

execวิธีเป็นสิ่งนับไบต์เดียวกัน

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]

ลองออนไลน์!

ที่บันทึกไว้ 3 ไบต์ขอบคุณที่โจนาธาน Frech


คุณสามารถประหยัดไบต์บางส่วนโดยการแทนที่ด้วยt=" ";y,z=t*2,"\\" t,z=" \\";y=t+t
Jonathan Frech

@JonathanFrech ขอบคุณ
Mr. Xcoder

3

Java 8, 385 376 344 304 285 280 268 264 252 250 + 19ไบต์

n -> {int s = 2 * n, w = 2 * s, e = n-1, i = 0, o, l [] [] = new int [n * 3] [w]; สำหรับ (; 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] [ผม] = 92, L [อี] [ผม] = L [อี] [W - ++ ผม] = 95, L [o] [E] = L [o] [ s + n] = 124) o = s + i; สำหรับ (int [] b: l) System.out.println (สตริงใหม่ (b, 0, w) .replace (" ", ""));}

ลองออนไลน์!


คุณสามารถย่อให้สั้นลง 10 ไบต์โดยใช้ลูกเล่นเล็ก ๆ น้อย ๆ และย้ายการประกาศจำนวนเต็มทั้งหมดนอกลูปของคุณ ( 270 ไบต์ )
Mr. Xcoder

และคุณสามารถบันทึกได้อีก 2 ไบต์ด้วยการเลื่อนint o=ลูปนอก ( 268 bytes )
Mr. Xcoder

คุณสามารถบันทึก 4 ไบต์มากขึ้นโดยได้รับการกำจัดของวงเล็บสำหรับวงและการใช้++โดยตรงบนเกิดขึ้นครั้งล่าสุดของiเช่นนี้264 ไบต์
Kevin Cruijssen


@Nevay ฉลาดมากขอบคุณ
Roberto Graham

2

Mathematica, 189 ไบต์

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,"
",""])

บรรทัดที่ 2 กำหนดตัวดำเนินการตัวช่วย±ซึ่งใช้ในการประเมินบรรทัดที่ 4 เป็น

{"_"  -> 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}]}

ในบรรทัดที่ 3, ReplaceAll( /.) ใช้เมทริกซ์แทนดาวขนาด 1 เช่นเดียวกับรายการของกฎข้างต้น สำหรับขั้นตอนสุดท้ายที่เราใช้ArrayFlattenซึ่งสั้นกว่าและSubstitutionSystemStringRiffle


2

Java 7, 295 ไบต์

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

ลองใช้ออนไลน์ (JDK 8)

Ungolfed

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

กิตติกรรมประกาศ

  • -1 ไบต์ต้องขอบคุณ Kevin Cruijssen


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.