CJam, 48 46 바이트
li(_S*"/\\":T+\{_N@S+TW%/S2**" /"/"\ "f/:+T*}*
문제의 관측치 1과 2를 기반으로 한 간단한 재귀 접근법.
온라인으로 사용해보십시오.
작동 원리
li( " L := int(input()) - 1 ";
_S* " A := L * ' ' ";
"/\\":T+ " A += (T := '/\') ";
\{ " do L times: ";
_N " push A, '\n' ";
@S+ " A += ' ' ";
TW%/ " B := A.split(reverse(T)) ";
S2** " A := ' '.join(B) ";
" /"/ " B := A.split(' /') ";
"\ "f/ " C := { X.split('\ ') : X ∊ B } ";
:+T* " A := T.join(sum(C, [])) ";
}* " ";
CJam, 51 바이트
li__2mL,1a\{2_@##)1$f*+}/<f{2b_" /\\"2/f=@@,-S*\N}
나는이 접근법을 더 좋아하지만 재귀 적과 경쟁 할 수는 없습니다. 2mL
(최소 O (2 n ) 실행 시간이 발생 함) 을 제거한 후에도 여전히 48 바이트입니다 ...
이 방법은 /\
'를 1로 인코딩 하고 그 사이에 공백을 0으로 인코딩 합니다. 결과 배열 이진수를 고려하면, n 번째 행 의 구성 이 다른 Fermat 수 ( 2 2 k +1 형식의 정수)의 곱으로 표현 될 수있는 1보다 큰 n 번째 정수에 해당함을 알 수 있습니다 .
작동 원리
li__2mL,1a " push L := int(input()), L, R := range(log(L)/log(2)), A := [1] ";
\{2_@##)1$f*+}/ " for I in R: A += { a × 2**(2**I) : a ∊ A } ";
< " A := A[:L] ";
f{ " for I in R: push L, I ";
2b_" /\\"2/ " push (B := base(I, 2)), B, S := [ ' ' '/\' ] ";
f= " for J in I: J := S[J] ";
@@,-S*\N " push (L - len(B)) * ' ', J, '\n' ";
} " ";