Slimes são inimigos em forma de cubo no Minecraft que se dividem em várias versões menores de si mesmos quando mortos. Para os propósitos deste desafio, vamos descrevê-los como uma imagem de 8 × 8 pixels com 3 cores:
As cores RGB precisas são:
0, 0, 0
para os olhos e boca110, 170, 90
para o verde central mais escuro116, 196, 96
para o exterior, verde mais claro
Desafio
Escreva um programa ou função que receba um número inteiro positivo N e produza uma imagem de N tamanhos de slimes compactados em um retângulo. Indo da esquerda para a direita, a imagem deve seguir o padrão de ter:
- Uma pilha de 2 (N-1) 8 × 8 limos.
- Uma pilha de 2 (N-2) 16 × 16 limos.
- Uma pilha de 2 (N-3) 32 x 32 limos.
- E assim por diante até que a pilha contenha apenas um lodo.
As imagens de slime maiores que a versão 8 × 8 ( ) são geradas pela upsampling do vizinho mais próximo (ou seja, apenas dobrando todos os pixels). Observe que você deve usar o design exato do lodo e as cores fornecidas aqui.
A imagem final conterá 2 N -1 slimes e terá 2 (N + 3) -8 pixels de largura e 2 (N + 2) pixels de altura.
A imagem pode ser impressa em qualquer formato de arquivo de imagem comum, salva em um arquivo ou impressa / retornada como um fluxo de dados brutos ou exibida diretamente durante o tempo de execução.
O código mais curto em bytes vence.
Exemplos
Seu programa deve produzir esses resultados exatos.
N = 1:
N = 2:
N = 3:
N = 4:
N = 5:
N = 6:
N maior deve funcionar da mesma forma.
fonte
Respostas:
MATL ,
777674 bytesO código funciona nesse commit , que é anterior ao desafio.
Você pode experimentá-lo online no MATL . Este intérprete ainda é experimental. Se não funcionar, tente atualizar a página e pressione "Executar" novamente.
Aqui está um exemplo executado no interpretador offline:
Explicação
fonte
11
e funciona. Para11
o resultado, há uma imagem 8192 × 16376. Pois12
seria 16384 × 32760 (536 megapixels), exigindo mais de 4 GB de RAM, o que é mais do que meu laptop pode suportar.Dyalog APL,
118113 bytes('P3',⌽∘⍴,255,∊)(3↑(116 196 96)(110 170 90))[⊃,/i{⊃⍪/⍵⍴⊂⍺⌿⍺/8 8⍴∊22923813097005 926134669613412⊤¨⍨⊂32⍴3}¨⌽i←2*⍳⎕]
assumindo
⎕IO=0
Da direita para esquerda:
i←2*⍳⎕
potências 1 2 4 ... 2 n-1i{ }¨⌽i
itera sobre potências (com⍺
) e potências reversas (⍵
)⊤¨⍨⊂32⍴3
decodificar cada um dos números à esquerda como 32 dígitos ternários8 8⍴∊
achatar e remodelar para 8 × 8⍺⌿⍺/
replicar cada linha e coluna⍺
vezes⍵⍴⊂
tirar⍵
cópias⊃⍪/
e empilhá-los verticalmente⊃,/
juntar todos os resultados horizontalmente3↑(116 196 96)(110 170 90)
cores;3↑
estende-os com(0 0 0)
[ ]
indexe as cores com cada elemento da matriz; resultado é uma matriz de RGBs('P3',⌽∘⍴,255,∊)
é um "trem" - uma função que retorna'P3'
seguida pela forma invertida do argumento255
, e o argumento é achatado.fonte
⎕IO←0
e apenas declará-lo como uma condição, fora da contagem de bytes. Muitos sistemas APL usam isso como padrão. (Incluindo o seu LOL)JavaScript (ES7), 326
327bytesVersão ES6 Ungolfed
Tente você mesmo.
A única diferença entre a versão ES7 e ES6 é usar em
**
vez deMath.pow()
. Você também pode ver como pode chamar a função - neste exemplo comn=4
.Resultado
Editar% s
;
Isso é bem lento e pode levar algum tempo para números maiores que 10.
fonte
C, 220 bytes
Eu adicionei novas linhas inúteis para facilitar a leitura, a pontuação é sem essas novas linhas.
Define uma função
f(n)
que gera uma imagem PPM simples no stdout.fonte
Mathematica,
267255254225212 bytesEconomizou
2942 bytes graças a Martin EnderSugestões de golfe são bem-vindas, especialmente para a construção da matriz 8 por 8 (por 3)
s
. Infelizmente, não há "ArrayResize
" analógico paraImageResize
, portanto, a matriz precisa ser convertida em uma imagem (Image
) antes de redimensionar e, em seguida, voltar a uma matriz (ImageData
) para fazer issoJoin
.Ungolfed:
fonte
b=0g
. Para gerá-s
lo, pode ser mais curto codificar os valores de pixel como um número base 3, mas eu teria que tentar ter certeza. Enquanto isso, você pode salvar bytes por não definirb
,g
,f
,e
,t
até que você precisa deles, es
não precisa de um nome em tudo e nemc
. Para2^(j-1)8
você poder usar4*2^j
. Aplicando tudo isso, acabo com 225 bytes: pastebin.com/YnkUwvwVImage
,ImageResize
,ImageData
material. Este bit explode uma matriz por um fator de 2:#&@@{##&@@{#,#}&//@x}
ondex
está a matriz. Portanto, se você armazenar a grade 8x8 inicial em uma variávelx
ex=#&@@{##&@@{#,#}&//@x}
depois de cada uso, poderá gerar os blocos sucessivos facilmente.#&[##&[#,#]&//@x]
##~Join~2
e b)f={g,a=##&[G,G,G],a,g}
e, em seguida, substituir cada ocorrência de ainda maisG,G,G
coma
bem.Python 2.7:
424412405376357 bytesEu sou um pouco novo no golfe .... aqui vamos nós
ungolfed e comprimento testado ..
edit1: removido
sys.argv[1]
em favor deraw_input()
para salvar uma declaração de importação extraedit2: importação PIL reduzida: removido
from Image
adicionadoPIL.
edit3: Obrigado @ Sherlock9 pela codificação hexadecimal do modelo slime
edit4: não precisava da função def e usada em
input()
vez deraw_input()
fonte
'0000100001111110111211100111111102211220022112200111111000001000'
(sua matriz para trás) convertido da base 3 para a base 160x2df0777ca228b9c18447a6fb
. Com esse número, use um código como esse[0x2df0777ca228b9c18447a6fb//3**i%3 for i in range(64)]
para obter seus números inteiros na ordem correta.[0x2df0777ca228b9c18447a6fb/3**i%3for i in range(64)]
pode ser melhor.0x2df0777ca228b9c18447a6fb
. Isto é simples. Para um exemplo mais simples, para obter o0
th-dígito01221100
, divida por 30
vezes e, em seguida, pegue o último dígito (usando o mod 3) para obter0
. Para pegar o segundo dígito, divida por 32
vezes e depois mod 3 para obter1
. A compreensão da lista é dividida em 364
vezes para recuperar toda a sua matriz. Se você tiver mais perguntas, podemos discuti-las no chat do PPCG .R,
378356346334 bytesSalva como um arquivo png. Recuado, com alimentação de linha:
N = 2: N = 3: N = 4:
Algumas explicações:
Aqui está a matriz que está sendo plotada (0 representa verde claro, 1 verde escuro e 2 preto; a matriz é inclinada porque as colunas são o eixo y e enfileira o eixo x):
Cada chamada para
image
plotar essa matriz (com cada número inteiro correspondente a uma cor). Para N = 4, aqui está L (a matriz de layout, cada número único representa um único gráfico), w (as larguras das colunas da matriz) eh (as alturas das linhas da matriz):fonte