지그재그 패턴 만들기


25

당신의 작업은 하나의 정수 입력을 받아 슬래시와 백 슬래시를 사용하여 지그재그 패턴을 인쇄하는 것입니다.

  • 정수 입력은 각 지그 및 zag의 길이와 지그 및 zag의 수를 결정합니다.
  • 패턴은 항상 오른쪽에서 왼쪽으로 시작합니다

테스트 사례

4->
   /
  /
 /
/
\
 \
  \
   \
   /
  /
 /
/
\
 \
  \
   \
2->
 /
/
\
 \
0->
1->
/
8->
       /
      /
     /
    /
   /
  /
 /
/
\
 \
  \
   \
    \
     \
      \
       \
       /
      /
     /
    /
   /
  /
 /
/
\
 \
  \
   \
    \
     \
      \
       \
       /
      /
     /
    /
   /
  /
 /
/
\
 \
  \
   \
    \
     \
      \
       \
       /
      /
     /
    /
   /
  /
 /
/
\
 \
  \
   \
    \
     \
      \
       \

3
각 줄의 배열 / 문자열 목록을 출력 할 수 있습니까? 훈련 또는 선행 개행 또는 공백이 허용됩니까?
얽히고 설킨

2
패턴에 영향을 미치지 않는 한 선행 공백이 괜찮습니까?
Emigna

답변:


10

C (GCC) , 108 (102) 101 98 80 76 72 바이트

  • Kevin Cruijssen 덕분에 6 바이트를 절약했습니다 . 괄호를 제거하고 골프 N-n-1N+~n
  • Z의 증분을 루프 조건으로 이동하여 바이트를 저장했습니다.
  • printf("%c\n",...)대신에 3 바이트를 절약했습니다.putchar(...),puts("")
  • (!) 저장 여덟는 덕분에 바이트 HatsuPointerKun을 ; 사용하는 printf("%*s",n,"");잉크에 n공백이 아닌 루프를 사용하여 j;for(j=n;j--;)putchar(32);모두와 함께 printf(...);통화
  • printf("%*c",-~n,...);대신에 4 바이트를 절약printf("%*s%c",n,"",...);
  • nwellnhof 덕분에 4 바이트를 절약했습니다 . 두 개가 아닌 하나의 루프 내에서 모든 것을 이동
j;f(k){for(j=0;j<k*k;j++)printf("%*c\n",j/k%2?j%k+1:k-j%k,j/k%2?92:47);}

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


Z,n,j;f(N){for(Z=0;Z<N;Z++)for(n=N;n--;putchar(Z%2?92:47),puts(""))for(j=Z%2?N+~n:n;j--;)putchar(32);} 102 바이트 . 루프 안에 모든 것을 넣어서 중괄호를 제거했습니다. 로 변경 N-n-1되었습니다 N+~n.
Kevin Cruijssen

1
@KevinCruijssen 감사합니다. 둘 다 Z%2?...:...바꾸고 Z<N;Z++로 바꾸어 다른 바이트를 저장 했습니다 Z++<N;.
Jonathan Frech

1
내 대답 에서했던 것처럼 printf 마술을 사용하여 몇 바이트를 절약 할 수 있습니다 . 이렇게하면 공백을 인쇄하는 데 사용되는 for 루프를 제거 할 수 있습니다. 자세한 내용은 printf를 사용한 왼쪽 패딩 공간에 대한 이 스택 오버플로 답변을 참조하십시오.
HatsuPointerKun

@HatsuPointerKun 감사합니다; 그것은 C에서 공백을 반복하는 정말 짧은 방법입니다.
Jonathan Frech

4 바이트 더 짧음 : i;f(N){for(i=0;i<N*N;i++)printf("%*c\n",i/N%2?i%N+1:N-i%N,i/N%2?92:47);}. 온라인으로 사용해보십시오!
nwellnhof

10

, 16 10 9 바이트

FN«↖Iθ→‖T

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


이것은 작동합니다 ( InputNumber골프 모드에서도 깨졌 습니까 ?)
ASCII 전용

@ASCII 전용 아니요. 따라서 간결한 버전과 대략적인 자세한 버전으로 연결되는 별도의 링크입니다.
Neil

오> _>는 어떤 링크가 열려 있는지 보지 못했습니다.
ASCII 전용

@ ASCII-only 이제 하나의 링크 만 있습니다 ;-)
Neil

4

MATL , 17 바이트

:"GXy@o?P47}92]*c

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

설명

