S 체인 그리기


27

배경

어렸을 때, 나는 (동급생들과 함께) 이상한 "S"모양을 그리는 방법을 배웠습니다. 오늘, 나는 그것을 재발견했고, 그것을 그리는 공식적인 접근 방식으로 인해 흥미로운 도전으로 이어질 수 있다고 생각했다.

"S"그리기

다음과 같은 간단한 단계에 따라 S를 그릴 수 있습니다.

먼저 세 개의 세로선으로 2 행을 그리십시오.

| | |

| | |

다음으로 상단 왼쪽 라인을 하단 중간 라인에 연결하고 상단 중앙을 하단 오른쪽 라인에 연결하여

| | |
 \ \
| | |

마지막으로 현재 그려진 이미지에 위와 아래를 그려서 마치

  ^
 / \
| | |
 \ \
| | |
 \ /
  v

보다시피, "S"모양이됩니다. 그러나 (2 행 이상으로 그리기) 확장하면 매우 흥미로운 패턴이 생성됩니다. 당신의 임무는이 흥미로운 패턴을 재현하는 것입니다.

태스크

여기에 정수가 주어지면 n >= 2S를 n행으로 출력 하십시오. 함수에서 출력을 반환하고 표준 방법으로 입력을 가져올 수 있습니다. 전체 이미지뿐만 아니라 각 라인에 대한 후행 / 앞 공백이 좋습니다. 그러나 선행 줄 간격은 ""이 깨지지 않도록 일관되어야합니다. 줄 목록으로 출력 할 수 있습니다.

테스트 사례

input
output
---

2

  ^
 / \
| | |
 \ \
| | |
 \ /
  v

---

8
  ^
 / \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ /
  v

---

10

  ^
 / \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ /
  v

이것은 이므로 가장 짧은 코드가 승리합니다! 행운을 빕니다,


13
Wikipedia SThe Cool S 라고 부르며 무한 버전의 anS Chain
Stephen

라인리스트로 출력 할 수 있습니까?
Mr. Xcoder

Mr.Xcoder @ 당신은 할 수있다
coinheringaahing 케어 드

@Stephen 10 분 인터넷 검색이 완료되지 않았습니다. 나는 질문의 이름을 편집 할 수 있습니다
coinheringaahing 케어 드

@cairdcoinheringaahing 이미지를 검색했는데, 아마 그럴 수도 있습니다 : P
Stephen

답변:



10

C # (. NET 코어) , 73 69 66 64 62 바이트

Barodus 덕분에 2 바이트와 펄과 비슷한 모양입니다. int 사용을 생각하지 않았습니까? 널을 위해.

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

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


1
이것이 기존 C # 답변의 골프 였다면 결코 말할 수 없었습니다. 잘 했어요 :-)
ETHproductions

무엇을 설명 할 수 있습니까 new string[n+1]? 나는 전에 그것을 본 적이 없다.
Ian H.

빈 문자열 AFAIK의 배열을 만듭니다. string.Join, 일명 join { "", "", "", ""}과 구분 기호가 "\ \ n | | | | \ n \"인
해킹을 사용했습니다.

@someone Woah, 나는 전에이 트릭을 인정하지 않았습니다. 정말 멋진! (또한 나쁜 new string[n+1]점은 배열 선언이 아닌 까다로운 문자열 생성자 이지만 -.-)
Ian H.

6

파이썬 3 , 48  56 59 61  바이트

lambda k:'  ^\n / %s/\n  v'%('\\\n| | |\n \ '*k)

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


단일 백 슬래시를 이스케이프 해제하여 2 바이트를 절약 할 수 있습니다.
L3viathan

@ L3viathan 그냥 업데이트
Mr. Xcoder


@ L3viathan 맞지 않습니다. 추가 \ \.
Mr. Xcoder

TIO : 예. 내 터미널에서 : 아니오.
L3viathan

6

05AB1E , 27 26 바이트

…^
/ð"\
| | |
\ "I×…/
vJ.c

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

대체 27 바이트 버전

'^…/ \©IF…| |û…\ \}\®R'v».c

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

설명

'^                             # push "^"
  …/ \©                        # push "/ \" and store a copy in register
       IF                      # input times do:
         …| |û                 # push "| | |"
              …\ \             # push "\ \"
                  }            # end loop
                   \           # discard top of stack (the extra "\ \")
                    ®R         # push "/ \" reversed = "\ /"
                      'v       # push "v"
                        »      # join stack on newlines
                         .c    # center each row

5
당신의 코드는 나에게 코끼리처럼 보입니다 :)
Wojowu

