반 지그재그 구축 OOOOOO N = 6: OOOOOOO OOO OOO

N입력 으로 양의 정수가 제공 됩니다. 당신의 임무는 N각 길이 의 측면, 세미 지그재그를 구축하는 것 N입니다. 작업을 명확하게 설명하기가 상대적으로 어렵 기 때문에 다음과 같은 몇 가지 예가 있습니다.

  • N = 1:

    영형
    
  • N = 2:

    영형
     OO
    
  • N = 3:

    OO
     OO
      OOO
    
  • N = 4:

    OOOOO
     OO
      OO
       OOOO
    
  • N = 5:

    OOOOOO
     OOO
      OOO
       OOO
        OOOOOO
    
  • N = 6:

    OOOOOOO
     OOO
      OOO
       OOO
        OOO
         OOOOOOOOOOOO
    
  • N = 7:

    OOOOOOOOO
     OOOO
      OOOO
       OOOO
        OOOO
         OOOO
          OOOOOOOOOOOOOO
    
  • 더 큰 테스트 케이스 N = 9

보시다시피 세미 지그재그는 대각선과 수평선이 번갈아 만들어지며 항상 왼쪽 상단에서 오른쪽 하단 대각선으로 시작합니다. 수평선의 문자는 공백으로 구분됩니다.

규칙

  • 당신은 어떤 공백이 아닌를 선택할 수 있습니다 문자를 대신 O조차 일치하지 않을 수 있습니다.

  • 결과를 문자열 또는 각 줄을 나타내는 문자열 목록으로 출력 / 반환 할 수 있습니다 .

  • 후행 또는 선행 줄 바꿈이있을 수 있습니다.

  • 기본 허점이 적용됩니다.

  • 표준 수단으로 입력하고 출력 할 수 있습니다 .

  • 가능하면 제출물에 테스트 링크를 추가하십시오. 나는 골프 활동을 보여주고 설명이있는 답변을지지 할 것이다.

  • 이것은 이므로 모든 언어에서 가장 짧은 바이트 코드가 이깁니다!



답변

, 24 바이트

FN«↶§7117ι×⁺#× ﹪ι²⁻Iθ¹»#

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

Neil 덕분에 -5 .

AST :

Program
├F: For
│├N: Input number
│└Program
│ ├↶: Pivot Left
│ │└§: At index
│ │ ├'7117': String '7117'
│ │ └ι: Identifier ι
│ └Print
│  └×: Product
│   ├⁺: Sum
│   │├'#': String '#'
│   │└×: Product
│   │ ├' ': String ' '
│   │ └﹪: Modulo
│   │  ├ι: Identifier ι
│   │  └2: Number 2
│   └⁻: Difference
│    ├I: Cast
│    │└θ: Identifier θ
│    └1: Number 1
└Print
 └'#': String '#'


답변

파이썬 2 , 157153 바이트

n=input()
o,s=q='O '
def p(k,t=q*n+s*(4*n-6)):print(t*n)[k*~-n:][:n*3/2*~-n+1]
p(2)
for i in range(n-2):p(0,i*s+s+o+s*(4*n-7-2*i)+o+s*(2*n+i-2))
n>1>p(5)

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

  • n*3/2*~-n+1 각 줄의 너비는 다음과 같습니다. ⌊3n / 2⌋ · (n-1) + 1 자.
  • 문자열 q*n+s*(4*n-6)은 맨 위와 맨 아래 행을 나타냅니다. 우리가 그것을 반복하고 슬라이스 [2*(n-1):]하면 최상위 행을 얻습니다. 슬라이스 [5*(n-1):]하면 맨 아래 줄이 나타납니다. 따라서 정의 p와의 통화 p(2)p(5). 그러나 다른 모든 라인에 대해 반복 및 라인 길이 슬라이싱이 필요하기 p때문에 루프에서 재사용 할 수 있습니다.
  • 이것은 i*s+s+o+…중간 행에 대한 지루한 표현입니다.
  • n>1>p(5)경우 단락 것이다 n≯1원인, p(5)평가되지 수 있습니다. 따라서이 줄임말입니다 if n>1:p(5).

답변

매쓰, 126 125 121 112 104 89 86 바이트

