Cetak saya Tower Block

16

Cetak blok menara dengan kode sesingkat mungkin.

Memasukkan:

Input menentukan berapa lantai yang dimiliki oleh blok menara. Satu lantai berisi jendela di kedua sisi pintu. Jendela terdiri dari hash 3x3.

Contoh blok menara 4 lantai di bawah ini:

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

Memperbarui:

Masukan harus satu atau lebih besar.

Ruang tambahan di ujung garis diperbolehkan.

Dalam contoh saya, setiap baris memiliki tiga spasi utama. Ini tidak wajib, hanya blok menara dengan inputnya.

Belfield
sumber
2
Bisakah input kurang dari 1?
nmjcman101
2
Apakah membuntuti spasi di ujung garis diperbolehkan?
ngenisis
Terima kasih atas pertanyaan Anda - silakan lihat pembaruan di pertanyaan saya.
Belfield

Jawaban:

6

V , 72 byte

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

Cobalah online!

Ini hexdump, karena ini mengandung karakter yang tidak patut dicetak:

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

Saya menemukan bug yang aneh. Bagian di tengah: dGÀpGseharusnya:, ÀäGGtetapi ini tidak berfungsi untuk input 1, dan saya tidak tahu mengapa.¯\_(ツ)_/¯

DJMcMayhem
sumber
8

Mathematica, 301 288 258 byte

" "~(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}&

Fungsi murni yang mengambil bilangan bulat positif dan menghasilkan string. String output tidak akan terlihat benar karena Mathematica tampaknya tidak menampilkan font monospace sebagai monospace:

masukkan deskripsi gambar di sini

Untuk alasan yang saya tidak mengerti, itu memformat sebagai monospace jika Anda Printstring:

masukkan deskripsi gambar di sini

Sunting: Disimpan beberapa byte dengan tidak termasuk " "di awal setiap baris. Mengubah definisi smenangani kasus di mana hanya ada satu lantai ( StringRepeattidak suka mengulang 0kali string ).

Edit 2: Berkat LegionMammal978 dan fakta bahwa StringJoinadalah Listable, ini sekarang mimpi buruk dimengerti dari daftar bersarang dan juga 30 byte lebih pendek.

ngenisis
sumber
1
Setidaknya 26 byte dapat disimpan dengan mengganti a<>b<>...<>xdengan a<>{b,...,x}di bagian-bagian tertentu.
LegionMammal978
4

Python 2 , 275 270 262 246 240 236 byte

Menyimpan pasangan dengan petunjuk dari @ Flp.Tkc dan dengan mengubah yang pertama untuk loop.

16 disimpan dengan bantuan lebih lanjut dari @ 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]])

Cobalah online!

Hanya membangun setiap baris menara sebagai string dan menambahkannya ke array mereka mencetak array di akhir. Jika ada yang menginginkan penjelasan lengkap saya dengan enggan akan memberikan jika saya bisa mengingat cara kerjanya ☺

ElPedro
sumber
3

PowerShell , 193 byte

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

Cobalah online!

(Saya merasa mungkin masih ada beberapa byte di sini atau di sana. Sub-190 tampaknya bisa dilakukan.)

Tiga baris pertama membentuk atap, menggunakan perkalian dan penggabungan string, bersama dengan lingkaran 3..0|%{...}untuk mendapatkan angka dan kemiringan yang benar.V s.

Garis berjalan berikutnya dari input pra-dikurangi --$args[0]ke 0sebagai loop (pra-pengurangan memungkinkan kita untuk indeks menggunakan !$_bukannya$_-eq1 menyimpan beberapa byte kemudian). Setiap iterasi loop, kami membangun sekelompok string, variabel pengaturan $bdan di $asepanjang jalan. Kami juga menggunakan pseudo-ternaries (... , ...)[...]untuk memilih string yang tepat untuk bagian tengah sehingga kami bisa mendapatkan pintu di lantai pertama dengan benar.

Setiap string dibiarkan secara terpisah pada pipeline, dan default Write-Outputmenyisipkan baris baru di antara, jadi kami mendapatkannya secara gratis.

AdmBorkBork
sumber
3

T-SQL, 378 372 353 331 325 byte

Golf:

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

Tidak Terkumpul:

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

Cobalah

t-clausen.dk
sumber
2

C, 409 406 402 byte

#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);}

Telepon dengan:

int main()
{
    t(4);
}
Steadybox
sumber
1

Batch, 373 byte

@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%

Buat punggungan dan selokan dengan memperhatikan bahwa mereka adalah kelipatan 3, yang memangkas beberapa byte. Bangun atap dengan memperhatikan bahwa sufiks sama untuk setiap baris (dan sekali lagi termasuk beberapa pengulangan tiga kali lipat). Bangun dinding dengan memulai dengan garis dinding yang paling menarik, yaitu jendela lantai dasar, dan menghapus detail untuk menghasilkan bagian lain dari dinding.

Neil
sumber
1

Javascript, 335 byte

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)};

Membuat fungsi y()dengan argumen z, sehingga y(z)menghasilkan output yang diinginkan.

Contoh penggunaan:

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));

Saya beralih dari JavaScript normal ke kode-golf JS. Setiap tips akan sangat dihargai.

Julian Lachniet
sumber
1

Kanvas , 62 61 byte

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

Coba di sini! Input 0 berfungsi seperti yang diharapkan meskipun itu tidak diperlukan.

dzaima
sumber
hei, bagaimana ketinggian rumah dimodifikasi menggunakan skrip ini?
t-clausen.dk
Mata lamaku melewatkan nomor di kotak kanan
t-clausen.dk