Dado três números inteiros> = 2, crie um cubo ASCII em uma projeção ortogonal (gabinete). Os três números inteiros representam altura, largura e profundidade (medidos em caracteres visíveis), incluindo os cantos. Os cantos devem ser 'o's ou' + ', de livre escolha.
w: 10, h: 5, d: 4 Dá assim:
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Agora, para tornar isso um pouco mais difícil, todas as faces podem ser sólidas, transparentes ou ausentes. Nós ordenamos os rostos assim:
o--------o
/ /|
/ 2 / |
o--------o 3|
| | o
| 1 | /
| |/
o--------o
---
|2|
-------
|5|1|3|
-------
|4|
---
|6|
---
E forneça uma lista de tokens, S, T ou M. O exemplo original é assim:
w 10
h 5
d 4
S S S S S S
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Se um rosto é transparente, podemos ver qualquer coisa por trás dele:
T S S S S S
o--------o
/ /|
/ / |
o--------o |
| o-----| o
| / | /
|/ |/
o--------o
T T T T T T
o--------o
/| /|
/ | / |
o--------o |
| o-----|--o
| / | /
|/ |/
o--------o
Para pares de faces ausentes, arestas ou cantos adjacentes não são mais visíveis:
M M S S S S
o--------o
/| /|
/ | / |
o | o |
| o-----| o
| / | /
|/ |/
o--------o
M M S S M S
o--------o
| /|
| / |
| o |
o-----| o
/ | /
/ |/
o--------o
Código de golfe, código mais curto ganha! Espaços à direita e novas linhas são bons, você pode escolher o método e a ordem de entrada.
you're free to choose input method and input order
. E como nada diz o contrário, qualquer um dos métodos de entrada / saída padrão pode ser usado.Respostas:
Carvão ,
190181 bytesExperimente online! Link é a versão detalhada do código. Editar: salvou 9 bytes otimizando minhas condições. O carvão não tem
else
token, portanto, osif
comandos sempre têm duas alternativas, a menos que estejam no final de um bloco ou programa. Para evitar isso, uso emfor (<bool>)
vez deif (<bool>)
que tenha um efeito semelhante quando a expressão pode ter apenas os valores 0 ou 1, mas salva um byte. (A fim de conseguir isso eu tive que mudar as expressões de modo que eles estavam sempre verdadeiro quando o corpo precisava ser executado.) I também foi capaz de otimizarif (<bool>) for (<int>)
parafor (And(bool, int))
.fonte
X * Y * Z
cubo ASCII.JavaScript (ES6),
318314308 bytesToma largura, altura e profundidade como números inteiros e as faces como uma matriz de caracteres.
Quão?
A função M () processa um dado retorno de chamada F em um determinado intervalo [0 ... n] .
A variável a possui uma matriz plana que representa uma grade de tamanho (w + d) x (h + d-1) . Inicialmente, é preenchido com linhas de espaços terminadas com novas linhas.
A função D () é usada para 'desenhar' uma face do cubóide.
Os dois bits menos significativos do parâmetro t contêm o tipo de face:
Os bits 2 a 4 mantêm o índice de face com base em 0.
As faces são desenhadas na seguinte ordem:
Demo
Mostrar snippet de código
fonte
Sogl v0.11 ,
200194193192190 bytesRecebe entrada na ordem
Amarrado!
Experimente aqui! (valor compactado alterado para ser compatível com V0.12)
fonte