Bazı ASCII yıldızlarını çizin


15

ASCII yıldızı çizen, kolların boyutu girdi olarak verildiğinde bir program veya işlev yazın.

İşte büyüklükte bir yıldız 1

_/\_
\  /
|/\|

İşte büyüklükte bir yıldız 2

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

İşte büyüklükte bir yıldız 3

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

Ve bunun gibi.

Giriş

Tek bir pozitif tam sayı , herhangi bir uygun biçimde , n > 0.

Çıktı

Yukarıdaki kuralları izleyerek bir yıldızın ASCII-art temsili. Noktaların uygun şekilde hizalanması şartıyla, öndeki / sondaki yeni satırlar veya diğer boşluklar isteğe bağlıdır.

kurallar

  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • Standart boşluklar yasaktır.
  • Bu bu nedenle her zamanki golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

6
Sadece benim ekranım mı yoksa yıldızlar anormal derecede uzun ve ince mi görünüyor?
caird coinheringaahing

2
Aptal ASCII ve sığ
eğik

@cairdcoinheringaahing SE tarafından kullanılan yazı tipi kare değil - çizgiler arasında kayda değerliği artıran önemli boşluk var.
AdmBorkBork

Yanıtlar:


12

Kömür , 20 17 bayt

Neil sayesinde -3 bayt.

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

Çevrimiçi deneyin! Bağlantı ayrıntılı sürümdür.

Bu golf ile oldukça mutluyum ...

açıklama

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

Aşağıdan yukarıya doğru çizmek 2 bayt tasarruf sağlar.
Neil


Çünkü Polygonimleci son karakterin üzerine bırakır, ama kullanmıyordum Polygon... aslında en iyi kodu da kullanmıyordum, şimdi 17'ye düşüyorum.
Neil

Eğer senin gibi 17 olsaydım bilmiyorum ama ... Teşekkürler!
totallyhuman

Yeterince yakın. Aslında vardı Move(:Right); for (n) Print("_");.
Neil

5

SOGL V0.12 , 27 24 bayt

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

Buradan Deneyin!

Açıklama:

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


3

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

n -> {int s = 2 * n, w = 2 * s, e = n-1, i = 0, o, l [] [] = yeni int [n * 3] [w]; için (; i <n; l [i] [s + p] = l [n + i] = l [o] [s + p] = 47, l [i] [o] = l [o] [[+ p w] 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; (int [] b: l) System.out.println (yeni Dize (b, 0, w) .replace (" ", ""));}

Çevrimiçi deneyin!


Bitsel hileler kullanarak ve tüm tam sayı bildirimlerinizi döngülerinizin dışına taşıyarak 10 bayt kısaltabilirsiniz ( 270 bayt )
Bay Xcoder

Ve int o=döngü dışını da hareket ettirerek 2 bayt daha kaydedebilirsiniz ( 268 bayt )
Bay Xcoder

For-loop braketlerinden kurtularak ve ++şu son olayda doğrudan kullanarak 4 bayt daha tasarruf edebilirsiniz i: 264 bayt .
Kevin Cruijssen


@Nevay Çok zeki, teşekkür ederim
Roberto Graham

2

Mathematica, 189 bayt

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

Satır 2, ±satır 4'ün aşağıdakileri değerlendirmesini sağlamak için kullanılan yardımcı operatörü tanımlar :

{"_"  -> 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. satırda, ReplaceAll( /.) yukarıdaki boyutların yanı sıra boyut 1'in yıldızını temsil eden bir matris alır. Son adımlar için, ArrayFlattendaha kısa olan SubstitutionSystemve kullanırız StringRiffle.


2

Java 7, 295 bayt

Çözüm yöntemdir 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;}

Çevrimiçi Deneyin (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;
}

Teşekkür

  • Kevin Cruijssen sayesinde -1 bayt


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.