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
0
se o espaço em branco estiver em um canto ou em uma aresta.
Repita (3) r
vezes.
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
n
será escolhido para dividir os comprimentos dos lados da imagem.
Um último ponto:
Uma animação .gif
mostrando todo o processo é muito bem-vinda.
Proponho usar a figura a seguir (que é 1024x768
), com n=16
e r=100
como 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=4
er=1
Passos 1 e 2
Etapa 3 : em linha, 2 retângulos à esquerda
move a random number of contiguous rectangles
pode 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)