Imprimez-moi un Tower Tower

16

Imprimez un bloc tour avec le code le plus court possible.

Contribution:

L'entrée définit le nombre d'étages du bloc tour. Un étage contient une fenêtre de chaque côté de la porte. La fenêtre est composée de hachages 3x3.

Un exemple d'un bloc de tour de 4 étages est ci-dessous:

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

Mise à jour:

L'entrée doit être supérieure ou égale à un.

Les espaces de fin à la fin des lignes sont autorisés.

Dans mon exemple, chaque ligne a trois espaces de début. Ce n'est pas obligatoire, juste le bloc tour avec l'entrée l'est.

Belfield
la source
2
L'entrée peut-elle être inférieure à 1?
nmjcman101
2
Les espaces de fin à la fin des lignes sont-ils autorisés?
ngenisis
Merci pour vos questions - veuillez consulter la mise à jour dans ma question.
Belfield

Réponses:

6

V , 72 octets

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

Essayez-le en ligne!

Voici un hexdump, car il contient des caractères non imprimables:

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

J'ai rencontré un étrange bug. La section au milieu: dGÀpGaurait dû être:, ÀäGGmais cela ne fonctionne pas pour les entrées de 1, et je ne sais pas pourquoi.¯\_(ツ)_/¯

DJMcMayhem
la source
8

Mathematica, 301 288 258 octets

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

Fonction pure qui prend un entier positif et produit une chaîne. La chaîne de sortie ne sera pas correcte car Mathematica n'affiche apparemment pas les polices monospaces en tant que monospace:

entrez la description de l'image ici

Pour des raisons que je ne comprends pas très bien, le formatage est monospace si vous utilisez Printla chaîne:

entrez la description de l'image ici

Modifier: enregistré plusieurs octets en n'incluant pas " "au début de chaque ligne. Modification de la définition de spour gérer le cas où il n'y a qu'un seul étage ( StringRepeatn'aime pas répéter une chaîne de 0fois).

Edit 2: Merci à LegionMammal978 et au fait que StringJoinc'est Listablemaintenant un cauchemar incompréhensible de listes imbriquées et aussi 30 octets plus court.

ngenisis
la source
1
Au moins 26 octets peuvent être enregistrés en remplaçant a<>b<>...<>xpar a<>{b,...,x}dans certaines parties.
LegionMammal978
4

Python 2 , 275 270 262 246 240 236 octets

Enregistré un couple avec un indice de @ Flp.Tkc et en changeant la première boucle for.

16 enregistrés avec plus d'aide de @ 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]])

Essayez-le en ligne!

Il suffit de construire chaque ligne de la tour sous forme de chaîne et de l'ajouter à un tableau pour imprimer le tableau à la fin. Si quelqu'un veut une explication complète, je donnerai à contrecœur si je me souviens comment cela fonctionne ☺

ElPedro
la source
3

PowerShell , 193 octets

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

Essayez-le en ligne!

(Je pense qu'il peut encore y avoir quelques octets ici ou là. Le Sub-190 semble faisable.)

Les trois premières lignes forment le toit, en utilisant la multiplication et la concaténation des chaînes, ainsi qu'une boucle 3..0|%{...}pour obtenir le nombre et l'inclinaison corrects de Vs.

La ligne suivante va de l'entrée pré-décrémentée --$args[0]jusqu'à 0une boucle (la pré-décrémentation nous permet d'indexer en utilisant !$_au lieu d' $_-eq1enregistrer plusieurs octets plus tard). À chaque itération de boucle, nous construisons un tas de chaînes, définissons des variables $bet en $acours de route. Nous utilisons également des pseudo-ternaires (... , ...)[...]pour choisir les chaînes appropriées pour le milieu afin que nous puissions corriger la porte au premier étage.

Chacune des chaînes est laissée individuellement sur le pipeline, et la valeur par défaut Write-Outputinsère des retours à la ligne entre, donc nous les obtenons gratuitement.

AdmBorkBork
la source
3

T-SQL, 378 372 353 331 325 octets

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

Non 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<@*5
WHILE @>=0
  SELECT @h=SPACE(3-@)+')'+REPLICATE('V ',9+@)+'V(
'+@h,@-=1
PRINT'   '+REPLICATE('=',21)+'
'+@h

Essaye le

t-clausen.dk
la source
2

C, 409 406 402 octets

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

Appeler avec:

int main()
{
    t(4);
}
Steadybox
la source
1

Lot, 373 octets

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

Construit la crête et la gouttière en remarquant qu'ils sont des multiples de 3, ce qui réduit de quelques octets. Construit le toit en notant que le suffixe est le même pour chaque ligne (et comprend à nouveau une triple répétition). Construit les murs en commençant par la ligne de mur la plus intéressante, qui est la fenêtre du rez-de-chaussée, et en supprimant les détails pour générer les autres parties du mur.

Neil
la source
1

Javascript, 335 octets

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

Crée une fonction y()avec argument z, telle qu'elle y(z)produit la sortie souhaitée.

Exemple d'utilisation:

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

Je passe d'un JavaScript normal à un JS de golf de code. Tous les conseils seraient grandement appréciés.

Julian Lachniet
la source
1

Toile , 62 61 octets

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

Essayez-le ici! L'entrée 0 fonctionne comme prévu même si ce n'est pas obligatoire.

dzaima
la source
Hé, comment la hauteur de la maison est-elle modifiée à l'aide de ce script?
t-clausen.dk
Mes vieux yeux ont raté le numéro dans la bonne case
t-clausen.dk