(m=" "&~Array~{#,#^2-#+1};Do[m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X",{j,#},{i,#}];m)&
  • #익명 함수의 입력 번호입니다 (final로 끝남 &).
  • m=" "&~Array~{#,#^2-#+1};#,#^2-#+1일정한 익명 함수 “출력 공간”의 출력으로 주어진 차원의 배열을 채워서 적절한 크기의 공백 문자 행렬을 만듭니다 " "&.
  • Do[foo,{j,#},{i,#}]중첩 DO 루프의 쌍이고 j범위 1#그 내부 i에서 범위 1#.
  • m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X"매트릭스의 대응하는 부분이 문자 수에 세트 X에 기초 j하고 i. 은 -i에서 바이트를 저장하는 음의 색인을 사용합니다 #-i+1. (I 쓰는 것을 잊었 Mod[j,4]으로 j~Mod~4Jenny_mathy 우리는 (오히려 사용하는 것보다 직접 목록에 인덱스 모듈 잔류 물을 사용할 수 있음을 지적했다.이 코드의 원래 버전에서) Switch9 바이트를 저장) 및 JungHwan 분은 우리가 ‘didn를 지적 ReplacePart우리는 배열의 일부를 설정할 수 1[i,#,-i][[j~Mod~4]]있고 이상한 행동과 일반성 을 사용하여 [[foo]]바이트를 절약 하기 때문에 사용할 필요가 없습니다.{1,i,#,-i}[[j~Mod~4+1]]
  • 메타는 문자 목록이 문자열이라는 것을 확립 했기 때문에 ( 정환 민이 지적한 바와 같이 ) 문자 행렬은 이미 “문자열”목록이므로 문자 행렬의 행에 함수를 매핑 할 필요가 없습니다.

다음과 같은 코드를 붙여 넣고 Shift + Enter 또는 숫자 키패드 Enter 를 눌러 Wolfram Cloud 샌드 박스 에서이를 테스트 할 수 있습니다 .

(m=" "&~Array~{#,#^2-#+1};Do[m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X",{j,#},{i,#}];m)&@9//MatrixForm


답변

C ++, 321234 바이트

Zacharý 덕분에 -87 바이트

#include<vector>
#include<string>
auto z(int n){std::vector<std::string>l;l.resize(n,std::string(n*n+n/2*(n-1),32));l[0][0]=79;int i=0,j,o=0;for(;i<n;++i)for(j=1;j<n;++j)l[i%4?i%4-1?i%4-2?0:n-j-1:n-1:j][i*n+j-i+(o+=i%2)]=79;return l;}

문자열로 구성된 벡터를 반환


답변

Mathematica, 179 바이트

Rotate[(c=Column)@(t=Table)[{c@(a=Array)[" "~t~#<>(v="o")&,z,0],c@t[t[" ",z-1]<>v,z-1],c@a[t[" ",z-2-#]<>v&,z-1,0],c@t[v,z-Boole[!#~Mod~4<1]-1]}[[i~Mod~4+1]],{i,0,(z=#)-1}],Pi/2]&

@JungHwanMin에 대한 편집


답변

05AB1E , 21 20 19 바이트

암호

새로운 캔버스 모드를 사용합니다 :

Fx<)Nè'ONÉúR3212NèΛ

05AB1E 인코딩을 사용합니다 . 온라인으로 사용해보십시오!

설명:

F                      # For N in range(0, input)
 x<)                   #   Push the array [input, 2 × input - 1]
    Nè                 #   Retrieve the Nth element
      'ONÉúR           #   Push "O" if N is odd, else "O "
            3212Nè     #   Retrieve the Nth element of 3212
                  Λ    #   Write to canvas

입력 6의 경우 캔버스에 대해 다음과 같은 인수가 동일한 순서로 제공됩니다.

[<num>, <fill>, <patt>]
[6,     'O',     3]
[11,    'O ',    2]
[6,     'O',     1]
[11,    'O ',    2]
[6,     'O',     3]
[11,    'O ',    2]

캔버스의 기능을 설명하기 위해 위 목록에서 첫 번째 인수 세트를 선택합니다.

숫자 6 은 캔버스에 기록 될 문자열 의 길이 를 결정합니다 . 필러는 캔버스에 쓰는 데 사용되며이 경우에는입니다 O. 필러 문자열을 통해 주기적으로 실행됩니다. 문자열의 방향은 최종 인수 방향으로 결정됩니다. 지시 사항은 다음과 같습니다.

7  0  1
 \ | /
6- X -2
 / | \
5  4  3

이것은 3 이 방향을 남동쪽 으로 설정 한다는 것을 의미하며, 온라인 에서도 시도 할 수 있습니다 .


답변

SOGL V0.12 , 36 바이트

╝.H∫2\?.╝}F2%?№@.┌Ο};1w⁄Hh1ž}.4%1>?№

여기 사용해보십시오!

기본 아이디어는 입력 범위의 각 숫자에 대해 대각선 또는 수평 점선 부분을 추가하는 것을 선택하는 것입니다.이 경우 배열을 더 쉽게 추가 할 수 있습니다. 설명:

╝                                     get a diagonal from the bottom-left corner with the length of the input - the starting canvas
 .H∫                        }         for each number in the range [1,inp-1] do, pushing counter
    2\?  }                              if it divides by 2, then
       .╝                                 create another diagonal of the input
          F2%                           push counter % 2
             ?     }                    if that [is not 0]
              №                           reverse the current canvas upside down
               @.┌Ο                       get an alternation of spaces and dashes with the dash amount of the input length
                    ;                   get the canvas on top of the stack
                     1w⁄                get its 1st element length
                        H               decrease it
                         h              swap the bottom 2 items - the canvas is now at the bottom and the current addition ontop
                          1             push 1
                           ž            at 1-indexed coordinates [canvasWidth-1, 1] in the canvas insert the current part made by the Ifs
                             .4%1>?   if input%4 > 1
                                   №    reverse the array vertically

1의 입력이 허용되지 않으면 ο.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№작동합니다. 주위에 떠 다니는 임의의 숫자가 허용 .∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№되면 작동합니다. 내가 구현 게으른 아니었다면 , }F2%?로 대체 될 수 -4 바이트