Papai Noel foi capaz de remanufaturar todos os presentes que os elfos roubaram da noite para o dia! Agora ele tem que enviá-los para a linha de montagem para embalagem. Ele geralmente tem uma câmera para supervisionar a linha de montagem, para garantir que os elfos estejam fazendo um bom trabalho e porque as imagens da linha de montagem ficam bem em cartazes publicitários [citação necessária]
Infelizmente, a câmera dele quebrou, então ele gostaria que você desenhasse uma simulação de como seria a linha de montagem!
Para manter a linha de montagem funcionando com a máxima eficiência e reduzir o risco de erro ou falha, todas as caixas presentes têm a mesma largura para que se encaixem perfeitamente na correia transportadora.
Desafio
Dada uma lista de presentes representados por suas dimensões, produza uma correia transportadora com todos os presentes.
Um presente é desenhado assim:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Esse presente possui largura 1, altura 2 e comprimento 4. Observe que os sinais de mais não contam para o comprimento lateral; portanto, um presente com comprimento 4 ocupa 6 posições.
Todos os presentes são desenhados um ao lado do outro com um espaço entre os dois caracteres mais próximos; ou seja, os cantos inferior esquerdo dos presentes são espaçados de modo que, se uma caixa atual tiver comprimento l
e largura w
, o canto inferior esquerdo da próxima caixa atual estará exatamente na l + w + 4
posição direita do canto inferior esquerdo da caixa anterior.
Depois que todas as caixas atuais são desenhadas, a correia transportadora é desenhada substituindo o espaço entre as caixas em cada uma das últimas width + 2
linhas por sublinhados.
A saída final para caixas atuais com (l, w, h)
de [(4, 1, 2), (8, 1, 3), (1, 1, 1)]
seria:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
Especificações de formatação
Você pode escolher entre obter uma lista de três tuplas em que um dos elementos é consistente em toda a lista (que seria a largura) ou escolher a largura atual e, em seguida, uma lista de duas tuplas representando o comprimento e altura de cada presente. Você pode receber as entradas em qualquer ordem e em qualquer formato razoável, mas os presentes devem ser exibidos na mesma ordem em que são fornecidos como entrada.
Você pode escolher qualquer formato de saída razoável para a arte ASCII (incluindo retornar de uma função).
Casos de teste
Esses casos de teste são fornecidos 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)
++
//|
// |
// |
++ |
|| |
|| |
|| |
+--------+ || |
/ /+_|| +
/ //__|| /
/ //___|| /
+--------+/____||/
+--------+_____++
Regras
- As brechas padrão se aplicam
- Isso é código-golfe , então a resposta mais curta em bytes vence
- Nenhuma resposta será aceita
Nota: Eu me inspirei para esta série de desafios da Advent Of Code . Não tenho afiliação com este site
Você pode ver uma lista de todos os desafios da série consultando a seção 'Vinculado' do primeiro desafio aqui .