Sumário
O objetivo desse desafio é criar uma versão desfeita da imagem de um quebra-cabeça de 15 quebra-cabeças / deslizante, também chamado de taquin em francês.
Detalhes:
Dada uma entrada composta de:
- uma imagem,
- um número inteiro
n, - um outro inteiro
r,
seu programa, função ou qualquer outra coisa que se ajuste, deve gerar a mesma imagem ( ou seja, o mesmo tamanho e formato) da entrada, mas que passou pelo seguinte processo:
- divida a imagem em
n²retângulos, - remova um desses retângulos aleatoriamente,
- mova um número aleatório de retângulos contíguos da linha / coluna afetada pelo ponto (2.) para que o buraco criado seja preenchido e outro seja gerado nessa linha / coluna. Esse número pode ser
0se o espaço em branco estiver em um canto ou em uma aresta.
Repita (3) rvezes.
Esclarecimentos:
- Se você moveu retângulos da linha na etapa (3.), você deve mover retângulos da coluna na próxima repetição,
- se você moveu retângulos da esquerda para a direita em uma etapa da linha, eles devem ser movidos da direita para a esquerda na próxima etapa da linha, o mesmo para as colunas de cima para baixo e de baixo para cima,
- você pode assumir que
nserá escolhido para dividir os comprimentos dos lados da imagem.
Um último ponto:
Uma animação .gifmostrando todo o processo é muito bem-vinda.
Proponho usar a figura a seguir (que é 1024x768), com n=16e r=100como modelo, você pode usar qualquer outra figura (desde que seja relevante e cumpra as regras da SE, é claro).
Observe que as políticas de lacunas nos padrões se aplicam.
Isso é código-golfe , então a submissão mais curta vence!
Como um exemplo foi solicitado, aqui está um, feito "à mão", com n=4er=1
Passos 1 e 2
Etapa 3 : em linha, 2 retângulos à esquerda
move a random number of contiguous rectanglespode ser 0 retângulos? (isto seria uma dor para fazer o comportamento de mudança de programa quando o branco aparece sobre uma borda / canto)



