打印我一个塔楼


16

使用最短的代码打印塔式大楼。

输入:

输入定义塔式大楼有几层。一层在门的两边都有一个窗户。该窗口由3x3哈希组成。

下面是一个四层塔楼的示例:

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

更新:

输入必须为一或更大。

行尾可以有空格。

在我的示例中,每一行都有三个前导空格。这不是强制性的,只是带有输入的塔式块是必需的。


2
输入可以小于1吗?
nmjcman101 '16

2
行尾是否允许尾随空格?
ngenisis

感谢您提出的问题-请查看我的问题中的更新。
贝尔菲尔德

Answers:


6

V,72字节

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

在线尝试!

这是一个十六进制转储,因为其中包含不可打印的字符:

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和的事实StringJoinListable,这是现在的嵌套列表不可理解的恶梦,也是30字节短。


1
通过替换a<>b<>...<>xa<>{b,...,x}某些部分,可以至少保存26个字节。
LegionMammal978'2013/

4

Python 2中275个 270 262 246 240 236字节

通过@ Flp.Tkc并通过更改第一个for循环来保存提示。

通过@ Flp.Tkc的更多帮助保存了16

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沿途设置变量。我们还使用伪三元数(... , ...)[...]来为中间位置选择适当的字符串,这样我们就可以正确地获得一楼的门口。

每个字符串都单独留在管道上,默认情况下会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

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()带有参数的函数z,从而y(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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.