Допустим, у меня есть следующая (2D) матрица:
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Поверните матрицу против часовой стрелки R
(не с шагом 90 градусов, просто на 1 число каждый раз),
1 2 3 4 2 3 4 8 3 4 8 12
5 6 7 8 --> 1 7 11 12 --> 2 11 10 16
9 10 11 12 5 6 10 16 1 7 6 15
13 14 15 16 9 13 14 15 5 9 13 14
Завершенный пример:
Входные данные:
2
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Выход:
[[3, 4, 8, 12],
[2, 11, 10, 16],
[1, 7, 6, 15],
[5, 9, 13, 14]]
(странные пробелы для выравнивания чисел в хороших столбцах)
Внешнее «кольцо» матрицы вращается на 2 против часовой стрелки, а внутреннее правое вращается также на 2. В этой матрице есть только два кольца.
Пример с 1 «кольцом»:
2
[[1, 2],
[3, 4],
[5, 6]]
Должен вывести:
[[4, 6],
[2, 5],
[1, 3]]
Ваша задача - взять матрицу и целое число R
и вывести переведенную версию после R
поворотов.
Вращение матрицы 4x5 представлено на следующем рисунке:
Ограничения:
2 ≤ M, N ≤ 100
где М и N - размеры матрицы. Гарантируется, что минимум M и N будет четным.1 ≤ R ≤ 80
где r - число оборотов.- Матрица будет содержать только положительные целые числа.
- Ценности не всегда различны.
- Входные данные всегда должны быть в виде двумерного массива (если вы не можете использовать входные данные во время выполнения в качестве двумерного массива, вам просто нужно найти другой способ получения ввода).
Еще один тестовый пример с нечеткими значениями:
1
[[1, 1],
[2, 2],
[3, 3]]
Выходы:
[[1, 2],
[1, 3],
[2, 3]]
Это код-гольф , поэтому выигрывает самый короткий ответ!
code-golf
array-manipulation
matrix
стартап
источник
источник
[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 16], [5, 9, 13, 14]]
16 внезапно дублируется я предполагаю , что это должно быть:[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 15], [5, 9, 13, 14]]
?Ответы:
Желе ,
39383635 байтПопробуйте онлайн!
источник
Октава, 210 байт
Попробуйте это на Octave Online!
Безголовая версия:
Объяснение:
Функция, которая получает число и генерирует диапазон, который упорядочен и центрирован для ввода 4 (четный), генерирует
-2 -1 1 2
для ввода 5 (нечетный) генерирует
-2.5 -1.5 0 1 2
только его следует упорядочить и центрировать
сложная матрица, сгенерированная из диапазонов
Преобразование прямоугольных координат в полярные и обратные углы, чтобы для каждого кольца углы сортировались против часовой стрелки
Следующая матрица сгенерирована
Вычисляет преобразование расстояния B с использованием расстояния шахматной доски для генерации индексов кольца
для матрицы 6 * 7 мы будем иметь следующую матрицу
лексикографическая сортировка сначала по индексу кольца, а затем по порядку угла (возвращаются индексы отсортированных элементов)
и, наконец, круговое смещение каждого кольца.
источник
Python 3,
292288 байтПринимает ввод с удаленными символами новой строки, но оставляя пробел после числа приращений, чтобы повернуть его.
Объяснение:
Вместо того, чтобы моделировать матрицу как серию концентрических колец в соответствии с предложением ОП, можно вместо этого разделить ее на четыре области, где элементы перемещаются вверх, вниз, вправо или влево за один оборот. Это цель длинной строки с eval-ed
f
: определить, в какую областьi,j
попадает каждая комбинация. Затем результат этого ищется дваждыl
, давая элемент, который должен повернуться в позициюi,j
на следующем шаге. Функция,g
которая делает все это и формирует новую матрицу после одного шага, затем вызывается повторно путем оценки сгенерированной строки, содержащей представление вызова вложенной функции.Когда я сделал это изначально, я случайно заставил матрицу вращаться по часовой стрелке, а не против часовой стрелки. Вместо того, чтобы делать правильное исправление, я добавил две стратегически размещенные копии,
[::-1]
чтобы повернуть матрицу до и после поворота. Вероятно, они могут быть заполнены до ~280276 байт, но мне лень это делать.Кроме того, это быстрый непроверенный порт из немного более длинной программы на Python 2, так что простите, если он работает не совсем правильно. Вот код Python 2, в любом случае:
EDIT: Golfed от 4 байта, заменив
or
в|
два раза.and
К сожалению, ничего не поделаешь.источник
Perl
330328 байтПопробуйте это на Ideone .
Ungolfed:
источник