¡Santa pudo refabricar todos los regalos que los elfos robaron durante la noche! Ahora tiene que enviarlos a la línea de ensamblaje para su embalaje. Por lo general, tiene una cámara para supervisar la línea de montaje, tanto para asegurarse de que los elfos están haciendo un buen trabajo como porque las imágenes de la línea de montaje se ven bien en los carteles publicitarios [cita requerida]
Desafortunadamente, su cámara se rompió, ¡así que le gustaría que dibujes una simulación de cómo sería la línea de montaje!
Para que la línea de ensamblaje funcione con la máxima eficiencia y para reducir el riesgo de error o falla, todas las cajas actuales tienen el mismo ancho para que encajen perfectamente en la cinta transportadora.
Desafío
Dada una lista de regalos representados por sus dimensiones, envíe una cinta transportadora con todos los regalos.
Un regalo se dibuja así:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Este regalo tiene ancho 1, altura 2 y longitud 4. Tenga en cuenta que los signos más no cuentan para la longitud lateral, por lo que un regalo con longitud 4 en realidad abarca 6 posiciones.
Todos los regalos se dibujan uno al lado del otro con un espacio entre los dos personajes más cercanos; es decir, las esquinas inferiores izquierdas de los regalos están espaciadas de tal manera que si un cuadro actual tiene longitud l
y ancho w
, la esquina inferior izquierda del cuadro actual siguiente estará exactamente a la l + w + 4
derecha de la esquina inferior izquierda del cuadro anterior.
Después de dibujar todas las cajas presentes, la cinta transportadora se dibuja reemplazando el espacio entre cajas en cada una de las últimas width + 2
líneas con guiones bajos.
El resultado final para los cuadros actuales con (l, w, h)
de [(4, 1, 2), (8, 1, 3), (1, 1, 1)]
sería:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
Especificaciones de formato
Puede optar por tomar una lista de 3 tuplas donde uno de los elementos es coherente en toda la lista (que sería el ancho), o puede tomar el ancho actual y luego una lista de 2 tuplas que representa la longitud y altura de cada regalo. Puede tomar las entradas en cualquier orden y en cualquier formato razonable, pero los regalos deben mostrarse en el mismo orden en que se dan como entrada.
Puede elegir cualquier formato de salida razonable para el arte ASCII (incluido el regreso de una función).
Casos de prueba
Estos casos de prueba se dan como [(l, w, h), ...]
formato.
[(4, 1, 2), (8, 1, 3), (1, 1, 1)]:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
[(5, 3, 4), (8, 3, 1), (1, 3, 7)]:
+-+
/ /|
/ / |
+-----+ / / |
/ /| +-+ |
/ / | | | |
/ / | +--------+ | | |
+-----+ | / /| | | |
| | +___/ / +_| | +
| | /___/ / /__| | /
| | /___+--------+ /___| | /
| |/____| |/____| |/
+-----+_____+--------+_____+-+
[(0, 0, 0)] (this is the most interesting test case ever :P)
++
+++
++
[(8, 3, 0), (0, 3, 8)] (more zero cases)
++
//|
// |
// |
++ |
|| |
|| |
|| |
+--------+ || |
/ /+_|| +
/ //__|| /
/ //___|| /
+--------+/____||/
+--------+_____++
Reglas
- Se aplican lagunas estándar
- Este es el código de golf , por lo que gana la respuesta más corta en bytes
- No se aceptarán respuestas.
Nota: Me inspiré para esta serie de desafíos de Advent Of Code . No estoy afiliado a este sitio
Puede ver una lista de todos los desafíos de la serie mirando la sección 'Vinculados' del primer desafío aquí .
Respuestas:
Carbón ,
9681 bytesPruébalo en línea! El enlace es a la versión detallada del código. La entrada es el ancho en la primera línea, luego las otras dimensiones en las siguientes líneas, terminando con una línea en blanco. Explicación:
Ingrese el ancho.
Pase sobre las líneas restantes hasta llegar a la línea en blanco.
Dibuja el cinturón entre los regalos. La
u
variable está predefinida en una lista vacía, que por lo tanto no hace nada en la primera pasada, mientras que luego termina con un solo elemento, lo que hace que este código se ejecute una vez. (Usar unif
sería menos golfoso).Divida las dimensiones en el espacio, conviértalas en un número entero y guárdelas
u
.Elimine la última dimensión y guárdela
p
.Copie la primera dimensión en
r
, pero déjelau
para que el cinturón se dibuje en el siguiente bucle.Borre el interior del presente, en caso de que el cinturón se superponga.
Dibuja las líneas interiores del presente.
Dibuje hasta la mitad del exterior del presente, luego repita para la otra mitad.
fuente
Pip ,
160154 bytes153 bytes de código, +1 para
-l
bandera.Esta es una función que toma una lista de listas que contienen
[width height length]
. Pruébalo en línea!¿Cómo?
Explicación de nivel superior:
Deja un comentario y agregaré una explicación más detallada.
fuente
Python 2 , 508 bytes
Pruébalo en línea!
Toma una lista de listas de
[height, width, length]
fuente