พิมพ์ Tower Block ให้ฉัน


16

พิมพ์บล็อกทาวเวอร์ด้วยรหัสที่สั้นที่สุด

การป้อนข้อมูล:

อินพุตกำหนดจำนวนชั้นของหอคอยที่มีอยู่ ชั้นหนึ่งมีหน้าต่างที่ทั้งสองด้านของประตู หน้าต่างประกอบด้วยแฮช 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 : : : : :

ปรับปรุง:

อินพุตต้องมีอย่างน้อยหนึ่งรายการ

อนุญาตให้เว้นวรรคต่อท้ายที่ส่วนท้ายของบรรทัด

ในตัวอย่างของฉันทุกบรรทัดมีช่องว่างนำหน้าสามช่อง นี่ไม่ใช่ข้อบังคับเพียงบล็อกทาวเวอร์ที่มีอินพุตอยู่


2
อินพุตสามารถน้อยกว่า 1 ได้หรือไม่?
nmjcman101

2
ช่องว่างต่อท้ายที่ส่วนท้ายของบรรทัดอนุญาตหรือไม่
ngenisis

ขอบคุณสำหรับคำถามของคุณ - โปรดดูการอัปเดตในคำถามของฉัน
Belfield

คำตอบ:


6

V , 72 ไบต์

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

ลองออนไลน์!

นี่คือ hexdump เนื่องจากมีอักขระที่ไม่สามารถพิมพ์ได้:

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

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 ไม่แสดงแบบอักษร monospace เป็น monospace:

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยเหตุผลที่ฉันไม่เข้าใจมันจัดรูปแบบเป็น monospace ถ้าคุณPrintเป็นสตริง:

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข: บันทึกหลายไบต์โดยไม่รวม" "ที่จุดเริ่มต้นของแต่ละบรรทัด เปลี่ยนคำจำกัดความของsเพื่อจัดการกรณีและปัญหาที่มีเพียงชั้นเดียว ( StringRepeatไม่ชอบการทำซ้ำสตริง0ครั้ง)

แก้ไข 2: ขอบคุณLegionMammal978และความจริงStringJoinก็Listableคือตอนนี้มันเป็นฝันร้ายที่ไม่สามารถเข้าใจได้ของรายการที่ซ้อนกันและสั้นลง 30 ไบต์


1
สามารถบันทึกอย่างน้อย 26 ไบต์โดยแทนที่a<>b<>...<>xด้วยa<>{b,...,x}บางส่วน
LegionMammal978

4

Python 2 , 275 270 262 246 240 236 ไบต์

บันทึกคู่ด้วยคำใบ้จาก @ Flp.Tkc และเปลี่ยนเป็นวงแรก

บันทึกแล้ว 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|%{...}เพื่อให้ได้ตัวเลขที่ถูกต้องและความชันของVs

บรรทัดถัดไปจะเรียกใช้จากอินพุตที่ลดค่า--$args[0]ลงล่วงหน้า0เป็นลูป (การลดลงล่วงหน้าช่วยให้เราสามารถจัดทำดัชนีโดยใช้!$_แทนที่จะ$_-eq1บันทึกหลายไบต์ในภายหลัง) การวนซ้ำแต่ละครั้งเรากำลังสร้างสตริงจำนวนมากตั้งค่าตัวแปร$bและ$aไปพร้อมกัน นอกจากนี้เรายังใช้ pseudo-ternaries(... , ...)[...]เพื่อเลือกสายที่เหมาะสมสำหรับตรงกลางเพื่อให้เราสามารถรับประตูทางเข้าชั้นแรกให้ถูกต้อง

แต่ละสตริงจะถูกทิ้งไว้ทีละรายการบนไปป์ไลน์และค่าเริ่มต้น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

Ungolfed:

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 ปกติเป็น code-golf JS เคล็ดลับใด ๆ ที่จะได้รับการชื่นชมอย่างมาก


1

Canvas , 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.