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
보시다시피 세미 지그재그는 대각선과 수평선이 번갈아 만들어지며 항상 왼쪽 상단에서 오른쪽 하단 대각선으로 시작합니다. 수평선의 문자는 공백으로 구분됩니다.
규칙
답변
숯 , 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~4
Jenny_mathy 우리는 (오히려 사용하는 것보다 직접 목록에 인덱스 모듈 잔류 물을 사용할 수 있음을 지적했다.이 코드의 원래 버전에서)Switch
9 바이트를 저장) 및 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
답변
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 바이트