Palavras-chave descritivas (para pesquisa): Tornar duas matrizes equivalentes, Sobrepor, Matriz, Localizar
Desafio
Papai Noel teve uma história de elfos roubando presentes de seu cofre no passado, então este ano ele projetou uma fechadura que é muito difícil de quebrar, e parece ter mantido os elfos afastados este ano. Infelizmente, ele perdeu a combinação e também não sabe como abri-la! Felizmente, ele contratou você para escrever um programa para encontrar a combinação. Não precisa ser o mais curto, mas ele precisa encontrá-lo o mais rápido possível!
Ele tem uma agenda muito rígida e não pode esperar muito tempo. Sua pontuação será o tempo total de execução do seu programa multiplicado pelo número de etapas que o seu programa produz para a entrada de pontuação. Menor pontuação ganha.
Especificações
O bloqueio é uma matriz quadrada de 1s e 0s. É definido como um arranjo aleatório de 1s e 0s e precisa ser definido como um código especificado. Felizmente, o Papai Noel lembra o código necessário.
Existem alguns passos que ele pode executar. Cada etapa pode ser executada em qualquer sub-matriz contígua (ou seja, você deve selecionar uma sub-matriz totalmente delimitada por um canto superior esquerdo e inferior direito) (pode ser uma sub-matriz não quadrada):
- Gire 90 graus para a direita *
- Gire para a esquerda 90 graus *
- Gire 180 graus
- Ciclo de cada
n
elemento da linha para a direita ou esquerda (quebra) - Ciclo de cada
m
elemento da coluna para cima ou para baixo (envolvimentos) - Virar horizontalmente
- Virar verticalmente
- Virar na diagonal principal *
- Virar no Main Anti-diagonal *
* somente se a sub-matriz for quadrada
Obviamente, ele também pode executar essas etapas em toda a matriz. Como 1s e 0s só podem ser trocados na matriz, mas o valor de um quadrado não pode ser alterado diretamente, o número de 1s e 0s é o mesmo para a configuração inicial e final.
Especificações de formatação + regras
Você receberá a entrada como duas matrizes quadradas (posição inicial e posição final) em qualquer formato razoável que desejar. A saída deve ser uma sequência dessas etapas em qualquer formato legível. Como esse não é um código de golfe, faça com que seja um formato facilmente verificável, mas esse não é um requisito estrito. Você pode escolher o comprimento lateral das matrizes na entrada, se desejar.
Seu programa será executado no meu computador (Linux Mint, detalhes exatos da versão disponíveis mediante solicitação, se alguém se importar: P) e cronometrarei com base na quantidade de tempo entre o momento em que pressiono "enter" na linha de comando e quando o comando sai.
Casos de teste
1 0 0 1 0 0 0 0
0 1 1 0 -> 0 0 0 0
0 1 1 0 -> 1 1 1 1
1 0 0 1 1 1 1 1
- Pegue a matriz inteira. Ciclo cada coluna acima 1.
- Pegue as duas colunas do meio como uma sub-matriz. Ciclo cada coluna para baixo 2.
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 -> 0 1 1 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
- Pegue a matriz inteira. Ciclo cada coluna para baixo 1.
- Pegue a coluna do meio. Faça um ciclo 2.
- Pegue as 2 primeiras linhas. Vire-o verticalmente.
- Pegue os 2 elementos mais à direita da linha superior. Troque-os (gire 1 para a direita / esquerda, gire na horizontal).
- Pegue os 2 elementos mais à esquerda da linha superior. Troque-os.
Pode haver métodos mais eficientes, mas isso não importa. Sinta-se livre para apontá-los nos comentários, se você encontrar um :)
Julgando Caso de Teste
Este caso de teste será usado para julgar seu envio. Se eu acredito que uma resposta é especializada demais para o caso de teste, tenho o direito de repetir uma entrada aleatória e rejeitar todas as respostas com o novo caso. O caso de teste pode ser encontrado aqui, onde a parte superior é o início e a parte inferior é a configuração desejada.
Se acredito que as respostas são especializadas demais, o MD5 do próximo caso de teste é 3c1007ebd4ea7f0a2a1f0254af204eed
. (Isso está escrito aqui agora, para me libertar das acusações de trapaça: P)
Aplicam-se brechas padrão. Nenhuma resposta será aceita. Feliz codificação!
Nota: Eu me inspirei para esta série de desafios da Advent Of Code . Não tenho afiliação com este site
Você pode ver uma lista de todos os desafios da série consultando a seção 'Vinculado' do primeiro desafio aqui .
0
e 641
, e há256 choose 64 ≈ 1.9 × 10⁶¹
matrizes alcançáveis totais . (o que é comparável a um Megaminx, e é maior do que Vingança de Rubik, ainda que muito menos do que um cubo do Professor)