Advent Challenge 4: presente línea de montaje!

12

<< Anterior Siguiente >>

¡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 ly ancho w, la esquina inferior izquierda del cuadro actual siguiente estará exactamente a la l + w + 4derecha 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 + 2lí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 , 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í .

Hiperneutrino
fuente
@AdmBorkBork todas las cajas presentes tienen el mismo ancho
Erik the Outgolfer
1
Si el carbón no destruye esto, no sé qué lo hará.
totalmente humano
@totallyhuman en realidad, brainf ** k ganará este desafío: P
HyperNeutrino
¿Puedes hacer una publicación en meta para indexar todas estas preguntas?
RamenChef
@RamenChef Hm buena idea. Podría hacer eso: P
HyperNeutrino

Respuestas:

4

Carbón , 96 81 bytes

NθWS«→FυG↗→↙⁺²θ_≔I⪪ι υ≔⊟υπ≔§υ⁰ρ→↗G↑⊕π↗⊕θ→⊕ρ↓⊕π↙⊕θ ↑πP↗⊕θP←⊕ρ↓+↓πF²«↷⁴+ρ↷²+π↷¹+θ↶³

Prué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:

Nθ

Ingrese el ancho.

WS«

Pase sobre las líneas restantes hasta llegar a la línea en blanco.

→FυG↗→↙⁺²θ_

Dibuja el cinturón entre los regalos. La uvariable 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 un ifsería menos golfoso).

≔I⪪ι υ

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éjela upara que el cinturón se dibuje en el siguiente bucle.

→↗G↑⊕π↗⊕θ→⊕ρ↓⊕π↙⊕θ 

Borre el interior del presente, en caso de que el cinturón se superponga.

↑πP↗⊕θP←⊕ρ↓+↓π

Dibuja las líneas interiores del presente.

F²«↷⁴+ρ↷²+π↷¹+θ↶³

Dibuje hasta la mitad del exterior del presente, luego repita para la otra mitad.

Neil
fuente
1

Pip , 160 154 bytes

153 bytes de código, +1 para -lbandera.

{YMX:_+B+3MUaRV$.({UwhlWg+^11{a<=h+w?J[sXa-haN[0hh+w]?'-XlWR'+sXlWR("/|"a<h)RV(("+|/"aCMw).sXw)@<MN[ah+w-awh]'_Xw-a+1|s]sXl+w+3}M,y}MUa)R`_ +`'_X#_<|:'_}

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:

  • Defina una función que devuelva una lista de líneas que representan un cuadro
  • Asigna la función a cada lista de dimensiones dada
  • Concatene las listas de líneas resultantes por ítem
  • Realice un pequeño procesamiento posterior con reemplazos de expresiones regulares para que los guiones bajos se comporten correctamente

Deja un comentario y agregaré una explicación más detallada.

DLosc
fuente
0

Python 2 , 508 bytes

def f(B):
 d=B[0][1]+2;H=max(B)[0]+d+1;W=sum(sum(b[1:])+3for b in B)+len(B);r=[[' ']*i+W*['_']for i in range(d)]+[W*[' ']for _ in' '*H];o=0
 for h,w,l in B:
	for i in range(w+2,1,-1):r[i-1][o+i-2:o+l+i]=[' ']*(l+2)+['/'];r[h+i][o+i-1]=r[h+i][o+l+i]='/'
	r[0][o:o+l+2]=r[h+1][o:o+l+2]=r[w+h+2][o+w+1:o+w+l+3]=['+']+['-']*l+['+']
	for i in range(1,h+1):m=min(i,w)-1;r[i][o:o+l+2+m]=['|']+[' ']*l+['|']+[' ']*m;r[i+w+1][o+l+w+2]='|'
	r[w+1][o+l+w+2]='+';o+=l+w+4
 for l in r[H-1::-1]:print''.join(l).rstrip('_')

Pruébalo en línea!

Toma una lista de listas de [height, width, length]

TFeld
fuente