No episódio de hoje de AAOD, vamos construir um santuário chinês de diferentes alturas.
Considere os seguintes exemplos de height ( N
) 1
para6
N = 1
:
.
|
. ]#[ .
\_______/
. ]###[ .
\__]#.-.#[__/
|___| |___|
|___|_|___|
####/_\####
|___|
/_____\
N = 2
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\___]#.---.#[___/
|__|_| |_|__|
|__|_|___|_|__|
#####/___\#####
|_____|
/_______\
N = 3
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\____]#.-----.#[____/
|__|__| |__|__|
|__|__|_____|__|__|
######/_____\######
|_______|
/_________\
N = 4
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_____]##.-----.##[_____/
|__|__|_| |_|__|__|
|__|__|_|_____|_|__|__|
########/_____\########
|_______|
/_________\
N = 5
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\______]###.-----.###[______/
|__|__|___| |___|__|__|
|__|__|___|_____|___|__|__|
##########/_____\##########
|_______|
/_________\
N = 6
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\___________________________/
. ]#############[ .
\_______]####.-----.####[_______/
|__|__|__|__| |__|__|__|__|
|__|__|__|__|_____|__|__|__|__|
############/_____\############
|_______|
/_________\
e assim por diante.
Detalhes da construção
Estou certo de que a maioria dos detalhes sobre o padrão é clara. Aqui estão alguns detalhes:
- A porta na parte inferior do santuário pode ter
1
_
largura mínima e largura máxima5
_
. - Sempre haverá dois
.
diretamente acima dos pilares ao redor da porta (dois verticais|
). - As escadas começam com a mesma largura da porta e aumentam como mostra o padrão
- Os
]##..##[
blocos acima de cada nível do telhado aumentam de tamanho de2
cima para baixo. - Os
\__...__/
níveis dos telhados aumentam de tamanho de4
cima para baixo. - Os blocos de paredes ao redor da porta devem conter no mínimo
1
_
e no máximo3
_
entre os dois|
. A prioridade vai para os blocos da parede externa, para que o mais próximo da porta obtenha um tamanho variável para cada nível. - O espaço entre o (e )
.
e]
(ou[
) é preenchido#
no telhado logo acima das portas.
Detalhes do Desafio
- Escreva uma função ou programa completo que leia um número inteiro positivo maior que
0
via argumento STDIN / ARGV / function ou equivalente mais próximo e produza (para STDOUT ou equivalente mais próximo) oN
th Shrine Chinês - A nova linha à direita é opcional.
- Não deve haver espaços à direita ou espaços à direita suficientes para preencher a saída no retângulo delimitador mínimo.
- Não deve haver espaços à esquerda que não façam parte do padrão.
Entre os melhores
O primeiro post da série gera uma tabela de classificação.
Para garantir que suas respostas sejam exibidas, inicie todas as respostas com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
N=1
caso? Por que não 3 e tem janelas laterais menores, como noN=2
caso?N=1
caso, o primeiro telhado não é muito longo (largo)?#
ao lado do.
para apoiar o]
e[
acima dele. Sobre o tamanho inicial do telhado - Esse é o tamanho do telhado no telhado superior de cada altura.Respostas:
CJam, 200 bytes
Novas linhas adicionadas para evitar a rolagem. Experimente online
Breve explicação:
O programa constrói a metade esquerda do santuário (incluindo o meio), depois o inverte e substitui alguns caracteres para obter a metade direita. Uma série de n espaços é representada como o número ~ n (bit a bit "não") durante a construção e substituída pelos espaços reais no final.
O programa começa com as 2 linhas superiores e, em seguida, para cada nível do telhado, ele precede todas as linhas anteriores com 2 espaços e adiciona o novo telhado (2 linhas). O último telhado é modificado para adicionar a parte "acima da porta".
Em seguida, a parede superior é construída repetindo "| __" e truncando no comprimento certo, seguido por um "_ |" fixo e espaços. A parede é então duplicada e os espaços das portas são substituídos por sublinhados. Finalmente, a parte inferior é construída linha por linha.
fonte
Perl,
332 316294Experimente- me .
C, 371
Experimentar me .
JavaScript, 365
O acima pode ser traduzido quase 1 para 1 em JavaScript:
Usar:
fonte
s
. A menos que você o aloque dinamicamente, é claro.Python 2,
356352347344 bytesBasicamente, isso constrói o santuário linha por linha. A função
p
imprime uma string com os espaços necessários para centralizá-la.Usei o python 2 para economizar muitos bytes, porque o objeto do mapa python 3 não é acionado. Eu acho que eu deveria sempre jogar golfe python 2 , apenas salva mais alguns bytes (mesmo que seja apenas para não precisar analisar a entrada como int). Hehehe, não é como o código é bonito para jogar golfe em primeiro lugar.
Edit: e, é claro, agora não preciso mais do mapa ...
Aqui está o código na forma não destruída:
fonte
print(B*(5+2*n-len(s)//2)+s)
paraprint B*(5+2*n-len(s)/2)+s
(remover parênteses e mudar//
para/
).print B*(5+2*n-len(s)/2)+s
paraprint(5+2*n-len(s)/2)*B+s
, poderá remover o espaço depoisprint
.JavaScript ( ES6 ), 440
Editar bug de lintel corrigido
Uma função com altura como parâmetro, saída para o console.
Usando muito a sequência de modelos , todas as novas linhas são significativas e contadas.
Execute o snippet para testar no Firefox (com saída do console)
Versão ungolfed para teste interativo:
fonte
Haskell, 473 bytes
fonte
#
C, 660 bytes
O padrão parecia muito irregular para criar algo sofisticado, principalmente em um idioma sem processamento de string. Então, aqui está a minha abordagem de força bruta:
Antes de jogar golfe:
Não há muito a explicar aqui. Apenas vai linha por linha e gera a contagem necessária de cada caractere. Tentei manter o código em si compacto, mas ele ainda se soma.
d
é a largura da porta,w
a largura de cada parede de tijolos.fonte
c(char*s){for(;*s;)putchar(*s++);}
==>#define c printf
;r(n,c){for(j=0;j++<n;)putchar(c);}
==>r(n,C){while(n--)putchar(C);}