タワーブロックを印刷してください


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 : : : : :

更新:

入力は1以上でなければなりません。

行末の末尾のスペースは許可されます。

私の例では、すべての行に3つの先行スペースがあります。これは必須ではなく、入力があるタワーブロックだけが必須です。


2
入力は1未満にできますか?
nmjcman101 16

2
行末の末尾のスペースは許可されますか?
ngenisis 16

ご質問ありがとうございます。私の質問の更新をご覧ください。
ベルフィールド

回答:


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

奇妙なバグに遭遇しました。middle:のセクションは次のdGÀpGようになっているはずですがÀäGG、これは1の入力に対しては機能せず、理由はわかりません。¯\_(ツ)_/¯


8

Mathematica、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フロアが1つしかない場合を処理するようにしました(StringRepeatストリングの繰り返しを好まない0)。

編集2:LegionMammal978とそのおかげStringJoinListable、これはネストされたリストの理解できない悪夢であり、30バイトも短くなりました。


1
少なくとも26のバイトを交換することによって保存することが可能a<>b<>...<>xa<>{b,...,x}ある部分です。
LegionMammal978 16

4

パイソン2275の 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行は、文字列の乗算と連結を使用3..0|%{...}して、Vsの正しい数と傾斜を取得するループとともに屋根を形成します。

次の行は、プリデクリメント--$args[0]された入力から0ループとして実行されます(プリデクリメントにより、後で数バイト!$_$_-eq1保存する代わりにインデックスを使用できます)。ループを繰り返すたびに、一連の文字列を作成し、変数$bを設定します$a。また(... , ...)[...]、中間に適切な文字列を選択するために擬似3項を使用して、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の倍数であることに気づくことにより、尾根と側溝を構築し、数バイト削ります。接尾辞が各行で同じであることを認識して屋根を構築します(また、3回繰り返されます)。1階の窓である最も興味深い壁のラインから開始し、壁の他の部分を生成するために詳細を削除することにより、壁を構築します。


1

Javascript、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()引数を使用して関数を作成します。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

Canvas62 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.