내 대답이 당신에게 얼마나 가까운 지 말 그대로 SCARY '^…/ \©IF„| ûû„\ û}\®R'v).C입니다.
Magic Octopus Urn

6

Japt , 34 25 23 바이트

" ^ /{ç'\²i|³1}/ v"¬¸ò5

온라인으로 테스트하십시오! 라인 배열로 출력합니다. -R개행에 참여하기 위해 플래그가 추가되었습니다. (@Shaggy 감사합니다)

번째 두 번째 시도는 불가능할 수 있습니다 ...

작동 원리

" ^ /{ ç'\²  i |³  1}/ v"¬ ¸  ò5
" ^ /{Uç'\p2 i'|p3 1}/ v"q qS ò5   Ungolfed
                                   Implicit: U = input number
        '\p2                       Repeat a backslash twice, giving "\\".
             i     1               Insert at index 1
              '|p3                   3 vertical bars. This gives "\|||\".
      Uç                           Make U copies of this string. U = 2: "\|||\\|||\"
" ^ /{              }/ v"          Insert this into this string.    " ^ /\|||\\|||\/ v"
                         q qS      Split into chars; join on spaces."  ^   / \ | | | \ \ | | | \ /   v"
                              ò5   Split into rows of length 5.    ["  ^  "," / \ ","| | |"," \ \ ","| | |"," \ / ","  v"]
                                   Joining on newlines gives "  ^  
                                                               / \ 
                                                              | | |
                                                               \ \
                                                              | | |
                                                               \ /
                                                                v"

숯을 때리고 SOGL을 묶는가? 잘했습니다!
얽히고 설킨

그런데 배열을 출력 할 수 있으므로 마지막 2자를 버릴 수 있습니다.
Shaggy

@Shaggy 훌륭합니다. 이제 우리가 이겼습니다!
ETHproductions

우리는 최근에 잘 지내고 있습니다 :)
Shaggy

6

SOGL V0.12 , 26 25 18 바이트

°I-‘*"∑ūCƨΩ)¹‘@∑5n

여기 사용해보십시오!

ETHproductions의 Japt 답변 과 동일한 전략을 사용합니다

설명:

..‘           push "\|||\"
   *          repeat input times
    "..‘      push " ^ /ŗ/ v ", with ŗ replaced with POP. The reason why there's a trailing
              space is because otherwise it didn't have enough repeating characters to compress
        @∑    join with spaces
          5n  split to line lengths of 5

2
push "|" and " "도대체 무엇입니까
Steven H.

1
@StevenHewitt 그것들은 실제로 2 개의 내장 기능이지만, 다른 것들과 마찬가지로 같이 결합했습니다. 왜냐하면 곧 함께 사용되는 것들을 분리 할 필요가 없다고 생각하기 때문입니다.
dzaima

5

자바 스크립트 (ES6), 60 바이트

n=>`  ^
 / \\
${`| | |
 \\ \\
`.repeat(n-1)}| | |
 \\ /
  v`

테스트 스 니펫


1
57 : n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'(백틱 및 문자 그대로의 줄 바꿈 사용)
edc65

5

, 27 26 25 바이트

Carlos Alejo 덕분에 -1 바이트. ASCII 전용으로 -1 바이트

  ^⸿ / ×\⸿| | |⸿ \ N/⸿  v

온라인으로 사용해보십시오! 링크는 자세한 버전입니다. # 차콜 상세 설명 난독 화


1
문자열을 추가하는 대신 Print를 호출하고 다음을 사용하여 1 바이트를 절약 할 수 있습니다 \r.`^ ⸿ / × \ ⸿ | | | ⸿ \ Iθ / ⸿ v`. 장황한 버전 .
찰리

아 .. \r줄 바꿈을 깔끔하게하는 방법으로 기억해야합니다 . 감사!
완전히 인간적인


@ ASCII 전용 : P -
totallyhuman


3

실제로 49 바이트

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"

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

설명:

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"
"| | |"@α                                          push a list containing n copies of the vertical lines
         ;lD" \ \"@α                               push a list containing n-1 copies of the diagonal connections
                    @Z♂i                           interleave
                        i                          flatten
                         "  v"" \ /"))             make the bottom
                                      " / \""  ^"  make the top

3

05AB1E , 38 바이트

…| |ûU"  ^
 / \"XI<F„ \2×X}" \ /
  v"»

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

…| |                         # Push "| |"
    û                        # Palindromize
     U                       # Store in X
      "..."X                 # Push the top three rows
            I<F      }       # One less than input times do:
               „ \           #   Push " \"
                  2×         #   Concatenate that with itself
                    X        #   Push "| | |"
                      "..."  # Push the last two rows
                           » # Join stack with newlines


3

