Надрукуйте мені блок-башта


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

2
Чи дозволені пробіли в кінці рядків?
ngenisis

Дякуємо за запитання. Будь ласка, дивіться оновлення в моєму запитанні.
Белфілд

Відповіді:


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 і той факт , що 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|%{...}щоб отримати правильну кількість і нахилV s.

Наступний рядок проходить від входу, попередньо --$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 на код-golf JS. Будь-які поради були б дуже вдячні.


1

Полотно , 62 61 байт

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

Спробуйте тут! Введення 0 працює як очікувалося, хоча це не потрібно.


Гей, як змінюється висота будинку за допомогою цього сценарію?
t-clausen.dk

Мої старі очі пропустили номер у правій коробці
t-clausen.dk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.