나에게 타워 블록을 인쇄


16

가능한 가장 짧은 코드로 타워 블록을 인쇄하십시오.

입력:

입력은 타워 블록의 층 수를 정의합니다. 1 층에는 문의 양쪽에 창이 있습니다. 이 창은 3x3 해시로 구성됩니다.

4 층 타워 블록의 예는 다음과 같습니다.

      =====================
      )V V V V V V V V V V(
     )V V V V V V V V V V V(
    )V V V V V V V V V V V V(
   )V V V V V V V V V V V V V(
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : _______ : : : : :
   : : ### : I     I : ### : :
   : : ### : I     I : ### : :
   : : ### : I     I : ### : :
   : : : : : I     I : : : : :

최신 정보:

입력은 하나 이상이어야합니다.

줄 끝의 후행 공백이 허용됩니다.

이 예에서는 모든 줄에 3 개의 선행 공백이 있습니다. 이것은 필수 사항이 아니며 입력이있는 타워 블록 만입니다.


2
입력 값이 1보다 작을 수 있습니까?
nmjcman101

2
줄 끝의 후행 공백이 허용됩니까?
ngenisis

질문 해 주셔서 감사합니다. 내 질문의 업데이트를 참조하십시오.
Belfield

답변:


6

V , 72 바이트

13iV r(É)3ñįlxñÄ21r=GÙÒ~Ù14R: ÙÄ2w3r#7w.3ÄkdGÀpG4k5w7r_bêojrIÎfIl5r 

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

다음은 16 진수 덤프입니다. 여기에는 인쇄 할 수없는 문자가 포함되어 있습니다.

00000000: 3133 6956 201b 7228 c929 33f1 c4af 6c78  13iV .r(.)3...lx
00000010: f1c4 3231 723d 47d9 d27e d931 3452 3a20  ..21r=G..~.14R: 
00000020: 1bd9 c432 7733 7223 3777 2e33 c46b 6447  ...2w3r#7w.3.kdG
00000030: c070 4734 6b35 7737 725f 1662 ea6f 6a72  .pG4k5w7r_.b.ojr
00000040: 49ce 6649 6c35 7220                      I.fIl5r

이상한 버그가 발생했습니다. 중간에있는 섹션은 : dGÀpG이어야 ÀäGG하지만 1의 입력에는 작동하지 않으며 이유를 모릅니다.¯\_(ツ)_/¯


8

매스 매 티카, 301 288 258 바이트

" "~(s=If[#2==0,"",#~StringRepeat~#2]&)~3<>{"="~s~21,"
",s[" ",12-#]<>{")","v "~s~#,"v(
"}&/@9~Range~12,"~"~s~27,"
",s[(x=(u=": ")~s~13<>":
")<>{y=u<>{z=": ### ",v=u~s~5,w=z<>": :
"},y,y,x},#-1],v,"_"~s~7," ",v,"
",m=u<>{z,u,n="I     I ",w},m,m,v,n,w}&

양의 정수를 취해 문자열을 출력하는 순수 함수. Mathematica는 모노 스페이스 글꼴을 모노 스페이스로 표시하지 않기 때문에 출력 문자열이 올바르게 보이지 않습니다.

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

내가 이해하지 못하는 이유로 Print문자열 인 경우 모노 스페이스로 형식을 지정 합니다.

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

편집 : " "각 줄의 시작 부분을 포함하지 않고 여러 바이트를 저장했습니다 . s층이 하나만있는 경우를 처리 하도록 정의를 변경했습니다 ( StringRepeat문자열 0시간 반복을 좋아하지 않음 ).

편집 2 : 덕분에 LegionMammal978 및 사실 StringJoin이다가 Listable이 지금은 중첩 된 목록의 이해할 수없는 악몽과도 (30)는 짧은 바이트.


1
특정 부분 으로 교체 a<>b<>...<>x하여 최소 26 바이트를 절약 할 수 있습니다 a<>{b,...,x}.
군단 포유 동물 978

4

파이썬 2 , 275 (270) 262 246 240 236 바이트

@ Flp.Tkc의 힌트와 첫 번째 for 루프를 변경하여 커플을 저장했습니다.

16 @ Flp.Tkc의 도움으로 저장되었습니다

a,h,b,c,w=' ',"I  ",": "," :","#"*3;d,e,j=b*2+w+a+b+h,b*5+h,[b*14]
print'\n'.join([a*3+'='*21]+[a*(4-x)+')'+'V '*(x+8)+'V('for x in 1,2,3,4]+['-'*27]+(j+[b*2+w+c*6+a+w+c*2]*3+j)*(input()-1)+[b*5+"_"*7+c*5]+[d+a+d[::-1]]*3+[e+a+e[::-1]])

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

탑의 각 줄을 문자열로 만들고 배열에 추가하면 끝에 배열이 인쇄됩니다. 누군가가 완전한 설명을 원한다면 그것이 어떻게 작동하는지 기억할 수 있는지 심하게 줄 것입니다 ☺


3

PowerShell , 193 바이트

"   "+"="*21
3..0|%{" "*$_+")"+"V "*(12-$_)+"V("}
"~"*27
--$args[0]..0|%{($b=": "*5)+(($a=": "*4),'_______ ')[!$_]+$b;,(': : ### : '+($a,($c='I     I '))[!$_]+': ### : :')*3;$b+($a,$c)[!$_]+$b}

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

(여기 또는 몇 바이트가 여전히있을 수 있다고 생각합니다. Sub-190은 가능합니다.)

첫 번째 세 줄은 문자열 곱셈과 연결을 사용하여 루프 3..0|%{...}를 형성하고 올바른 숫자와 기울기를 얻습니다.V .

입력에서 다음 줄이 실행이-감소 사전 --$args[0]에 아래 0루프 (사전 감소를 사용하여 인덱스에 우리를 허용하는 !$_대신 $_-eq1나중에 몇 바이트를 저장). 각 루프 반복마다 변수를 설정 $b하고 그에 $a따라 많은 문자열을 구성합니다 . 또한 의사 삼항식 (... , ...)[...]을 사용 하여 중간에 적합한 줄을 선택하여 1 층 출입구를 정확하게 얻을 수 있습니다.

각 문자열은 파이프 라인에 개별적으로 남겨지고 기본적으로 줄 Write-Output바꿈이 삽입되어 무료로 제공됩니다.


3

T-SQL, 378 372 353 331 325 바이트

골프 :

DECLARE @ INT=3

,@h varchar(max)=REPLICATE('~',27)SELECT @h+='
: '+a+IIF(n>@*5-6,IIF(n%5=0,'_______ ','I     I '),t)+a+':'FROM(SELECT
IIF(n%5%4=0,t,': ### : ')a,*FROM(SELECT': : : : 't,number n,*FROM spt_values)x)y
WHERE type='P'and n<@*5SET @=0WHILE @<4SELECT
@h=SPACE(@)+')'+REPLICATE('V ',12-@)+'V(
'+@h,@+=1PRINT'   '+REPLICATE('=',21)+'
'+@h

언 골프 드 :

DECLARE @ INT=3

,@h varchar(max)=REPLICATE('~',27)
SELECT @h+='
: '+a+IIF(n>@*5-6,IIF(n%5=0,'_______ ','I     I '),t)+a+':'
FROM
(SELECT IIF(n%5%4=0,t,': ### : ')a,*
FROM
(SELECT': : : : 't,number n,*
FROM spt_values)x)y
WHERE type='P'and n<@*5
WHILE @>=0
  SELECT @h=SPACE(3-@)+')'+REPLICATE('V ',9+@)+'V(
'+@h,@-=1
PRINT'   '+REPLICATE('=',21)+'
'+@h

사용해보십시오


2

C, 409 (406) 402 바이트

#define P(x)p(": ",x);
#define S(x)p(x,1);
#define L P(2)p("#",3);p(" :",6);S(" ###");S(" : :\n")
#define Q p("V ",i+++9)
p(s,n)char*s;{printf(s,--n?p(s,n):0);}i;t(n){p(" ",3);p("=",21);S("\n   )")Q;S("V(\n  )")Q;S("V(\n )")Q;S("V(\n)")Q;S("V(\n")p("~",27);S("\n")for(;--n;){P(13)S(":\n")L;L;L;P(13)S(":\n")}P(5)p("_",7);p(" :",5);S("\n")p(": : ### : I     I : ### : :\n",3);P(5)S("I     I")p(" :",5);}

전화 :

int main()
{
    t(4);
}

1

배치, 373 바이트

@echo off
set s=###
echo    %s:#========%
for %%s in ("   )" "  )V " " )V V " ")V V V ")do echo %%~sV%s:#= V V V%(
echo %s:#=~~~~~~~~~%
set t=: : ### : I     I : ### : :
set s=%t:I     I=: : : :%
for /l %i in (2,1,%1)do echo %s:###=: :%&echo %s%&echo %s%&echo %s%&echo %s:###=: :%
set s=%t:###=: :%
echo %s:I     I=_______%
echo %t%
echo %t%
echo %t%
echo %s%

릿지와 홈통을 3의 배수로 인식하여 몇 바이트를 줄입니다. 접미사가 각 줄마다 동일하다는 사실을 인식하여 지붕을 만듭니다 (다시 세 번 반복 함). 1 층 창인 가장 흥미로운 벽 선으로 시작하고 벽의 다른 부분을 생성하기 위해 세부 정보를 제거하여 벽을 작성합니다.


1

자바 스크립트, 335 바이트

y=z=>{a="   "+"=".repeat(21);for(b=9;13>b;b++)a+="\n"+" ".repeat(12-b)+")"+"V ".repeat(b)+"V(";a+="\n"+"~".repeat(27);b="\n"+": ".repeat(14);c=": : ### : : : : : : ### : :";for(d=0;d<z-1;d++)a+=b+"\n"+c+"\n"+c+b;a+="\n: : : : : _______ : : : :\n"+": : ### : I     I : ### : :\n".repeat(3)+": : : : : I     I : : : : :";console.log(a)};

원하는 출력 을 생성하는 y()argument를 사용 하여 함수 를 만듭니다 .zy(z)

사용법 예 :

y=z=>{a="   "+"=".repeat(21);for(b=9;13>b;b++)a+="\n"+" ".repeat(12-b)+")"+"V ".repeat(b)+"V(";a+="\n"+"~".repeat(27);b="\n"+": ".repeat(14);c=": : ### : : : : : : ### : :";for(d=0;d<z-1;d++)a+=b+"\n"+c+"\n"+c+b;a+="\n: : : : : _______ : : : :\n"+": : ### : I     I : ### : :\n".repeat(3)+": : : : : I     I : : : : :";console.log(a)};

console.log(y(3));

일반 JavaScript에서 코드 골프 JS로 전환 중입니다. 모든 팁을 주시면 감사하겠습니다.


1

캔버스 , 62 61 바이트

⁶=⁵×V7× * )×4*∔/‾²m~7«× ×∔│8 ×:*5*#33*62╋│⁸*∔l4-_7× 5×Ie4*∔╋╋

여기 사용해보십시오! 입력 0은 필요하지 않더라도 예상대로 작동합니다.


이 스크립트를 사용하여 집의 높이를 어떻게 수정합니까?
t-clausen.dk

내 오래된 눈은 오른쪽 상자에 숫자를 놓쳤다
t-clausen.dk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.