C # (. NET 코어) , 101 77 73 바이트

난 항상 울고 덕분에 24 바이트를 절약 ! Kevin Cruijssen
덕분에 4 바이트가 절약되었습니다 !

n=>{var s="  ^\n / ";for(;n-->0;s+="\\\n| | |\n \\ ");return s+"/\n  v";}

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

평소처럼 C #에서 반복되는 문자열은 고통입니다.



@icrieverytim Ahhh는 물론 더 좋습니다.
Ian H.

당신은 변경할 수 있습니다 --n>=0n-->0s+="/\n v";return s;하는 return s+"/\n v";일부 바이트를 저장합니다.
Kevin Cruijssen

1
@KevinCruijssen 감사합니다!
Ian H.

3

레티 나 , 38 바이트

.+
$*
1
¶|||¶x\\
^
 ^¶x/\
.$
/¶ v
x?
 

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

각 행의 선행 공백 및 후행 열을 인쇄합니다.

설명

주요 바이트 절약은 모든 리터럴 부분의 공백을 생략하고 끝에 삽입함으로써 발생합니다. 이 그림은 서로 옆에 두 개의 비 공간이 없도록 구성되어 있으므로 모두 제거하면 끝의 모든 위치에 공간을 삽입하여 모양을 거의 고정시킬 수 있습니다.

^
/\
|||
\\
|||
\/
v

된다 :

 ^ 
 / \ 
 | | | 
 \ \ 
 | | | 
 \ / 
 v 

들여 쓰기를 제외하고는 거의 정확합니다. ^v두 공간 누락. 실제로 각 공간 앞에 명확한 공간을 삽입하면 끝에 두 개의 추가 공간이 생기기 때문에 실제로 수정하기가 더 쉽습니다. 슬래시가있는 줄은 추가 공간이 하나만 필요하므로 까다 롭습니다. 이 문제를 해결하기 위해 자리 표시 자 문자를 삽입합니다 ( x). 끝에 공백을 삽입하면 빈 일치 항목마다 공백을 삽입하는 것이 아니라 선택적으로 일치 x시킵니다. 대신 앞에 삽입 공간의 수단은, x상기 x자체를 교체 얻는다. 그리고 바로 다음에 빈 경기가 계속됩니다 x. 즉, 모든x다른 것을 변경하지 않고 정확히 하나의 공백을 추가합니다. 우리가 설정하고자하는 것은 이것입니다 :

 ^
x/\
|||
x\\
|||
x\/
 v

원하는 결과를 얻을 수 있습니다. 코드는 다음과 같습니다.

.+
$*

입력을 단항으로 변환하십시오.

1
¶|||¶x\\

및 (및 선행 줄 바꿈)을 사용하여 각각 1을 두 줄로 변환합니다 .|||x\\

^
 ^¶x/\

와 처음 두 줄 Inser ^x/\.

.$
/¶ v

최종 수정 x\\마지막으로 돌려 \로를 /하고있는 라인을 추가 v.

x?
 

x일치 또는 빈 일치 항목을 공백으로 바꾸십시오.


깔끔한 접근. Pip 솔루션에 결합 공간을 사용하는 방법을 찾으려고했지만 다른 행의 다른 선행 공간으로 인해 작동하지 않았습니다.
DLosc


2

Pyth, 40 바이트

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v

Steven Hewitt와 상당히 유사하지만 독립적으로 개발되었습니다.

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

설명

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v
K" / \ ""                                 Set K = " / \ "
        "  ^"                       "  v  Draw the end points.
             K                    _K      Draw the slants.
                         *Q]*3"| "        Draw the vertical bars...
              j+b+*2+d\\b                 ... interspersed with slants.


2

레티 나 , 45 바이트

이것은 매우 간단한 해결책입니다.

.+
$*
^1
  ^¶ /x
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

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

아트가 대신 1- 인덱싱 될 수 있다면 조금 더 짧을 것입니다 (44 바이트).

.+
  ^¶ /x$0$*1
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

2

, 45 42 33 바이트

"  ^
 / "."\
| | |
 \ "Xa."/
  v"

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

설명

줄 바꿈으로 인해 읽기가 어렵지만 코드는 정말 간단합니다. 구조를 보는 더 좋은 방법은 다음과 같습니다.

"prefix" . "repeated" X a . "suffix"

S- 체인에서 반복되는 요소는

   \
| | |
 \

이것을 리터럴 문자열로 가져 와서 반복하십시오 a( a첫 번째 명령 행 인수가있는 위치). 그런 다음 접두사를 추가하십시오.

  ^
 /

접미사를 추가하십시오.

   /
  v

인쇄합니다.

