Давайте определим непустую, несортированную и конечную матрицу с уникальными числами следующим образом:
Давайте определим 4 перемещения матрицы как:
- ↑ * (вверх): перемещает столбец вверх
- ↓ * (вниз): перемещает столбец вниз
- → * (вправо): перемещение строки вправо
- ← * (влево): перемещение строки влево
Звездочка (*) обозначает столбец / строку, на которую влияет перемещение (может быть 0 или 1. На ваше усмотрение. Укажите, какой из них в вашем ответе).
Задача состоит в том, чтобы, используя вышеприведенные ходы, отсортировать матрицу в порядке возрастания (верхний левый угол - самый нижний, а нижний правый угол - самый высокий).
пример
Ввод:
Возможный вывод: или . (Обратите внимание, что любой из этих шагов может отсортировать матрицу, чтобы оба ответа были правильными)↑0
↓0
Ввод:
→0
Вход (пример теста):
↑0↑1←1↑2
Ввод:
↑0↑2→0→2↑0→2↑1↑2←1
Входные данные:
Возможные результаты:
↑2↑1←3→0←3↓0←0←2→3↑3↑4
Вход:
Выход:
или любой ход
Входные данные:
Выходные данные:
Примечания
- Могут быть разные правильные выходные данные (они не обязательно должны совпадать с тестовыми примерами или самыми короткими)
- Вы можете предположить, что это всегда будет способ заказать матрицу
- Соединяет края (как pacman: v)
- Не будет матрицы с более чем 9 столбцами и / или строками
- Предположим, матрица содержит только положительные ненулевые уникальные целые числа
- Вы можете использовать любые 4 различных значения, кроме чисел, для представления ходов (в этом случае, пожалуйста, укажите это в своем ответе)
- Столбец / строка могут быть 0 или 1 проиндексированы
- Критерии победы код-гольф
Дополнительные тестовые случаи всегда приветствуются
←0←0
допустимым решением для второго примера, где вы дали решение как→0
. Если это так, я думаю, что половина вариантов перемещения, скорее всего, не будет использована.Ответы:
JavaScript (ES6),
226219 байтПоиск грубой силы, используя движения вправо (
"R"
) и вниз ("D"
).Возвращает либо строку, описывающую ходы, либо пустой массив, если входная матрица уже отсортирована. Столбцы и строки в выводе индексируются 0.
Попробуйте онлайн!
комментарии
источник
Python 2 , 296 277 245Python 3 ,200194 байтаПопробуйте онлайн!
-19: стрелки в юникоде не требовались ...
-32: немного переработан, но в среднем производительность намного ниже.
-45: черпал вдохновение из ответа @ Arnauld. Переключился на Python 3 для
f''
(-4 байта)-6:
range( )
→r_[: ]
,diff(ravel( ))
→ediff1d( )
Исчерпывающий поиск комбинаций всех возможных
↓
ходов и→0
. Тайм-аут на третий контрольный пример.Так
→n
как эквивалентногде
r
иc
являются номерами строк и столбцов, этих ходов достаточно, чтобы найти любое решение.>v
соответствуют соответственно→↓
. (другие не определены)источник
Желе , 35 байт
Попробуйте онлайн!
Полная программа. Выходы перемещаются в STDOUT, используя L для левого и R для правого. Продолжает пробовать случайные движения, пока матрица не отсортирована, поэтому не очень эффективна с точки зрения скорости или алгоритмической сложности.
источник