:         % Implicit input, n. Push range [1 2 ... n]
"         % For each k in that range
  G       %   Push n again
  Xy      %   Identity matrix of that size
  @       %   Push k
  o?      %   If it's odd
    P     %     Flip the matrix upside down
    47    %     Push 47 (ASCII for '/')
  }       %   Else
    92    %     Push 92 (ASCII for '\')
  ]       %   End
  *       %   Multiply each entry of the matrix by that number
  c       %   Convert to char. Char 0 is shown as space
          % Implicit end. Implicit display

4

C # (.NET 코어) , 117 (103) 101 바이트

a=>{for(int z=a+1,e=0;e<a*a;)System.Console.WriteLine(e++/a%2<1?"/".PadLeft(--z):@"\".PadLeft(z++));}

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


다음과 같이 14 바이트를 저장할 수 있습니다. a=>{var o="";for(int z=a+1,e=0;e<a*a;)o+=(e++/a%2<1?"/".PadLeft(--z):@"\".PadLeft(z++))+"\n";return o;} 103 바이트 괄호가 모두 필요하지는 않습니다. 당신은 결합 할 수 있습니다 int; +"\n"한 번만 추가하십시오 .
Kevin Cruijssen


흠, 문자열을 반환하는 대신 직접 인쇄하여 2 바이트를 더 절약 할 수 있습니다. a=>{for(int z=a+1,e=0;e<a*a;)System.Console.WriteLine(e++/a%2<1?"/".PadLeft(--z):@"\".PadLeft(z++));} 101 바이트
Kevin Cruijssen

3

SOGL V0.12 , 13 12 9 바이트

╝F{±↔}P}ø

여기 사용해보십시오!

╝F{±↔}P}0 테스트 케이스가 필요하지 않은 경우 8 바이트 일 수 있습니다.

설명:

       }   implicitly started loop repeated input times
╝            create a down-right diagonal of the input
 F           get the current looping index, 1-indexed
  {  }       that many times
   ±↔          reverse the diagonal horizontally
      P      print that
        ø  push an empty string - something to implicitly print if the loop wasn't executed


3

매스 매 티카, 84 90 바이트

(n=#;Grid@Array[If[Abs[n-(s=Mod[#-1,2n])-.5]==#2-.5,If[s<n,"‌​/","\\"],""]&,{n^2,n‌​}])&
  • -6 바이트에 대해 Jenny_mathy에게 감사합니다.

나는 왜 왜 \분명히 더 어두울 지 모른다 /.

여기에 이미지 설명을 입력하십시오


2
84 바이트(n=#;Grid@Array[If[Abs[n-(s=Mod[#-1,2n])-.5]==#2-.5,If[s<n,"/","\\"],""]&,{n^2,n}])&
J42161217 10

3

Jq 1.5 , 94 89 바이트

["/","\\"][range($n)%2]as$s|range($n)|[(range(if$s=="/"then$n-.-1 else. end)|" "),$s]|add

설명

  ["/","\\"][range($n)%2] as $s                         # for $s= / \ / \ $n times 
| range($n)                                             # for .=0 to $n-1
| [(range(if $s=="/" then $n-.-1 else . end)|" "), $s]  # form list of spaces ending with $s
| add                                                   # concatenate

샘플 실행

$ jq -Mnr --argjson n 5 '["/","\\"][range($n)%2]as$s|range($n)|[(range(if$s=="/"then$n-.-1 else. end)|" "),$s]|add'
    /
   /
  /
 /
/
\
 \
  \
   \
    \
    /
   /
  /
 /
/
\
 \
  \
   \
    \
    /
   /
  /
 /
/

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


3

자바 (8) 140 134 116 바이트

n->{String r="";for(int a=0,b,c;a++<n;)for(b=n;b-->0;r+=a%2>0?"/\n":"\\\n")for(c=b-n+b|-a%2;++c<b;r+=" ");return r;}

@Nevay 덕분에 -24 바이트 .

설명:

여기에서 시도하십시오.

n->{                // Method with integer parameter and String return-type
  String r="";      //  Result-String
  for(int a=0,b,c;  //  Index integers
      a++<n;)       //  Loop (1) from 0 to the input (exclusive)
    for(b=n;        //   Reset `b` to the input
        b-->0;      //   Inner loop (2) from the input to 0 (exclusive)
                    //     After every iteration: 
        r+=a%2>0?"/\n":"\\\n") 
                    //      Append either of the slashes + a new-line
      for(c=b-n+b|-a%2;++c<b;r+=" ");
                    //    Append the correct amount of spaces
                    //   End of inner loop (2) (implicit / single-line body)
                    //  End of loop (1) (implicit / single-line body)
  return r;         //  Return the result-String
}                   // End of method

1
가장 안쪽 루프의 조건은 c-->f*(b-n-~b)(-6 바이트) 로 쓸 수 있습니다 .
Nevay

1
116 바이트 :n->{String r="";for(int a=0,b,c;a++<n;)for(b=n;b-->0;r+=a%2>0?"/\n":"\\\n")for(c=b-n+b|-a%2;++c<b;r+=" ");return r;}
Nevay

3

자바 스크립트 ES8, 83 79 78 76 75 74 71 바이트

* Shaggy 덕분에 ES8에서 1 바이트 감소

A=(m,i=0)=>i<m*m?`/\\`[x=i/m&1].padStart(x?i%m+1:m-i%m)+`
`+A(m,++i):""

여기서 테스트


누가 내 솔루션을 다운 보트했는지 설명해 주시겠습니까? 내가 뭔가를 놓치고 있습니까?
DanielIndie

2
나는 downvoted 한 사람이 아니지만, 함수가 유효하려면 반복 가능해야하기 때문이라고 가정합니다. i기본 매개 변수 를 만들어서 쉽게 고칠 수 있습니다 . 바이트 수도 떨어져 보입니다.
Emigna

1
사람들이 솔루션을 쉽게 테스트 할 수 있도록 TIO 링크를 추가하는 것도 언제나 감사합니다.
Emigna

1
@Emigna는 그것을 고쳤습니다 (char wise and Link wise) :)
DanielIndie

1
일부 ES8에서 74 바이트 . 또한 JS의 경우 TIO 대신 스택 스 니펫을 사용할 수 있습니다.
얽히고 설킨



2

Pyth, 17 바이트

js<*_+RV"\/"_B*L;

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

설명:

js<*_+RV"\/"_B*L;QQQ   implicit Qs at the end
              *L;Q     list with ["", " ", "  ", ..., " "*(input-1)]
            _B         bifurcate with reverse: [["" to "   "], ["   " to ""]]
     +RV"\/"           append to each one either "\" or "/": 
                       [["\", to "   \"], ["   /" to "/"]]
    _                  reverse
   *              Q    repeat input times
  <                Q   but only take the first input many
 s                     flatten the list of lists
j                      print on each line

2

파이썬 3 : 90 바이트 82 바이트

lambda n:"\n".join(" "*(abs(i%(n*2)-n+i//n%2)-1)+"/\\"[i//n%2]for i in range(n*n))

인쇄가 필요하지 않고 첫 번째 지그가 잘못된 방법임을 지적한 @Jonathan Frech에게 감사드립니다.


] for-> ]for.
Jonathan Frech

필요하지 않습니다 print(...). 문자열을 반환하는 함수가 유효합니다. 또한 초기 지그의 방향이 잘못되었습니다 (/ 대신 \).
Jonathan Frech

@JonathanFrech 감사합니다! 나는 그것을 바꿨다
Bassintag

1
(abs(...)-1)-> ~-abs(...).
Jonathan Frech

2

05AB1E , 17 16 바이트

F<„/\Nèú.sNƒR}»,

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

설명

F                  # for N in [0 ... input-1] do
  „/\              # push the string "/\"
     Nè            # cyclically index into this string with N
 <     ú           # prepend input-1 spaces to this string
        .s         # get suffixes
          NƒR}     # reverse the list of suffixes input+1 times
              »,   # join on newline and print

캔버스를 사용하여 현재 최선의 시도 :

F„/\Nè©53NèΛ2®ð«4Λ



2

Dyalog APL , 39 36 35 34 바이트

{↑((,⍵ ⍵⍴(⌽,⊢)⍳⍵)/¨' '),¨⍵/⍵⍴'/\'}

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

Zacharý 덕분에 1 바이트 절약


멍청 아, 1 바이트 씩 날 때려 확인한 다음 제거 할 수 ⎕IO있습니다 . 0¯1+
Zacharý

@ Zacharý 나는 단지 그렇게하려고했다 : p
dzaima

아, 한가지 더 : (⌽,⊢)⍳⍵대신(⌽⍳⍵),⍳⍵
Zacharý

@ Zacharý 그래, 나는 아직 압정, 암묵 및 그와 함께 제공되는 것들을 이해하지 못했다 : /
dzaima

걱정하지 마십시오. 전철 / 포크 / 무엇을 일이라고 부르는지 완전히 이해할 수 없습니다.
Zacharý



1

엑셀 VBA, 84 83 바이트

범위에서 입력 [A1]을 받고 VBE 즉시 창으로 출력하는 익명 VBE 즉시 창 기능

For i=1To[A1]:For j=1To[A1]:?IIf(i mod 2,Space([A1]-j)&"/",Space(j-1)&"\"):Next j,i





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