No jogo do sudoku, muitos jogadores gostam de "escrever" os possíveis números que podem aparecer em cada quadrado:
A linha acima pode ser representada como uma matriz:
[[1,2,9], [6], [5], [7], [1,2,9], [1,2,9], [3], [1,2,4], [8]]
Agora, observe que há apenas 1 lugar para onde um 4
pode ir. Isso efetivamente permite simplificar a lista acima para:
[[1,2,9], [6], [5], [7], [1,2,9], [1,2,9], [3], [4], [8]]
O objetivo desse desafio é fazer uma lista de possíveis números em uma permutação e deduzir quais possibilidades podem ser eliminadas .
Como outro exemplo, digamos que você tenha o seguinte conjunto de possibilidades:
[[0,1,3], [0,2,3], [1,2], [1,2]]
Os dois últimos locais devem ser preenchidos com 1 e 2. Portanto, podemos remover essas possibilidades dos dois primeiros elementos da matriz:
[[0,3], [0,3], [1,2], [1,2]]
Como outro exemplo:
[[0,1,2,3], [0,2], [0,2], [0,2]]
É impossível construir uma permutação a partir das possibilidades acima, pois há apenas 1 local para ambos 1
e 3
, e você gostaria de retornar um array vazio.
Você precisa inserir uma lista de possibilidades e gerar as possibilidades restantes após a eliminação do número máximo de possibilidades.
- Se uma matriz específica for impossível, você precisará retornar uma matriz vazia ou uma matriz em que um dos sub-arranjos esteja vazio.
- Você pode supor que a matriz será bem formada e tenha pelo menos 1 elemento.
- Dada uma matriz de tamanho
N
, você pode assumir que os números na sub- matriz sempre estarão no intervalo[0:N)
e queN <= 10
- Você não pode assumir que todos os números de
0
atéN-1
estarão presentes - Você pode supor que os números em uma única sub-matriz sejam únicos.
- Se uma sub-matriz contiver apenas uma única possibilidade, você poderá representar a possibilidade em uma matriz ou por si só.
[[1],[2],[0]]
,[1,2,0]
,[[1,2],0,[1,2]]
São todos válidos. - Você pode aceitar a matriz em um formato de sequência razoável ou em formato de lista / matriz.
- Os subarrays podem estar em qualquer ordem.
- Em vez de lidar com matrizes irregulares, você pode preencher lugares vazios com
-1
.
Casos de teste
[[0]] -> [[0]]
[[1],[0]] -> [[1],[0]]
[[1],[1]] -> []
[[1],[0,1]] -> [[1],[0]]
[[0,1,2],[1,2],[1,2]] -> [[0],[1,2],[1,2]]
[[0,1],[1,2],[0,2]] -> [[0,1],[1,2],[0,2]]
[[2,1],[1,2],[1,2]] -> []
[[0,3],[2,1],[3,0],[3,2]] -> [[0,3],[1],[0,3],[2]]
[[0,1],[0,1],[2,3],[2,3,0]] -> [[0,1],[0,1],[2,3],[2,3]]
[[0,1],[0,3],[3,2],[0]] -> [[1],[3],[2],[0]]
[[3,5,2],[0,2,4],[4,0],[0,1,3,5],[2,1],[2,4]] -> [[3,5],[0,2,4],[4,0],[3,5],[1],[2,4]]
[[6,9,8,4],[4,5],[5,3,6],[3,8,6,1,4],[3,1,9,6],[3,7,0,2,4,5],[9,5,6,8],[6,5,8,1,3,7],[8],[8,0,6,2,5,6,3]] -> [[6,9,4],[4,5],[5,3,6],[3,6,1,4],[3,1,9,6],[0,2],[9,5,6],[7],[8],[0,2]]
[[3,5,0],[5,7],[5,1,2],[1,3,0],[5,3],[5,0],[5,3,7,8,0,6],[7,5,0,1,8],[1,0,8],[0,6]] -> []
[[9,0,2,3,7],[0,7,6,5],[6,9,4,7],[9,1,2,3,0,5],[2,8,5,7,4,6],[6,5,7,1],[5,9,4],[5,9,3,8,1],[5,0,6,4],[0,7,2,1,3,4,8]] -> [[9,0,2,3,7],[0,7,6,5],[6,9,4,7],[9,1,2,3,0,5],[2,8,5,7,4,6],[6,5,7,1],[5,9,4],[5,9,3,8,1],[5,0,6,4],[0,7,2,1,3,4,8]]
[[2,6,0],[0,4,3],[0,6,2],[0,7],[0,9,2,3,6,1,4],[1,7,2],[2,7,8],[8,6,7],[6,5,2,8,0],[5,8,1,4]] -> [[2,6,0],[3],[0,6,2],[0,7],[9],[1],[2,7,8],[8,6,7],[5],[4]]
[[8],[8,0,6,5,7,2,4,1],[8,6,9,3,5,0,7],[3,9,1,0],[9],[9,2,6],[2,8,3],[3,1,6,8,2],[6],[6,4,5,3,0,7]] -> [[8],[5,7,4],[5,7],[0],[9],[2],[3],[1],[6],[4,5,7]]
[[8,1,0],[5,8,7,6,2,0],[6,8,2],[2,4,0,9],[4,1,7,3,6,8],[8,1],[8,0,3],[0,8,2],[0,8,3],[1,8,0]] -> []
Este é um código de golfe, portanto, faça suas respostas o mais curtas possível!
fonte
Respostas:
Braquilog , 21 bytes
Experimente online!
Experimente online!
Predicado 0 (predicado principal)
Predicado 1 (predicado auxiliar 1)
Predicado 2 (predicado auxiliar 2)
fonte
Gelatina , 10 bytes
Experimente online!
fonte
Pitão , 11 bytes
Experimente online!
fonte
Haskell, 100 bytes
fonte
and.flip(zipWith elem)z
é mais curtoNa verdade , 27 bytes
Experimente online!
fonte
Python 3,
10199 bytesGraças a @TLW por -2 bytes
Uma função anônima que recebe entrada via argumento de uma lista de listas e retorna uma lista de conjuntos.
Como funciona
Experimente no Ideone
fonte
list(map(set,
é mais curto, eu achoMathematica, 46 bytes
fonte
PHP,
245231 bytes131117 para a função do produto cartesiano, 114 para o outro materialEncontrei problemas de memória em alguns casos de teste, com uma função recursiva para o produto cartesiano. Funcionou melhor com esta classe de gerador e
function c($a){$b=[];foreach($a as$i)$b[]=new \ArrayIterator($i);return new CartesianProductIterator($b);}
.Mas meu gerador é mais curto e faz o mesmo trabalho.
Os exemplos maiores, no entanto, resultam em um erro interno do servidor (tanto com o iterador quanto com o gerador) depois de um tempo na minha máquina. Atualmente, não há tempo para verificar os logs do servidor, infelizmente.
fonte