Escreva o código mais curto medido pela contagem de bytes para gerar uma grade ASCII composta por rhombi, considerando os seguintes parâmetros:
- m - número de rombos completos em uma linha
- n - número de linhas
- s - lado do menor losango
- r - nível de aninhamento - quantos losangos existem dentro dos "base" (que são fonud entre as interseções da grade)
Exemplos
1. Input: 5 3 1 0
Output:
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
A 5x3 grid of rhombi with side 1, no nesting
2. Input: 3 2 2 0
Output:
/\ /\ /\
/ \/ \/ \
\ /\ /\ /
\/ \/ \/
/\ /\ /\
/ \/ \/ \
\ /\ /\ /
\/ \/ \/
A 3x2 grid of rhombi with side 2, no nesting
3. Input: 5 2 1 2
Output:
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
A 5x2 grid of rhombi with side 1 (the smallest rhombus), level of nesting is 2
4. Input: 4 2 2 1
Output:
//\\ //\\ //\\ //\\
///\\\///\\\///\\\///\\\
// \\// \\// \\// \\
\\ //\\ //\\ //\\ //
\\\///\\\///\\\///\\\///
\\// \\// \\// \\//
//\\ //\\ //\\ //\\
///\\\///\\\///\\\///\\\
// \\// \\// \\// \\
\\ //\\ //\\ //\\ //
\\\///\\\///\\\///\\\///
\\// \\// \\// \\//
A 4x2 grid of rhombi with side 2 with level of nesting 1
5. Input: 4 2 3 3
Output:
////\\\\ ////\\\\ ////\\\\ ////\\\\
/////\\\\\ /////\\\\\ /////\\\\\ /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
///// \\\\\///// \\\\\///// \\\\\///// \\\\\
//// \\\\//// \\\\//// \\\\//// \\\\
\\\\ ////\\\\ ////\\\\ ////\\\\ ////
\\\\\ /////\\\\\ /////\\\\\ /////\\\\\ /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\///// \\\\\///// \\\\\///// \\\\\/////
\\\\//// \\\\//// \\\\//// \\\\////
////\\\\ ////\\\\ ////\\\\ ////\\\\
/////\\\\\ /////\\\\\ /////\\\\\ /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
///// \\\\\///// \\\\\///// \\\\\///// \\\\\
//// \\\\//// \\\\//// \\\\//// \\\\
\\\\ ////\\\\ ////\\\\ ////\\\\ ////
\\\\\ /////\\\\\ /////\\\\\ /////\\\\\ /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\///// \\\\\///// \\\\\///// \\\\\/////
\\\\//// \\\\//// \\\\//// \\\\////
A 4x2 grid of rhombi with side 3, level of nesting 3
Certifique-se de exibir o losango parcialmente visível nas bordas e nos cantos, quando necessário.
Respostas:
SOGL V0.12 , 20 bytes
Experimente aqui! Pega a entrada na ordem inversa do que são nos exemplos - r, s, n, m.
Explicação:
fonte
∙*
...Carvão ,
483937 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Desenhe um quadrado de tamanho
r + 1
. Este é um quarto de um diamante aninhado do tamanho 1.Copie o quadrado 1 para a direita e para baixo
s - 1
para obter o tamanho certo.Reflita para se tornar um diamante aninhado completo.
Calcule o tamanho desse diamante aninhado.
Copie o diamante para a
m - 1
hora certa .Copie o diamante para baixo
n - 1
.fonte
Python 2 ,
160159158 bytes-1 byte graças a Jonathan Frech
Experimente online!
Isso usa o fato de que a parte inferior do losango é a parte superior invertida (
[::-1]
), repetindorange(n*2)
e usando~x%2*2-1
para controlar se é a parte superior ou inferior.Para a parte superior (e inferior), o lado direito é apenas o lado esquerdo invertido e substituindo
/
por\
->l.replace(*'/\\')..[::-1]
Para gerar o padrão / aninhamento,
~-s*' '+'/'*(1+r*2)+~-s*' '
é usado para fazer uma string como///
essa ser iterada e cortada:fonte
(1+r*2)
pode ser(r-~r)
.Julia 0.6 , 190 bytes
Esta é uma solução funcional que calcula para cada par de índices o
i,j
que o símbolo deve ser exibido.Experimente online!
Ilustração
Comece com uma grade
r > 0
significa linhas mais grossasLidar com os cantos, verificando qual linha na grade original está mais próxima
Uma fada nos diz para remover todas as
s-1
linhasAtravessar na diagonal e pronto
fonte
JavaScript (ES6), 154 bytes
Calcula diretamente o caractere em cada célula da saída.
fonte
CJam, 44
Experimente online
Explicação:
fonte
C # (.NET Core) , 167 bytes
Experimente online!
Estou surpreso com o tamanho que consegui; Inicialmente, esperava uma solução mais longa. Ao dizer isso, tenho certeza de que há outros truques que eu perdi.
DeGolfed
fonte
Python 2 ,
201189 bytesExperimente online!
Usa o fato de que a parte inferior é igual à parte superior, mas mudou:
Economizou 22 bytes graças a Jonathan Frech
fonte
s-i-1
pode sers+~i
, economizando dois bytes.r+1+min(...
pode serr-~min(...
, salvando outro.L=[(...)*m for
pode serL=[m*(...)for
, economizando mais um byte.L+=[...];print'\n'.join(L*n)
pode serprint'\n'.join((L+[...])*n)
para salvar outro byte, resultando em 196 bytes .s+r-i-1
pors+~i+r
.exec
formatação de string.Perl 5, 159 + 3 (-anl) bytes
Experimente Online
fonte