SQL, 182 175 173 187 바이트
이것이 가장 짧은 것은 아니지만 여전히 sql을 최소화하려고 시도하는 것이 재미 있습니다.) lol 나는 Oracle 11 에서이 작업을 수행했지만 기본 SQL이어야합니다. 지적했듯이, input = 1 규칙을 적용하지 않았으며 2 줄만 표시했습니다. 더 좋은 방법을 생각할 수는 없지만, 나는 v 로직을 수정하여 몇 바이트를 절약했다; 2) 미리 2를 추가하면 나중에 반복하지 않아도 몇 바이트가 절약된다 [/ edit]
select decode(&i,1,'',rpad(' ',v,'____')||z)||rpad(' /',v,'\ /')||decode(y,1,'\')||z||rpad('/',v-1,'__\/')||decode(y,1,'__\')from(select 2+floor(&i/2)*4v,mod(&i,2)y,chr(10)z from dual);
[edit1]은 불필요한 공백을 제거했습니다. [/ edit1] [edit2] && i가 & i로 변경되었습니다. 그것은 2 문자를 줄이지 만 사용자가 삼각형 수를 두 번 입력하도록 강요합니다. 공포!! [/ edit2]
설명
(참고 :이 설명에서는 && 1을 사용하므로 한 번만 프롬프트되고 위의 & 1은 코드 공간을 절약하지만 여러 번 프롬프트합니다.)
select -- line 1
decode(&&1,1,'', -- don't need line 1 if input is 1
rpad(' ',v,'____') || z ) || -- every pair of triangles
-- line 2
rpad(' /',v,'\ /') || -- every pair of triangles
decode(y,1,'\') || z || -- add the final triangle, input: 1,3,5 etc.
-- line 3
rpad('/',v-1,'__\/') || -- every pair of triangles
decode(y,1,'__\') -- add the final triangle, input: 1,3,5 etc.
from (select 2+floor(&&i/2)*4 v, -- common multiplier. 4 extra chars for every triangle pair
mod(&&i,2) y, -- Flag for the final triangle (odd inputs, 1,3,5, etc)
chr(10) z -- CR, here to save space.
from dual);
산출
SQL> accept i
1
SQL> /
/\
/__\
SQL> accept i
2
SQL> /
____
/\ /
/__\/
SQL> accept i
3
SQL> /
____
/\ /\
/__\/__\
SQL> accept i
12
SQL> /
________________________
/\ /\ /\ /\ /\ /\ /
/__\/__\/__\/__\/__\/__\/
SQL>