Suponha um mosaico infinito de hexágonos compostos por |/\
caracteres.
/ \ / \ / \ / \
| | | | |
\ / \ / \ / \ / etc.
| | | |
\ / \ / \ /
Dada a entrada n > 0
, produza uma parte triangular desse lado a lado, conforme ilustrado nos exemplos abaixo, ancorada com a _
no meio de um hexágono:
n=1
\_/
n=2
\/ \/
\_/
n=3
\ | /
\/ \/
\_/
n=4
\/ \ / \/
\ | /
\/ \/
\_/
n=5
\ | | /
\/ \ / \/
\ | /
\/ \/
\_/
n=6
\/ \ / \ / \/
\ | | /
\/ \ / \/
\ | /
\/ \/
\_/
n=7
\ | | | /
\/ \ / \ / \/
\ | | /
\/ \ / \/
\ | /
\/ \/
\_/
n=8
\/ \ / \ / \ / \/
\ | | | /
\/ \ / \ / \/
\ | | /
\/ \ / \/
\ | /
\/ \/
\_/
and so on
Regras
- Novas linhas à esquerda / à direita ou outro espaço em branco são opcionais, desde que os caracteres sejam alinhados adequadamente.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- A saída pode ser no console, salva como uma imagem, retornada como uma lista de strings, etc.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Respostas:
Python 2 , 86 bytes
Experimente online!
Um dos truques de Erik me permitiu jogar 3 bytes! Economizou 3 bytes graças a Jonathan Allan.
Como isso funciona
Primeiro, isso obtém a entrada do STDIN e a atribui a duas variáveis separadas
i
ek
. Então, enquanto a variáveli
é verdadeira, nós a diminuímos e geramos as seqüências de acordo; este é um atalho para fazer um loop da entrada - 1 até 0.Gerando as cordas
Vou dividir isso em mais partes:
Primeiro, obter o espaçamento inicial é obtido com
" "*(k+~i)
. Comoi
é mapeado através do intervalo (entrada 0) , devemos subtraí-lo dek
(nossa entrada original armazenada com segurança), diminuir e repetir um espaço tantas vezes.+"\\"
- Adiciona o caractere"\"
aos espaços acima.' / |\ '[i%2::2]
- Gera nossas duas strings, a saber ,"/ \ "
e" | "
da seguinte maneira:Se
i
for ímpar, i% 2 é 1 , portanto,[i%2::2]
retorna cada 2 caracteres de nossa cadeia maior, começando no índice 1 (indexado 0).Se
i
for par, i% 2 é 1 , portanto, o mecanismo acima faz o mesmo, exceto que inicia no índice 0 .+~-i*
- Repete-se a sequência gerada acima, seja"/ \ "
ou" | "
, I-1 vezes, e acrescenta-lo a outras cadeias. O benefício do operador bit a bit (~
- Bitwise Complement, equivalente a i subtraído de -1 ) é que ele não requer parênteses nesse contexto.[:k-~i]
- Obtém todos os caracteres das seqüências de caracteres concatenadas acima até o índice k- ~ i = k - (-1 - i) = k + 1 + i .+"_/"[i>0:]
- Isso adiciona apenas"/"
se i ≥ 1 , caso contrário ele é anexado_/
.Exemplo completo / detalhes de execução
Vamos pegar um exemplo de como as coisas funcionam para uma entrada 4 :
fonte
i-=1
para o início do loop e use uma formação do lado direito ligeiramente diferente para reduzi-lo a 87 bytes .Python 2 , 90 bytes
Experimente online!
fonte
05AB1E , 33 bytes
Experimente online!
fonte
Mathematica, 131 bytes
retorna uma lista de strings
Experimente online!
fonte
Retina ,
129119112 bytesExperimente online!
fonte
Carvão , 26 bytes
Experimente online! Link é a versão detalhada do código.
fonte
Python 2 ,
1231121101091009896 bytesExperimente online!
fonte
-1-a
por~a
(como fiz na minha resposta).Python 2 , 103 bytes
Experimente online!
fonte
APL (Dyalog) ,
9793 bytesExperimente online!
fonte
SOGL V0.12 ,
2827 bytesExperimente aqui!
fonte
Haskell ,
9695 bytesExperimente online!
Indexado em 0 e retorna uma lista de linhas.
fonte
Haskell,
10199 bytesRetorna uma lista de linhas.
Experimente online!
Como funciona:
Edit: @Laikoni salvou dois bytes. Obrigado!
fonte
([1,3..n-1]>>)
pode ser usado em vez de([1..div n 2]>>)
.Java (OpenJDK 8) ,
315306 bytesExperimente online!
fonte
Java (OpenJDK 8) , 198 bytes
Finalmente consegui abaixo de 200 bytes. Provavelmente postará uma explicação mais tarde.
Experimente online!
fonte
JavaScript (ES6),
8985 bytesDemo
Mostrar snippet de código
fonte
CJam, 43
Experimente online
fonte
PHP, 89 + 1 bytes
Execute como pipe
-nR
ou experimente online .fonte
Pitão ,
4644 bytesExperimente aqui!
fonte