(이것이> <> 프로그램처럼 보이는 것을 좋아합니다.)


이것은 모험 시간의 Lumpy Space Princess 처럼 보입니다 :)
YSC



1

Excel, 60 바이트

="  ^
 / \
"&REPT("| | |
 \ \
",A1-1)&"| | |
 \ /
  v"

이것이 Google 스프레드 시트의 폴리 글 로트인지 확인해야합니다.
Taylor Scott

1

PowerShell , 83 , 57 바이트

"  ^
 / \"
1..--$args[0]|%{"| | |
 \ \"}
"| | |
 \ /
  v"

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

@AdmBorkBork의 제안에 따라

  • 쉽게 한 for숫자 범위를 사용하여 했습니다.
  • 대체 ;의 및 조합 된 문자열을 .
  • 불필요한 변수 정의를 제거했습니다.

for를 사용하여 루프를 많이 골프화 할 수 있습니다 1..--$args[0]|%{ }.
AdmBorkBork

또한 인접한 문자열 사이에 리터럴 줄 바꿈을 사용하여 절약 ";"할 수 있으며 $s완전히 제거하는 것이 더 저렴합니다 . 57 바이트
AdmBorkBork

멋진. 줄 바꿈 저장을 좋아합니다. 내가 기회를 놓친 것이 재미있다 1..$args. 이 사이트에 올바른 에티켓이 무엇인지 잘 모르겠습니다. 답변을 변경하고 크레딧을 받거나 솔루션을 별도의 답변으로 게시합니까?
root

변경 사항을 편집하고 크레딧을주는 것이 적절한 예절입니다. PPCG에 오신 것을 환영합니다.
AdmBorkBork


1

젤리 , 32 바이트

Lynn의 Python 솔루션의 지루한 포트 .

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”

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

설명:

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”    Example input: 5
“\¶| | |¶ \ ”                       Literal string "\¶| | |¶ \ " (¶ = newline). Result: "\¶| | |¶ \ "
             ẋ                      Repeat as many times as the (implicit) input. Result: "\¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
              ṭ                     Tack that on the end of...
               “  ^¶ / ”            ...the string "  ^¶ / ". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
                        ;           Append...
                         “/¶  v”    The string "/¶  v". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ /¶  v"
                                    Implicit print

1

실제로 30 바이트

이것은 ETHproductions의 Japt answer 와 같은 원리로 작동합니다. 여기서 여분의 공간이 추가되고 암시적인 인쇄를 위해 전체 문자열이 5 행으로 분할됩니다. 온라인으로 사용해보십시오!

"\|||\"*" ^ /"+"/ v"@+#' j5@╪i

언 골핑

            Implicit input.
"\|||\"*    Add the middle portion and multiply that by the input.
" ^ /"+     Append the top.
"/ v"@+     Append the bottom.
#           Convert into a list of strings
' j         Join with spaces.
5@╪         Split into a list of length-5 strings.
i           Flatten list onto the stack for implicit printing with newlines.

자신의 언어로 Mego를 능가하는 훌륭한 직업!
caird coinheringaahing

1

젤리 , 25 23 바이트

이것은 ETHproductions의 Japt answer 와 동일한 원리로 작동하며 나중에 추가 공간이 추가되고 전체 문자열이 인쇄 전에 길이가 5 인 문자열로 분할됩니다. 온라인으로 사용해보십시오!

편집 : 나는 골퍼 방식으로 S 체인의 상단과 하단에 합류하는 방법이 있다는 것을 알고있었습니다. -2 바이트의 Outgolfer Erik에게 감사합니다.

“\|||\”ẋ“ ^ /“/ v”jKs5Y

언 골핑

                Left argument: n
“\|||\”ẋ        Repeat the middle portion n times.
“ ^ /“/ v”j     Append the top and bottom.
K               Join with spaces.
s5              Split into a list of length-5 strings.
Y               Print the strings with linefeeds.

“\|||\”ẋ“ ^ /“/ v”jKs5Y
Outgolfer Erik

1

, 25 바이트

↘^\¶/¶G→⁵↓⊕⊗N←⁵|¶ \↗¶\¶v/

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


완전히 다른 접근법을 사용하여 다른 숯의 답 이 동일한 바이트 수인 방법이 재미 있습니다. 그래도 나는 당신을 더 좋아합니다. 다른 하나는 하드 코딩에 가깝지만 실제로는 차콜의 힘을 사용하고 있습니다.
Kevin Cruijssen

@KevinCruijssen 당신은 힘을 말하지만, 그것은 실제로 대각선으로 인쇄되어야합니다; 슬프게도 내가 할 수있는 최선은 29 바이트였습니다.↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
Neil


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