Esta es una ventana:
---
| |
---
Agreguemos algunas paredes |
. Coloque dos espacios a cada lado para que la ventana tenga suficiente espacio.
| --- |
| | | |
| --- |
Ahora agreguemos un techo y un techo. Para mantener la ventana en el medio de la habitación, agreguemos una fila más arriba y debajo.
---------
| |
| --- |
| | | |
| --- |
| |
---------
Ahora, solo agrega un techo. Ponga una barra tan a la izquierda como sea posible, y una barra invertida lo más a la derecha posible, y tenemos esto:
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Luego mueva la barra hacia arriba una y la derecha. Mueva la barra invertida hacia arriba una hacia la izquierda:
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Repita hasta que las dos barras se encuentren, luego agregue un asterisco donde se encuentran:
*
/ \
/ \
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
¡Y tu estas listo! Esta es una casa de 1x1. una casa de 2x2 se vería así:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-----------------
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
|-------|-------|
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
-----------------
y una casa de 3x2:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-------------------------
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
|-------|-------|-------|
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
-------------------------
El reto
Debe escribir un programa completo que tome dos enteros, x e y, e imprima una casa que tenga X cuartos de ancho y Y cuartos de alto. Su programa debería poder manejar casas de hasta 10x10. IO puede estar en cualquier formato razonable. Se permiten espacios finales en cada línea y se permite una nueva línea final.
La respuesta más corta en bytes gana.
f'{name}'
formato de cadena?Python 2,
190181 bytesEstoy bastante seguro de que hay mucho para jugar golf, especialmente las ventanas, pero aquí hay algo por ahora. Ancho de entrada y altura separados por comas, p
1,2
. Ej .Explicación rápida y aproximada:
fuente
JavaScript (ES6),
292270238215200 bytes¡Gracias @Neil por ayudar a recortar esto!
Llamar como:
F(a)(b)
Construye el techo, luego ensambla la casa central con repeticiones de cuerdas en capas.
fuente
join`|\n`
y ahora desearía haber comentado en ese momento. Hubiera sido una buena excusa para agregar a mi comentario parcial sugiriendo que lo use9*a
en algún momento, que nunca envié porque era demasiado corto.4*a-1
parece incorrecta, creo que debería serlo4*a
, esto podría ahorrarle 4 bytes.m-i-1
se convierte--m
.9*a-a
se convierte8*a
.*\n${[...Array(m)].map(...).join
\ n}\n
``, pero puede ir una mejor y unirse a la cadena antes y después al mismo tiempo:a=>b=>(p=(c,d=' ')=>d.repeat(c),[p(m=4*a)+`*`,...[...Array(m)].map((c,i)=>p(--m)+'/'+p(i*2+1)+'\\'),y=p(8*a+1,'-')].join`\n`+p(b,`\n`+[x=p(a,'| '),w=p(a,'| --- '),p(a,'| | | '),w,x,y].join`|\n`))
`/${p(i*2+1)}\\`
.C ++, 282 bytes, corrige los problemas con la entrada anterior:
Salida:
fuente
Ruby, Rev B 165 bytes
utiliza un solo bucle y varios otros trucos de golf.
Ruby, Rev A 179 bytes
Sin golf
fuente
| \-'
.\-
que no significa nada como una secuencia de escape, por lo\-
que solo se analiza como 2 caracteres. Entonces, por supuesto,-
tiene un significado especialtr
, por lo que necesitamos la cadena' \-'
para que las ventanas escapen-
(mapeo C-> espacio, B->-
y A->-
ya que no quedan más caracteres). Para los pisos, solo tenemos la cadena'-'
y, en este caso,tr
parece feliz de interpretarla solo como un carácter literal en lugar de un carácter especial, asignando C = B = A ='-'
En general, fue algo complicado ponerse a trabajar. Estoy seguro de que hay más golf que hacer, lo editaré más tarde.C ++, prueba de 258 bytes aquí
Resultado:
fuente
-
. Los pisos intermedios se dividen con|
C #,
361353 bytesPrograma completo:
fuente
s=""
se pueden poner dentro del bucle for (j) (considere tambiénj-->0
la condición, yi++<h
en el último bucle),i=0
se puede mover fuera del bucle for a la declaración guardando un byte. También puede guardar un byte reutilizando cadenas vacías asignadas (una vezm
asignado, puede asignaro=m
guardar el""
. Reemplazar también toma cadenas, por lo que puede use su enq
lugar de' '
, y no hay necesidad de espacio después de>
declararr
. Cosas pequeñas;)VBA, 284 bytes
La función Reemplazar es una herramienta ordenada para hacer múltiples copias de una manera que desafortunadamente la función de Cadena no quiere.
Invoque para obtener el mejor efecto en la ventana Inmediato del editor VBA:
?H(8,8)
por ejemplo.fuente