Escreva um programa que leia uma matriz de valores binários que representam um cubo , que consiste em cubos menores. Cada valor diz se existe um voxel (cubo pequeno) presente na posição especificada ou não. O programa deve gerar a matriz fornecida como um gráfico ASCII (que significa gerar através do console ou gravar em um arquivo).
Exemplos
Vamos considerar as seguintes matrizes :
[
[[0,0],
[1,0]]
[[1,1],
[1,0]],
]
[
[[0,0],
[0,0]]
[[1,1],
[1,1]],
]
Nesse caso, a saída deve ficar assim (não é tão boa aqui quanto em editores / consoles de código com menos espaço vertical):
+----+
/ /|-+----+
+----+ | /|
| | +----+ |
| | | | +
+ + | |/
| | +----+
| |/
+----+
+----+----+
/ /|
+ + |
/ / +
+----+----+ /
| | +
| |/
+----+----+
Especificações do ASCII
Cada canto de um voxel é representado por um +
desde que haja alguma aresta que o conduza. Eles +
também são desenhados quando há uma aresta reta com mais de uma unidade de comprimento. Existem três tipos de arestas: a horizontal da esquerda para a direita ----
, a horizontal de trás para a frente /
e a vertical
|
|
Cada um deles deve terminar em um +
(desde que visível). As arestas não serão desenhadas quando subdividirem um plano plano em duas ou mais peças (diferentemente do que ocorre +
em relação às arestas, como indicado acima). Estruturas ocultas atrás de outras não devem ser desenhadas.
O 'desenho' é basicamente uma projeção paralela, de modo que apenas os lados superior, direito e frontal são visíveis - sempre do mesmo ângulo.
Detalhes
- 1ª dimensão: camada por camada, da mais alta para a mais baixa
- 2ª dimensão: linha por linha, de trás para a frente (mais próxima)
- 3ª dimensão: voxels em cada linha da esquerda para a direita
Se você usa o console ou lê arquivos como entrada e saída, é com você. Por favor, conte-nos sobre o seu código / como você se aproximou dele.
A julgar
Este é um codegolf e, portanto, o menor número de bytes vence. Isso inclui APENAS a parte que realmente faz o trabalho - ao contar os bytes, você pode considerar a entrada já analisada e salva em uma variável e é necessário que a sequência de saída seja salva em uma variável, pronta para ser impressa. A análise e a saída em si não contam.
(E irei votar de novo com exemplos criativos =)
Isso foi inspirado na página do Rob's Puzzle .
Lua (1442 bytes)
Animações bônus! :)
Se você tem alguma arte legal voxel no mesmo formato como os exemplos, vinculá-lo nos comentários e eu vou fazer uma animação fora dele
7x7x7
12x12x12
Este é meu primeiro golf código, pelo que a sua bastante confuso e eu pensando em melhorar ou portando-o para um idioma diferente.
Aqui está o que eu tenho, agora, com pouco menos de 2,5 kB com pouco golfe (apenas espaço em branco de recuo removido neste momento, continuarei mais tarde)
Aqui está a versão agora reduzida e com ~ 1,4kB de golf e minificada (observe que a tabela "a" na primeira linha é o espaço reservado para a matriz voxel):
Editar : Aqui está a versão original não-gasta (acima de 3kB), incluindo minhas edições para fazer a animação (se você estiver executando a versão você mesma e quiser a animação, altere a
false
próxima parte inferior do código paratrue
.Aqui está um exemplo de código que preencherá a matriz de voxel de uma sequência de caracteres para uma matriz de 3x3x3 voxel. (Ele pegará qualquer string em um formato semelhante, mas verifique se é um cubo ou as coisas provavelmente irão quebrar.)
Para usar isso, insira esse pedaço logo após a primeira linha
local v = {}
Aqui está a saída do padrão de voxel 12x12x12 fornecido : (e sim, parece melhor em um console normal / aparelho de visualização de texto, há um espaçamento vertical demais aqui)
Aqui está a saída do exemplo 7x7x7 aqui
fonte