Wydrukuj mi wieżowiec

16

Wydrukuj wieżowiec z możliwie najkrótszym kodem.

Wejście:

Dane wejściowe określają liczbę pięter bloku wieżowego. Jedno piętro zawiera okno po obu stronach drzwi. Okno składa się z skrótów 3x3.

Przykład 4-piętrowego wieżowca znajduje się poniżej:

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

Aktualizacja:

Dane wejściowe muszą być co najmniej jedno.

Końcowe spacje na końcu linii są dozwolone.

W moim przykładzie każda linia ma trzy wiodące spacje. Nie jest to obowiązkowe, jest tylko wieżowiec z wejściem.

Belfield
źródło
2
Czy dane wejściowe mogą być mniejsze niż 1?
nmjcman101
2
Czy dozwolone są spacje na końcu linii?
ngenisis,
Dziękuję za pytania - zobacz aktualizację w moim pytaniu.
Belfield

Odpowiedzi:

6

V , 72 bajty

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

Wypróbuj online!

Oto zrzut heksowy, ponieważ zawiera znaki niedrukowalne:

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

Wpadłem na dziwny błąd. Sekcja pośrodku:dGÀpG powinna być:, ÀäGGale to nie działa dla danych wejściowych 1 i nie mam pojęcia, dlaczego.¯\_(ツ)_/¯

DJMcMayhem
źródło
8

Mathematica, 301 288 258 bajtów

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

Czysta funkcja, która przyjmuje dodatnią liczbę całkowitą i generuje ciąg. Łańcuch wyjściowy nie będzie wyglądał dobrze, ponieważ Mathematica najwyraźniej nie wyświetla czcionek monospace jako monospace:

wprowadź opis zdjęcia tutaj

Z powodów, których nie do końca rozumiem, formatuje się jako monospace, jeśli Printciąg:

wprowadź opis zdjęcia tutaj

Edycja: Zapisano kilka bajtów, nie włączając " "na początku każdej linii. Zmieniono definicję sobsługi przypadku, w którym jest tylko jedno piętro ( StringRepeatnie lubi powtarzania ciągu znaków 0).

Edycja 2: Dzięki LegionMammal978 i faktowi StringJoinjest Listableto teraz niezrozumiały koszmar zagnieżdżonych list, a także 30 bajtów krótszych.

ngenisis
źródło
1
Przynajmniej 26 bajtów mogą być zapisywane poprzez zastąpienie a<>b<>...<>xze a<>{b,...,x}w niektórych częściach.
LegionMammal978
4

Python 2 , 275 270 262 246 240 236 bajtów

Uratowałem parę z podpowiedzią z @ Flp.Tkc i zmieniając pierwszą dla pętli.

16 zapisanych z większą pomocą @ 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]])

Wypróbuj online!

Po prostu buduje każdą linię wieży jako ciąg i dodaje ją do tablicy, a następnie drukuje tablicę na końcu. Jeśli ktoś chce pełnego wyjaśnienia, niechętnie udzielę, jeśli pamiętam, jak to działa ☺

ElPedro
źródło
3

PowerShell , 193 bajty

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

Wypróbuj online!

(Wydaje mi się, że może tu być jeszcze kilka bajtów. Sub-190 wydaje się wykonalne.)

Pierwsze trzy linie tworzą dach, używając mnożenia i łączenia strun, wraz z pętlą, 3..0|%{...}aby uzyskać prawidłową liczbę i nachylenieV s.

Następny wiersz biegnie od wejścia wstępnie zdekrementowanego w --$args[0]dół do 0postaci pętli (dekrementacja wstępna pozwala nam na indeksowanie za pomocą !$_zamiast $_-eq1zapisywania kilku bajtów później). W każdej iteracji pętli tworzymy wiązkę ciągów, ustawiamy zmienne $bi $apo drodze. Używamy również pseudonaczyek, (... , ...)[...]aby wybrać odpowiednie łańcuchy dla środka, abyśmy mogli uzyskać prawidłowe wejście na pierwszym piętrze.

Każdy ciąg jest pozostawiony osobno w potoku, a domyślnie Write-Outputwstawia znaki nowego wiersza między, więc otrzymujemy je za darmo.

AdmBorkBork
źródło
3

T-SQL, 378 372 353 331 325 bajtów

Gra w golfa:

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

Nie golfowany:

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

Wypróbuj to

t-clausen.dk
źródło
2

C, 409 406 402 bajtów

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

Zadzwoń z:

int main()
{
    t(4);
}
Steadybox
źródło
1

Partia, 373 bajtów

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

Tworzy grzbiet i rynnę, zauważając, że są wielokrotnościami 3, co goli kilka bajtów. Buduje dach, zauważając, że sufiks jest taki sam dla każdej linii (i ponownie obejmuje jakieś trzykrotne powtórzenie). Buduje ściany, zaczynając od najciekawszej linii ściany, którą jest okno na parterze, i usuwając szczegóły, aby wygenerować inne części ściany.

Neil
źródło
1

JavaScript, 335 bajtów

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

Tworzy funkcję y()z argumentem z, która y(z)generuje pożądany wynik.

Przykładowe użycie:

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

Przechodzę z normalnego JavaScript do JS-code-golfa. Wszelkie wskazówki będą mile widziane.

Julian Lachniet
źródło
1

Płótno , 62 61 bajtów

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

Wypróbuj tutaj!Wejście 0 działa zgodnie z oczekiwaniami, nawet jeśli nie jest to wymagane.

dzaima
źródło
hej, jak modyfikuje się wysokość domu za pomocą tego skryptu?
t-clausen.dk
Moje stare oczy przeoczyły numer w prawym polu
t-clausen.dk