ASCII 별을 그립니다.


15

팔 크기를 입력으로하여 ASCII 별을 그리는 프로그램이나 함수를 작성하십시오.

여기 별의 크기가 있습니다 1

_/\_
\  /
|/\|

여기 별의 크기가 있습니다 2

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

여기 별의 크기가 있습니다 3

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

등등.

입력

하나의 양의 정수 편리한 형식으로 , n > 0.

산출

위의 규칙에 따라 별의 ASCII 예술 표현. 포인트가 적절하게 정렬되면 선행 / 후행 줄 바꿈 또는 기타 공백은 선택 사항입니다.

규칙

  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

6
화면 만 보입니까, 아니면 별이 비정상적으로 키가 크고 얇습니까?
caird coinheringaahing

2
멍청한 ASCII와 얕은 경사의 부족 ...
완전히 인간적인

@cairdcoinheringaahing SE에서 사용하는 글꼴은 정사각형이 아닙니다. 줄 사이에 큰 공백이있어 왜곡이 증가합니다.
AdmBorkBork

답변:


12

, 20 17 바이트

Neil 덕분에 -3 바이트.

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

온라인으로 사용해보십시오! 링크는 자세한 버전입니다.

이 골프에 만족해서 ...

설명

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 세까지 떨어졌습니다.

만약 당신이했던 것과 같은 방식으로 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

파이썬 2 ,  166160157155152  바이트

그만큼 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]

온라인으로 사용해보십시오!

Jonathan Frech 덕분에 3 바이트가 절약되었습니다 .


당신은 대체하여 몇 바이트를 절약 할 수 t=" ";y,z=t*2,"\\"와 함께 t,z=" \\";y=t+t.
Jonathan Frech

@JonathanFrech 감사합니다.
Mr. Xcoder September

3

자바 (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 [] [] = 새로운 int [n * 3] [w]; for (; 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; for (int [] b : l) System.out.println (새 문자열 (b, 0, w) .replace ( " ", ""));}

온라인으로 사용해보십시오!


비트 단위 트릭을 사용하고 모든 정수 선언을 루프 외부로 이동 ( 270 바이트 ) 하면 10 바이트 단축 할 수 있습니다.
Mr. Xcoder

그리고 int o=루프 외부 ( 268 바이트 ) 를 이동시켜 또 다른 2 바이트를 절약 할 수 있습니다.
Mr. Xcoder

for-loop 괄호를 제거하고 264 bytes 와 같이 ++마지막 발생에서 직접 사용하여 4 바이트를 더 절약 할 수 있습니다 . i
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보다 짧은 SubstitutionSystem, 및을 사용 StringRiffle합니다.


2

자바 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)

언 골프

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

감사의 말

  • Kevin Cruijssen 덕분에 -1 바이트


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.