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 .
Respostas:
Carvão ,
9681 bytesExperimente online! Link é a versão detalhada do código. Entrada é a largura na primeira linha, depois as outras dimensões nas linhas seguintes, terminando com uma linha em branco. Explicação:
Insira a largura.
Passe pelas linhas restantes até que a linha em branco seja alcançada.
Desenhe o cinto entre os presentes. A
u
variável é predefinida para uma lista vazia, que, portanto, não faz nada na primeira passagem, enquanto mais tarde termina com um único elemento, fazendo com que esse código seja executado uma vez. (Usar umif
seria menos golfe.)Divida as dimensões no espaço, converta-as em número inteiro e salve-as
u
.Remova a última dimensão e salve-a
p
.Copie a primeira dimensão para
r
, mas deixe-au
para que o cinto seja desenhado no próximo loop.Apague o interior do presente, caso o cinto se sobreponha.
Desenhe as linhas interiores do presente.
Desenhe na metade do caminho para o exterior do presente e repita para a outra metade.
fonte
Pip ,
160154 bytes153 bytes de código, +1 para
-l
sinalizador.Esta é uma função que leva uma lista de listas contendo
[width height length]
. Experimente online!Quão?
Explicação de nível superior:
Deixe um comentário e eu adicionarei uma explicação mais detalhada.
fonte
Python 2 , 508 bytes
Experimente online!
Faz uma lista de listas de
[height, width, length]
fonte