Nanobots automáticos para construção de casas foram fabricados, e é seu trabalho codificá-los.
Aqui é a casa criada pela entrada 7 4 2
/-----/|
/ / |
|-----| |
| | |
| | /
|_____|/
A entrada é uma sequência que contém as dimensões da casa.
7
é a largura.
|_____|
---7---
4
é a altura
|
|
|
|
2
é a profundidade
/
/
Dada essa entrada, você pode criar a casa?
Seu código deve ser o menor possível para caber nos robôs.
Notas
As menores dimensões que você receberá como entrada são 3 2 2
. Seu programa pode fazer qualquer coisa com dimensões menores que 3 2 2
.
Casos de teste
3 2 10
/-/|
/ / |
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
|-| /
|_|/
3 2 10
?Respostas:
Python 2, 128 bytes
Imprime linha por linha. Os índices de linha são
i
decrescentes ded
até-h+1
.fonte
' '*min(d-i,h-1,w+1,h-1+i)
por(' '*d)[max(0,i):h-1+i]
Ruby, 145 bytes
Retorna uma lista de strings. Cada elemento da lista corresponde a uma linha. Se for necessário retornar uma cadeia de linhas múltiplas, adicione 3 bytes para adicionar
*$/
logo antes do último colchete.fonte
JavaScript (ES6), 169 bytes
Onde
\n
representa um caractere literal de nova linha. Explicação:Editar: salvou 2 bytes graças a @jrich.
fonte
,r='repeat'
da frente e substitua o primeiro[r]
por[r='repeat']
,r=(n,c=` `)=>c.repeat(n)
e quando mudei de rumo , ignorei a possibilidade de reorganização.Pitão
224301297 Bytes(Agora funciona para todas as caixas, incluindo 1x1x1)
Explicação:
Toma em três constantes: l (comprimento), h (altura), w (largura).
Se olharmos para algumas caixas de amostra, podemos encontrar padrões no espaçamento.
Para uma caixa 3 x 4 x 3, usaremos números para representar o espaçamento entre as seções.
A linha superior tem 4 espaços ou que é w + 1. As próximas três linhas têm w - (1 * x). X sendo a linha.
Esses são padrões que continuam ao longo de todas as linhas em todas as caixas. Portanto, podemos programar facilmente essa linha por linha, multiplicando o número de espaços para ajustar-se ao padrão.
Aqui está uma amostra para uma caixa 5 x 5 x2.
fonte
w,h,l=input()
ou tornar isso uma função.Python 3.5,
328326313305295248 bytes( Obrigado a Kevin Lau pela dica sobre como reduzir o tamanho das declarações ternárias! )
Recebe a entrada como 3 números inteiros na ordem de
width, height, depth
. Golf mais com o tempo sempre que posso.Experimente online! (Ideona)
Explicação:
Para os fins desta explicação, assuma que a função foi executada com os argumentos em
(3,2,3)
que 3 é a largura (w
), 2 é a altura (h
) e 3 é a profundidade (d
). Dito isto, deixe-me começar mostrando a parte principal de toda a função:Aqui, as duas listas que compõem a "casa" inteira são criadas e depois unidas por novas linhas literais (
\n
). Vamos chamá-los de listaa
e listab
, respectivamente, e analisar cada um deles:Aqui é onde a lista
a
é criada:Esta lista contém as primeiras
d
linhas da casa. Aqui,i
é cada número no intervalo em0=>(d-(d-h))+d-h
qued-h=0
se negativo ou zero. Para começar, osd-i
espaços são adicionados à lista, seguidos por a/
e, em seguida, o que for retornado por uma instrução condicional compactada. Nesta declaração condicional, ow-2
número de espaços será retornado sei>1
. Caso contrário, o mesmo número de-
será retornado. Em seguida, eles são seguidos por outro/
e, em seguida, espaços, onde o número de espaços agora depende se deve ou nãoi<=d-(d-h)-1
. Se estiver, osi
espaços serão adicionados. Caso contrário, osh-1
espaços serão adicionados. Finalmente, tudo isso é/
complementado por a ou a|
, onde é adicionado. Neste caso de um|
é adicionado sei<=d-(d-h)-1
, caso contrário, um/
3x2x3
prisma, isso seria retornado por listaa
:Aqui é onde a lista
b
é criada:Esta lista contém o restante das linhas do prisma. Nesta lista,
i
é cada número inteiro no intervalo em(h-(h-d))+h-d=>0
queh-d=0
se for negativo ou zero. Para iniciar esta lista, primeiro|
é adicionado a, pois essas linhas sempre começam com a|
. Então, seja um espaço,-
ou_
é adicionado dependendo se ou nãoi=h
oui<2
. Sei<2
, a_
é adicionado. Caso contrário, a-
é adicionado sei=h
, ou um espaço é adicionado sei>h
oui<h
oui>2
. Após esta decisão ser tomada, ow-2
número do personagem escolhido é adicionado. Depois disso, outro|
é adicionado e, em seguida, umi-1
oud
número de espaços é adicionado. Sei>h-(h-d)
, então umd
número de espaços são adicionados. Caso contrário, oi-1
número de espaços será adicionado. Por fim, tudo isso é|
complementado com a ou a/
, no qual a|
é adicionado sei>h-(h-d)
, ou a/
é adicionado sei<=h-(h-d)
. No caso de um3x2x3
prisma, a listab
retorna:Depois que as 2 listas foram criadas, elas finalmente são unidas com literalmente novas linhas (
\n
) usando'\n'.join()
. Este é o seu prisma completo e, nesse caso, ficaria assim:fonte
'-_'[f<2]
. Finalmente,R=range;S,V,L=' |/'
trabalha para atribuir suas variáveis iniciais, já que as seqüências de caracteres se descompactam com prazer para você nessa situação.a=1 if b<9 else c=5
não pode ser expresso como[a=1,c=5][b<9]
porque você acabará modificando ambosa
ec
. Aqui está a página de dicas de golfe do PPCG Python: codegolf.stackexchange.com/questions/54/…'_'if f<2else' -'[f==h]
. Lembre-se de que os booleanos avaliam como números inteiros, para que você possa "encadear" esse ternário ao outro que você corrigiu para obter[' -'[f==h],'_'][f<2]
. Além disso, você ainda não usou minha dicaS,V,L=' |/'
.