Imprime un bloque de torre

16

Imprima un bloque de torre con el código más corto posible.

Entrada:

La entrada define cuántos pisos tiene el bloque de la torre. Un piso contiene una ventana a cada lado de la puerta. La ventana está compuesta de 3x3 hashes.

A continuación se muestra un ejemplo de una torre de 4 pisos:

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

Actualizar:

La entrada tiene que ser una o mayor.

Se permiten espacios finales al final de las líneas.

En mi ejemplo, cada línea tiene tres espacios iniciales. Esto no es obligatorio, solo el bloque de la torre con la entrada lo es.

Belfield
fuente
2
¿La entrada puede ser menor que 1?
nmjcman101
2
¿Se permiten espacios finales al final de las líneas?
ngenisis
Gracias por sus preguntas, consulte la actualización en mi pregunta.
Belfield

Respuestas:

6

V , 72 bytes

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

Pruébalo en línea!

Aquí hay un hexdump, ya que contiene caracteres no imprimibles:

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

Me encontré con un error extraño. La sección en el medio: dGÀpGdebería haber sido:, ÀäGGpero esto no funciona para las entradas de 1, y no tengo idea de por qué.¯\_(ツ)_/¯

DJMcMayhem
fuente
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}&

Función pura que toma un entero positivo y genera una cadena. La cadena de salida no se verá bien porque Mathematica aparentemente no muestra las fuentes monoespaciales como monoespacios:

ingrese la descripción de la imagen aquí

Por razones que no entiendo, formatea como monoespacio si usa Printla cadena:

ingrese la descripción de la imagen aquí

Editar: guardado varios bytes al no incluirlos " "al comienzo de cada línea. Se modificó la definición de spara manejar el caso donde solo hay un piso ( StringRepeatno le gusta repetir una cadena de 0veces).

Edición 2: Gracias a LegionMammal978 y el hecho de que StringJoines Listableuna pesadilla incomprensible de listas anidadas y también 30 bytes más cortos.

ngenisis
fuente
1
Se pueden guardar al menos 26 bytes reemplazándolos a<>b<>...<>xcon a<>{b,...,x}en ciertas partes.
LegionMammal978
4

Pitón 2 , 275 270 262 246 240 236 bytes

Salvó a una pareja con una pista de @ Flp.Tkc y cambiando el primer bucle for.

16 guardados con más ayuda 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]])

Pruébalo en línea!

Simplemente construye cada línea de la torre como una cadena y la agrega a una matriz, imprime la matriz al final. Si alguien quiere una explicación completa, le daré a regañadientes si puedo recordar cómo funciona ☺

ElPedro
fuente
3

PowerShell , 193 bytes

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

Pruébalo en línea!

(Siento que todavía puede haber unos pocos bytes aquí o allá. Sub-190 parece factible).

Las primeras tres líneas forman el techo, usando la multiplicación y concatenación de cuerdas, junto con un bucle 3..0|%{...}para obtener el número correcto y la inclinación deV s.

La siguiente línea va desde la entrada pre-decrementada --$args[0]hasta 0un bucle (la pre-decrementación nos permite indexar usando en !$_lugar de $_-eq1guardar varios bytes más adelante). Cada iteración de bucle, estamos construyendo un montón de cadenas, estableciendo variables $by $aen el camino. También estamos usando pseudoternarios (... , ...)[...]para elegir las cuerdas apropiadas para el medio para que podamos obtener la puerta en el primer piso correcta.

Cada una de las cadenas se deja individualmente en la tubería, y el valor predeterminado Write-Outputinserta nuevas líneas entre ellas, por lo que las obtenemos de forma gratuita.

AdmBorkBork
fuente
3

T-SQL, 378 372 353 331 325 bytes

Golfizado:

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

Sin 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

Pruébalo

t-clausen.dk
fuente
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);}

Llamar con:

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

Lote, 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%

Construye la cresta y la canaleta al notar que son múltiplos de 3, lo que reduce unos pocos bytes. Construye el techo al notar que el sufijo es el mismo para cada línea (y nuevamente incluye una repetición triple). Construye las paredes comenzando con la línea de pared más interesante, que es la ventana de la planta baja, y eliminando detalles para generar las otras partes de la pared.

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

Crea una función y()con argumento z, tal que y(z)produce el resultado deseado.

Ejemplo de uso:

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

Estoy haciendo la transición de JavaScript normal a code-golf JS. Algún consejo sería de gran aprecio.

Julian Lachniet
fuente
1

Lienzo , 62 61 bytes

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

Pruébalo aquí! La entrada 0 funciona como se espera aunque no sea necesario.

dzaima
fuente
oye, ¿cómo se modifica la altura de la casa usando este script?
t-clausen.dk
Mis viejos ojos perdieron el número en el cuadro de la derecha
t-clausen.dk