Você precisa construir uma pirâmide a partir de cubos. Os cubos podem ser vistos de dois ângulos:
_____ _____
/\ \ / /\
/ \____\ /____/ \
\ / / \ \ /
\/____/ \____\/
Este é um exemplo para cubos de tamanho 2 a partir dos 2 ângulos possíveis. A altura dos cubos é $size
barras (ou barras invertidas) e a largura do cubo é 2 * $size
sublinhada. A largura do nível superior deve conter um caractere sublinhado extra.
A entrada será fornecida como uma sequência contendo um número (tamanho de cubos), barra ou barra invertida (para indicar direção / ângulo) e outro número (altura da pirâmide).
Exemplos:
Entrada:
1/1
Resultado:
___
/\__\
\/__/
Entrada:
1\1
Resultado:
___
/__/\
\__\/
Entrada:
2/1
Resultado:
_____
/\ \
/ \____\
\ / /
\/____/
Entrada:
1/2
Resultado:
___
___/\__\
/\__\/__/
\/__/\__\
\/__/
Entrada:
2\2
Resultado:
_____
/ /\
/____/ \_____
\ \ / /\
\____\/____/ \
/ /\ \ /
/____/ \____\/
\ \ /
\____\/
Entrada:
1/3
Resultado:
___
___/\__\
___/\__\/__/
/\__\/__/\__\
\/__/\__\/__/
\/__/\__\
\/__/
- Os espaços em branco à direita / à esquerda estão OK.
- As brechas padrão não são permitidas.
- Você pode assumir que a entrada sempre será válida.
- Você pode assumir que a entrada não causará uma saída muito grande, ou seja: sem quebra de linha quando a saída for impressa no terminal.
- O tamanho do cubo e a altura da pirâmide são positivos (ou seja, ≥ 1)
- Isso é código-golfe, então o código mais curto em bytes vence.
O vencedor atual é:
Glen O com 270 bytes em julia
o desafio permanece aberto. se você vencer o atual, atualizarei a resposta aceita.
Respostas:
Julia -
503455369346313270 bytesUngolfed:
Uso:
ou
fonte
Perl, 343 bytes
Multilinha com comentários:
Exemplo de saída:
Eu também tentei implementá-lo como uma função C usando o mesmo algoritmo, esperando salvar bytes do luxo de nomes de variáveis de um caractere, mas ele acabou sendo 15 bytes maior, a 358 bytes (precisa ser compilado com o
-std=c89
gcc para deixar de fora). ovoid
no cabeçalho da função):fonte
printf("%c" --> putchar(
,printf("\n") --> puts("")
, mover todas as declarações int fora da função, então você pode eliminar oint
(ver meta.codegolf.stackexchange.com/q/5532/15599 ), altere todos os literais de caracteres para seus códigos ascii, por exemplo' ' --> 32
. Refatorar os loops for, por exemplo,for(k+1;z--;)
também pode ajudar, mas é mais complicado.e
pode ser um int, desde que você o inicialize em zero.sscanf
substituirá apenas o byte menos significativo e poderá deixar qualquer lixo existente nos outros três bytes.main
vez de,j
mas não precisa passar o parâmetros
, e pode tirar proveito da inicialização automática de variáveis globais.Ruby, 332
O único golfe realizado até agora é a eliminação de comentários e recuos. Mais tarde vou jogar golfe.
Eu montei uma variedade de espaços e coloquei os caracteres individuais nele. Há muita sobreposição de um cubo em cima de outro (trabalho de baixo para cima) e dentro do próprio cubo, para evitar código extra. Eu faço a pirâmide desenhando um losango (semelhante a /codegolf//a/54297/15599 ) e suprimindo a metade superior.
A parte difícil foi desenhar o cubo escalável. Comecei com um hexágono de perímetro com 2n + 1
_
caracteres nos lados horizontais. Eu também tinha 2n + 1/
e\
, portanto, tinha muitos, mas, ao traçar o_
último, eu os sobrescrevia.As linhas internas são as únicas que são alteradas dependendo da direção em que o cubo está voltado. Eu traço tudo
/
e\
com uma única tarefa.abs
ajuda a reverter a direção ei>>9&1
adiciona 1 extra aos valores negativos de i, o que diminui a parte superior. parai
= 0, um dos requeridos_
é plotado em excesso, portanto, a sequência do seletor'\_/'
contém todos os três símbolos, selecionados de acordo com o sinal dei
.O espaço em branco ao redor da saída é amplo, mas não excessivo: 4 * p * n alto e 8 * p * n de largura (este último é para permitir que o cubo apex esteja sempre no centro da saída.) Entendo "à direita / à esquerda" espaços em branco "para incluir linhas inteiras, mas pode revisar se necessário.
Código ungolfed
fonte