Se han fabricado nanobots automáticos para la construcción de viviendas, y es su trabajo codificarlos.
Aquí está la casa creada por entrada 7 4 2
/-----/|
/ / |
|-----| |
| | |
| | /
|_____|/
La entrada es una cadena que contiene las dimensiones de la casa.
7
es el ancho
|_____|
---7---
4
es la altura
|
|
|
|
2
es la profundidad
/
/
Ante esta entrada, ¿puedes crear la casa?
Su código debe ser lo más pequeño posible para que pueda caber en los robots.
Notas
Las dimensiones más pequeñas que se le darán como entrada son 3 2 2
. Su programa puede hacer cualquier cosa con dimensiones más pequeñas que 3 2 2
.
Casos de prueba
3 2 10
/-/|
/ / |
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
|-| /
|_|/
3 2 10
?Respuestas:
Python 2, 128 bytes
Imprime fila por fila. Los índices de la fila
i
cuentan hacia atrás desded
hasta-h+1
.fuente
' '*min(d-i,h-1,w+1,h-1+i)
por(' '*d)[max(0,i):h-1+i]
Ruby, 145 bytes
Devuelve una lista de cadenas. Cada elemento de la lista corresponde a una línea. Si se debe devolver una cadena de varias líneas, agregue 3 bytes para agregar
*$/
justo antes del último paréntesis.fuente
JavaScript (ES6), 169 bytes
Donde
\n
representa un carácter de nueva línea literal. Explicación:Editar: Guardado 2 bytes gracias a @jrich.
fuente
,r='repeat'
del frente y reemplace el primero[r]
con[r='repeat']
,r=(n,c=` `)=>c.repeat(n)
y cuando cambié de táctica pasé por alto la posibilidad de la reorganización.Python
224301297 Bytes(Ahora funciona para todos los cuadros, incluido 1x1x1)
Explicación:
Toma tres constantes: l (longitud), h (altura), w (ancho).
Si observamos un par de cuadros de muestra, podemos encontrar patrones en el espacio.
Para un cuadro de 3 x 4 x 3, utilizaremos números para representar el espacio entre secciones.
La fila superior tiene 4 espacios o que es w + 1. Las siguientes tres líneas tienen w - (1 * x). X es la línea.
Estos son patrones que continúan a lo largo de todas las líneas en todos los cuadros. Por lo tanto, podemos programar fácilmente esta línea por línea, multiplicando el número de espacios para ajustar el patrón.
Aquí hay una muestra para una caja de 5 x 5 x2.
fuente
w,h,l=input()
o hacer de esto una función.Python 3.5,
328326313305295248 bytes(¡ Gracias a Kevin Lau por el consejo sobre la reducción del tamaño de las declaraciones ternarias! )
Toma la entrada como 3 enteros en el orden de
width, height, depth
. Jugaré más golf con el tiempo siempre que pueda.Pruébalo en línea! (Ideona)
Explicación:
Para los propósitos de esta explicación, suponga que la función se ejecutó con los argumentos
(3,2,3)
donde 3 es el ancho (w
), 2 es la altura (h
) y 3 es la profundidad (d
). Dicho esto, permítanme comenzar mostrando la parte principal de toda la función:Aquí, las dos listas que conforman la "casa" completa se crean y luego se unen mediante nuevas líneas literales (
\n
). Llamémoslos listaa
y listab
respectivamente, y analicemos cada uno de ellos:Aquí es donde
a
se crea la lista :Esta lista contiene las primeras
d
líneas de la casa. Aquí,i
es cada número en el rango0=>(d-(d-h))+d-h
en qued-h=0
si es negativo o cero. Para comenzar,d-i
se agregan espacios a la lista, seguidos de/
ay luego lo que sea que devuelva una declaración condicional comprimida. En esta declaración condicional,w-2
se devuelve el número de espacios sii>1
. De lo contrario,-
se devuelve el mismo número de . Luego, estos son seguidos por otro/
, y luego espacios, donde el número de espacios ahora depende de si o noi<=d-(d-h)-1
. Si es así,i
se agregan espacios. De lo contrario,h-1
se agregan espacios. Finalmente, todo esto se completa con a/
o a|
, donde|
se agrega sii<=d-(d-h)-1
, de lo contrario, un/
está agregado. En este caso de un3x2x3
prisma, esto sería devuelto por la listaa
:Aquí es donde
b
se crea la lista :Esta lista contiene el resto de las líneas del prisma. En esta lista,
i
es cada número entero en el rango(h-(h-d))+h-d=>0
dondeh-d=0
es negativo o cero. Para comenzar esta lista, primero|
se agrega a ya que estas líneas siempre comienzan con a|
. Entonces, o un espacio,-
o_
se añade en función de si o noi=h
oi<2
. Sii<2
, entonces_
se agrega a. De lo contrario,-
se agrega a sii=h
, o se agrega un espacio sii>h
oi<h
oi>2
. Después de tomar esta decisión,w-2
se agrega el número del personaje elegido. Después de esto,|
se agrega otro , y luego se agrega unoi-1
od
varios espacios. Sii>h-(h-d)
, entonces und
Número de espacios se agregan. De lo contrario,i-1
se agrega el número de espacios. Finalmente, todo esto se completa con a|
o a/
, en el que|
se agrega a ifi>h-(h-d)
o a/
se agrega ifi<=h-(h-d)
. En el caso de un3x2x3
prisma, la listab
devuelve:Después de que se hayan creado las 2 listas, finalmente se unen con nuevas líneas literales (
\n
) usando'\n'.join()
. Este es su prisma completo, y en este caso, se vería así:fuente
'-_'[f<2]
. Finalmente,R=range;S,V,L=' |/'
funciona para asignar sus variables iniciales ya que las cadenas con mucho gusto se descomprimirán en esa situación.a=1 if b<9 else c=5
no se puede expresar como[a=1,c=5][b<9]
porque terminarás modificando ambosa
yc
. Aquí está la página de consejos de golf PPCG Python: codegolf.stackexchange.com/questions/54/…'_'if f<2else' -'[f==h]
,. Recuerde que los booleanos evalúan como enteros, por lo que podría "encadenar" este ternario al otro que arregló para obtener[' -'[f==h],'_'][f<2]
. Además, todavía no has usado mi consejoS,V,L=' |/'
.