В игре судоку многим игрокам нравится «набирать» возможные числа, которые можно ввести в каждом квадрате:
Вышеуказанная строка может быть представлена в виде массива:
[[1,2,9], [6], [5], [7], [1,2,9], [1,2,9], [3], [1,2,4], [8]]
Теперь обратите внимание, что есть только 1 место, куда 4
можно пойти. Это позволяет нам упростить приведенный выше список до:
[[1,2,9], [6], [5], [7], [1,2,9], [1,2,9], [3], [4], [8]]
Цель этой задачи состоит в том, чтобы взять список возможных чисел в перестановке и определить, какие возможности могут быть исключены .
В качестве другого примера, допустим, у вас есть следующий массив возможностей:
[[0,1,3], [0,2,3], [1,2], [1,2]]
Последние два места должны быть заполнены 1 и 2. Следовательно, мы можем удалить эти возможности из первых двух элементов в массиве:
[[0,3], [0,3], [1,2], [1,2]]
В качестве другого примера:
[[0,1,2,3], [0,2], [0,2], [0,2]]
Его невозможно построить перестановку из вышеперечисленных возможностей, поскольку есть только 1 место для обоих 1
и 3
, и вы хотите вернуть пустой массив.
Вам необходимо ввести список возможностей и вывести оставшиеся возможности после того, как максимальное количество возможностей будет исключено.
- Если конкретный массив невозможен, вам нужно либо вернуть пустой массив, либо массив, в котором один из подмассивов пуст.
- Можно предположить, что массив будет правильно сформирован и будет содержать как минимум 1 элемент.
- Учитывая массив размера
N
, вы можете предположить, что числа в подмассиве всегда будут в диапазоне[0:N)
, и чтоN <= 10
- Вы не можете предполагать, что будет присутствовать каждый номер от
0
доN-1
- Вы можете предположить, что числа в пределах одного подмассива являются уникальными.
- Если подмассив содержит только одну возможность, вы можете представить эту возможность в массиве или отдельно.
[[1],[2],[0]]
,[1,2,0]
,[[1,2],0,[1,2]]
Все в силе. - Вы можете принять массив либо в приемлемом строковом формате, либо в формате списка / массива.
- Подмассивы могут быть в любом порядке.
- Вместо того, чтобы иметь дело с рваными массивами, вы можете заполнить пустые места
-1
.
Контрольные примеры
[[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]] -> []
Это код-гольф, поэтому делайте ваши ответы как можно короче!
источник
Ответы:
Брахилог , 21 байт
Попробуйте онлайн!
Попробуйте онлайн!
Предикат 0 (основной предикат)
Предикат 1 (вспомогательный предикат 1)
Предикат 2 (вспомогательный предикат 2)
источник
Желе , 10 байт
Попробуйте онлайн!
источник
Pyth , 11 байт
Попробуйте онлайн!
источник
Haskell, 100 байт
источник
and.flip(zipWith elem)z
корочеНа самом деле , 27 байтов
Попробуйте онлайн!
источник
Python 3,
10199 байтСпасибо @TLW за -2 байта
Анонимная функция, которая принимает входные данные через аргумент списка списков и возвращает список множеств.
Как это работает
Попробуйте это на Ideone
источник
list(map(set,
короче, я думаюMathematica, 46 байтов
источник
PHP,
245231 байт131117 для функции декартового произведения, 114 для другого материалаЯ столкнулся с проблемами с памятью в некоторых тестовых случаях с рекурсивной функцией для декартового произведения. Работал лучше с этим классом генератора и
function c($a){$b=[];foreach($a as$i)$b[]=new \ArrayIterator($i);return new CartesianProductIterator($b);}
.Но мой генератор короче и выполняет ту же работу.
Однако более крупные примеры приводят к внутренней ошибке сервера (как с итератором, так и с генератором) через некоторое время на моей машине. На данный момент нет времени проверять логи сервера, к сожалению.
источник