Introdução
Ontem vi um quebra-cabeça de aniversário . Parabéns!!
Também nesta semana, assisti a um episódio do programa de TV Bones, onde um corpo foi encontrado enterrado debaixo de uma árvore. Para calcular a hora da morte, eles contaram os anéis das árvores.
Os anéis de árvores se formam porque as árvores crescem mais lentamente durante o inverno e mais rápidas durante o verão. Assim, você pode calcular a idade da árvore contando os anéis. Além disso, você pode ver eventos naturais como estações chuvosas ou secas.
Desafio
Dado um número inteiro n >= 1
como entrada, escreva um programa completo para gerar os anéis de idade da árvore.
Como os anéis podem mudar de forma, use três caracteres diferentes ('0', '*', '+') para mostrar os ciclos climáticos.
Idade 1
0
Idade 2
***
*0*
***
Idade 3
+++++
+***+
+*0*+
+***+
+++++
Idade 4
0000000
0+++++0
0+***+0
0+*0*+0
0+***+0
0+++++0
0000000
O tamanho da árvore é um quadrado de lados 2*n - 1
Ganhando
O menor código em bytes vence.
('0', '*', '+')
então são 5 anos*
Respostas:
K5,
2730262522 bytesEssa abordagem iterativamente "envolve" um núcleo (começando com
"0"
) nos quatro lados usando algum outro caractere ({4(|+y,)/x}
). A sequência de embalagens sazonais é determinada por uma3!
sequência do módulo 3 ( ). É um pouco complicado conseguir que o case base se alinhe da maneira certa.editar:
Essa alternativa constrói toda a matriz retangular de uma só vez a partir do intervalo exclusivo fornecido (
!
) revertido e unido a si mesmo depois de soltar um item (t,1_|t:|
). Depois, levamos o produto cartesiano ao máximo (u|\:u:
), tomamos toda a matriz módulo 3 (3!
) e indexamos na matriz de caracteres.Em ação:
fonte
BBC Basic, 93 bytes
As palavras-chave abreviadas ajudam muito aqui. Na linha 2, estou usando o
VDU
comando (equivalente a Cputchar()
) para imprimir cada caractere. Isso é muito mais eficiente queP.MID$("0*+",p MOD3+1,1)
.Aqui está sendo executado no BeebEm3 em um Mac:
fonte
CJam, 25 bytes
Teste aqui.
Explicação
fonte
Matlab, 63 bytes
Exemplo:
fonte
Python 2, 83 bytes
Imprime linha por linha. Cada linha é cortada em três partes:
Para
n=4
:Geramos a parte esquerda ao contrário
w
, clonamos seus últimos2*i
tempos de caractere e adicionamos a versão original sem o primeiro caractere.fonte
Python 2, 83 bytes
Se pensarmos na árvore como uma grade de coordenadas, o símbolo em
(i,j)
é determinado pormax(abs(i),abs(j))%3
, ou equivalentemax(i,-i,j,-j)%3
. Para cada linhai
, juntamos e imprimimos os símbolos nessa linha.fonte
R
duas vezes e tem mais de 5 caracteres, então a atribuição vence.Pitão, 23 bytes
Experimente online: Demonstração
Explicação:
fonte
MATLAB,
807873 bytesObrigado Luis Mendo por me ajudar a raspar 5 bytes!
Exemplo
Ungolfed e Código Explicação
Nota menor
bwdist
é uma função que faz parte da caixa de ferramentas de processamento de imagem e só pode ser executada no MATLAB. O Octave (IIRC) ainda não foibwdist
implementado, portanto, isso não pode ser executado no Octave.fonte
eye
e multiplique os elementos por suarot90
versão editada para gerar a matriz "seed":I=eye(2*input('')-1);a='0*+';a(mod(bwdist(I.*rot90(I),'chessboard'),3)+1)
Python 2, 134 bytes
fonte
Perl, 118 bytes
Mais para fazer, mas uma versão básica por enquanto. Agora com deliciosa aderência extra às especificações.
Uso:
fonte
Matlab 92
fonte
Sed,
277caracteres(Código de 251 caracteres + opção de linha de comando de 1 caractere.)
Espera entrada em formato unário .
Exemplo de execução:
fonte
JavaScript (ES6), 114
Usando alerta para saída - fonte proporcional incorreta e o resultado é feio. No trecho de código abaixo, o alerta é redirecionado para o corpo do trecho, dando um resultado melhor. A nova linha dentro dos backticks é significativa e contada.
Teste a execução do snippet no Firefox.
fonte
Test running the snippet in Firefox
mas obviamente eu estava brincando, o Chrome (sem versão do Chrome) não é compatível com EcmaScritpt 6, faltando as=>
funções....
. Ainda longe do ES6Ruby, 85 caracteres
Exemplo de execução:
fonte
Moonscript - 104 bytes
fonte
C, 138 bytes
Função
t
usando um parâmetro inteiro - a idade.Ungolfed (com
main
função para executar facilmente o anterior):O
stdlib.h
pode ser necessário em alguns sistemas, porque sem ela o tipo de retorno da função não declaradocalloc
seria padrão paraint
. Porqueint
echar*
não são necessariamente do mesmo tamanho, um ponteiro inválido pode ser gravadoc
. Na maioria dos sistemas de 32 bits tantochar*
eint
têm o mesmo tamanho, mas isso não é verdade para sistemas de 64 bits.fonte