Vamos definir uma matriz não-vazia, não classificada e finita, com números exclusivos, como segue:
Vamos definir 4 movimentos de matriz como:
- ↑ * (para cima): move uma coluna para cima
- ↓ * (para baixo): move uma coluna para baixo
- → * (direita): move uma linha para a direita
- ← * (esquerda): move uma linha para a esquerda
O asterisco (*) representa a coluna / linha afetada pela movimentação (pode ser indexada em 0 ou indexada em 1. Depende de você. Indique qual em sua resposta).
O desafio é, usando os movimentos acima, classificar a matriz em uma ordem ascendente (sendo o canto superior esquerdo o mais baixo e o canto inferior direito o mais alto).
Exemplo
Entrada:
Saída possível: ou . (Observe que qualquer um desses movimentos pode classificar a matriz para que ambas as respostas estejam corretas)↑0
↓0
Entrada:
Saída possível:→0
Entrada (exemplo de caso de teste):
Saída possível:↑0↑1←1↑2
Entrada:
Saída possível:
↑0↑2→0→2↑0→2↑1↑2←1
Entrada:
Saída possível:
↑2↑1←3→0←3↓0←0←2→3↑3↑4
Entrada:
Saída:
ou qualquer movimento
Entrada:
Saída:
Notas
- Pode haver diferentes saídas corretas (não precisa ser necessariamente o mesmo que os casos de teste ou o mais curto)
- Você pode assumir que sempre será uma maneira de pedir a matriz
- As arestas se conectam (como pacman: v)
- Não haverá uma matriz com mais de 9 colunas ou / e linhas
- Suponha que a matriz contenha apenas números inteiros positivos diferentes de zero
- Você pode usar quaisquer quatro valores distintos, exceto números, para representar os movimentos (nesse caso, indique isso em sua resposta)
- A coluna / linha pode ser indexada 0 ou 1
- Critérios de vencimento code-golf
Casos de teste extras são sempre bem-vindos
←0←0
uma solução válida para o segundo exemplo em que você forneceu uma solução como→0
. Se for, acho que metade das opções de movimentação provavelmente não serão usadas.Respostas:
JavaScript (ES6),
226219 bytesPesquisa de força bruta, usando movimentos para a direita (
"R"
) e para baixo ("D"
).Retorna uma sequência que descreve as movimentações ou uma matriz vazia se a matriz de entrada já estiver classificada. As colunas e linhas na saída são indexadas em 0.
Experimente online!
Comentado
fonte
Python 2 , 296277245Python 3 ,200194 bytesExperimente online!
-19: flechas unicode não eram necessárias ...
-32: ligeiramente reformuladas, mas com desempenho muito mais lento em média.
-45: inspirou-se na resposta de @ Arnauld. Comutado para Python 3 para
f''
(-4 bytes)-6:
range( )
→r_[: ]
,diff(ravel( ))
→ediff1d( )
Procura exaustivamente combinações de todos os
↓
movimentos possíveis e→0
. Tempos limite no terceiro caso de teste.Uma vez que
→n
é equivalente aonde
r
ec
são os números de linhas e colunas, esses movimentos são suficientes para encontrar todas as soluções.>v
correspondem respectivamente a→↓
. (outros indefinidos)fonte
Geléia , 35 bytes
Experimente online!
Programa completo. As saídas se movem para STDOUT usando L para a esquerda e R para a direita. Continua tentando movimentos aleatórios até a matriz ser classificada, portanto, não é muito eficiente em termos de velocidade ou complexidade algorítmica.
fonte