Drucken Sie mir einen Hochhaus

16

Drucken Sie einen Hochhaus mit dem kürzestmöglichen Code.

Eingang:

Die Eingabe definiert, wie viele Stockwerke der Hochhaus hat. Eine Etage enthält ein Fenster zu beiden Seiten der Tür. Das Fenster besteht aus 3x3 Hashes.

Ein Beispiel eines 4-stöckigen Hochhauses ist unten:

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

Aktualisieren:

Die Eingabe muss eins oder größer sein.

Nachgestellte Leerzeichen am Zeilenende sind zulässig.

In meinem Beispiel hat jede Zeile drei führende Leerzeichen. Dies ist nicht zwingend erforderlich, nur der Hochhausblock mit dem Eingang ist.

Belfield
quelle
2
Kann die Eingabe kleiner als 1 sein?
Nmjcman101
2
Sind nachgestellte Leerzeichen am Zeilenende zulässig?
Genisis
Vielen Dank für Ihre Fragen - bitte beachten Sie das Update in meiner Frage.
Belfield

Antworten:

6

V , 72 Bytes

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

Probieren Sie es online!

Hier ist ein Hexdump, da dieser nicht druckbare Zeichen enthält:

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

Ich bin auf einen seltsamen Käfer gestoßen. Der Abschnitt in der Mitte: dGÀpGhätte sein sollen:, ÀäGGaber dies funktioniert nicht für Eingaben von 1, und ich habe keine Ahnung warum.¯\_(ツ)_/¯

DJMcMayhem
quelle
8

Mathematica, 301 288 258 Bytes

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

Reine Funktion, die eine positive ganze Zahl annimmt und einen String ausgibt. Die Ausgabezeichenfolge sieht nicht richtig aus, da Mathematica anscheinend keine Monospace-Schriftarten als Monospace anzeigt:

Bildbeschreibung hier eingeben

Aus Gründen, die ich nicht ganz verstehe, formatiert es als Monospace, wenn Sie Printdie Zeichenfolge:

Bildbeschreibung hier eingeben

Bearbeiten: Mehrere Bytes durch Nichteinschließen " "am Anfang jeder Zeile gespeichert . Die Definition von wurde geändert s, um den Fall zu behandeln, in dem es nur eine Etage gibt ( StringRepeatnicht gerne die Wiederholung einer Zeichenfolge 0).

Edit 2: Dank LegionMammal978 und die Tatsache , dass StringJoinistListable , das ist jetzt ein unverständlicher Alptraum von verschachtelten Listen und auch 30 Bytes kürzer.

Genisis
quelle
1
Mindestens 26 Bytes können durch Ersetzen a<>b<>...<>xdurch a<>{b,...,x}in bestimmten Teilen gespeichert werden .
LegionMammal978
4

Python 2 , 275 270 262 246 240 236 Bytes

Ein Paar mit einem Hinweis von @ Flp.Tkc und durch Ändern der ersten for-Schleife gespeichert.

16 mit mehr Hilfe von @ Flp.Tkc gespeichert

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

Probieren Sie es online!

Erstellt einfach jede Zeile des Turms als Zeichenfolge und fügt sie einem Array hinzu. Das Array wird am Ende gedruckt. Wenn jemand eine vollständige Erklärung will, gebe ich widerwillig Bescheid, wenn ich mich erinnern kann, wie es funktioniert ☺

ElPedro
quelle
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}

Probieren Sie es online!

(Ich habe das Gefühl, dass es hier oder da noch ein paar Bytes gibt. Sub-190 scheint machbar zu sein.)

Die ersten drei Zeilen bilden zusammen mit einer Schleife das Dach, wobei die Zeichenfolge multipliziert und verkettet wird, 3..0|%{...}um die richtige Anzahl und Steigung zu erhaltenV s zu erhalten.

Die nächste Zeile verläuft von der vorab dekrementierten Eingabe --$args[0]bis zur 0Schleife (mit der Vorab-Dekrementierung können wir indizieren, !$_anstatt $_-eq1später mehrere Bytes zu speichern). Bei jeder Schleifeniteration konstruieren wir eine Reihe von Zeichenfolgen, setzen Variablen $bund $aauf dem Weg dorthin. Wir verwenden auch Pseudoternäre (... , ...)[...], um die entsprechenden Zeichenfolgen für die Mitte auszuwählen, damit die Tür im ersten Stock korrekt geöffnet wird .

Jede der Zeichenfolgen wird einzeln in der Pipeline belassen, und die Standardeinstellung Write-Outputfügt Zeilenumbrüche dazwischen ein, sodass wir diese kostenlos erhalten.

AdmBorkBork
quelle
3

T-SQL, 378 372 353 331 325 Bytes

Golf gespielt:

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

Versuch es

t-clausen.dk
quelle
2

C 409, 406, 402 Bytes

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

Rufen Sie an mit:

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

Batch, 373 Bytes

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

Bildet den Grat und die Rinne, indem bemerkt wird, dass es sich um ein Vielfaches von 3 handelt, wodurch einige Bytes verloren gehen. Baut das Dach, indem bemerkt wird, dass das Suffix für jede Zeile gleich ist (und wiederum eine dreifache Wiederholung enthält). Bauen Sie die Wände, indem Sie mit der interessantesten Wandlinie, dem Fenster im Erdgeschoss, beginnen und Details entfernen, um die anderen Teile der Wand zu generieren.

Neil
quelle
1

Javascript, 335 Bytes

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

Erzeugt eine Funktion y() mit Argument z, so dassy(z) die gewünschte Ausgabe erzeugt wird.

Beispiel Verwendung:

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

Ich wechsele von normalem JavaScript zu Code-Golf JS. Alle Tipps wäre sehr dankbar.

Julian Lachniet
quelle
1

Canvas , 62 61 Bytes

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

Probieren Sie es hier aus! Eingabe 0 funktioniert wie erwartet, obwohl dies nicht erforderlich ist.

dzaima
quelle
Hey, wie wird die Höhe des Hauses mit diesem Skript geändert?
t-clausen.dk
Meine alten Augen haben die Zahl in der rechten Box verpasst
t-clausen.dk