O Teorema de Nichomachus relaciona o quadrado de uma soma à soma de cubos:
e tem uma bela visualização geométrica:
Desafio: Crie a 2ª parte desta visualização em ascii.
Você precisará garantir que todas as demarcações visuais sejam mantidas pelo seu diagrama. Isso é mais simples com quatro "cores", embora seja possível obter com apenas três (veja o último exemplo abaixo para saber como). Com quatro cores, você usa duas para distinguir entre regiões em uma "faixa" (ou seja, as diferentes partes que compõem um único cubo) e duas para distinguir entre faixas adjacentes. Você também pode usar mais de quatro cores, se quiser. Se algo disso for confuso, o exemplo de saída abaixo deve esclarecer.
Entrada / Saída
A entrada é um número inteiro único maior que 0. A saída é uma grade ascii semelhante aos exemplos abaixo, correspondente à grade nivelada para esse número de entrada na imagem acima. Os espaços em branco à esquerda e à direita estão ok.
Este é o código de golfe, com regras padrão.
Saídas de amostra
N = 1
#
N = 2
#oo
o@@
o@@
N = 3
#oo+++
o@@+++
o@@+++
+++###
+++###
+++###
N = 4
#oo+++oooo
o@@+++oooo
o@@+++@@@@
+++###@@@@
+++###@@@@
+++###@@@@
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
N = 5
#oo+++oooo+++++
o@@+++oooo+++++
o@@+++@@@@+++++
+++###@@@@+++++
+++###@@@@+++++
+++###@@@@#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
Versão de três cores para N = 4, graças a @BruceForte:
#oo+++oooo
o##+++oooo
o##+++####
+++ooo####
+++ooo####
+++ooo####
oo####++++
oo####++++
oo####++++
oo####++++
Respostas:
MATL ,
302827 bytesExperimente online!
Recursos bônus:
Para 26 bytes , a seguinte versão modificada produz saída gráfica :
Experimente no MATL Online!
A imagem está implorando por alguma cor e custa apenas 7 bytes:
Experimente no MATL Online!
Ou use uma versão mais longa (37 bytes) para ver como a matriz de caracteres é construída gradualmente :
Experimente no MATL Online!
Saídas de exemplo
Para entrada
8
, o seguinte mostra a versão básica, saída gráfica e saída gráfica em cores.Explicação
Procedimento geral
Uma matriz numérica é construída das camadas externa para interna em
N
etapas, ondeN
está a entrada. Cada etapa substitui uma parte interna (superior esquerda) da matriz anterior. No final, os números na matriz obtida são alterados para caracteres.Exemplo
Para entrada,
4
a primeira matriz éComo um segundo passo, a matriz
é sobrescrito na metade superior do último. Então o mesmo é feito com
e finalmente com
A matriz resultante é
Por fim,
30
é adicionado a cada entrada e os números resultantes são interpretados como pontos de código e convertidos em caracteres (começando em33
, correspondendo a!
).Construção das matrizes intermediárias
Para entrada
N
, considere diminuir valores dek
deN
para1
. Para cadak
um, é gerado um vetor de números inteiros de1
ak*(k+1)
e, em seguida, cada entrada é divididak
e arredondada. Como exemplo, parak=4
isso é fornecido (todos os blocos têm tamanho,k
exceto o último):enquanto que para
k=3
o resultado seria (todos os blocos têm tamanhok
):Esse vetor é adicionado, elemento a elemento com transmissão, a uma cópia transposta de si mesma; e depois
k
é adicionado a cada entrada. Parak=4
isso dáEssa é uma das matrizes intermediárias mostradas acima, exceto que é invertida horizontal e verticalmente. Então, tudo o que resta é inverter essa matriz e escrevê-la no canto superior esquerdo da matriz "acumulada" até agora, inicializada em uma matriz vazia para a primeira
k=N
etapa ( ).Código
fonte
Python 2 ,
187178164162152 152 bytes-8 bytes graças a Mr.Xcoder
-1 byte graças a Stephen
-10 bytes graças a Jonathan Frech
Experimente online!
fonte
sum(range(y))%y
->y*~-y/2%y
Carvão ,
5046 bytesExperimente online! Link é a versão detalhada do código. Versão anterior de 50 bytes com explicação: Experimente online!
Nota: Eu faço um loop sobre o caractere em vez de tentar atribuí-lo diretamente,
l
porque você não pode atribuir diretamente o resultado da indexação de uma string a uma variável, pois é uma construção ambígua no Charcoal. Felizmente, a contagem de bytes é a mesma.fonte
C (gcc) ,
135128120 bytesExperimente online!
Usa apenas três cores.
Conceitualmente, trabalha em uma grade girada em 180 graus:
E calcula as cores de acordo com a fórmula:
fonte
gcc -O2
.g(i%m,i/m,n)%3
)?x/k&&y/k
vez dex>=k&y>=k
R ,
131126123 bytes3 bytes salvos graças a @Giuseppe
Experimente online!
Ele usa o mesmo algoritmo da resposta MATL do @LuisMendo . A única diferença é que, em vez de converter em caracteres, a matriz é emitida com todos os valores mod4 para garantir que cada elemento seja um único caractere ASCII.
fonte
for
de volta para ciclo -1 byte :)Python 2 ,
176175 bytesExperimente online!
fonte
J="".join;
(+10 bytes) e substituir os dois"".join
s (-2 * 7 = -14 bytes) porJ
(+2 bytes), poderá salvar um byte (pois deve haver um espaço adicional após oprint
; +1 byte) .