Соревнование
Дана n x n
матрица целых чисел сn >= 2
1 2 3 4
и список целых чисел с точно 2n
элементами
[1,2, -3, -1]
вывести повернутую матрицу. Эта матрица строится следующим образом:
- Возьмите первое целое число в списке и поверните первую строку вправо на это значение.
- Возьмите следующее целое число и поверните первый столбец вниз на это значение.
- Возьмите следующее целое число и поверните вторую строку вправо на это значение и т. Д., Пока не повернете каждую строку и столбец матрицы один раз.
Список может содержать отрицательные целые числа, что означает, что вы перемещаете строку / столбец влево / вверх вместо вправо / вниз. Если целое число равно нулю, не вращайте строку / столбец.
Пример использования ввода выше
Элемент списка Матрица Объяснение -------------------------------------------------- ---------- 1 2 1 Поверните 1-й ряд вправо на 1 3 4 2 2 1 Поверните 1-ую колонку вниз на 2 3 4 -3 2 1 Повернуть 2-й ряд влево на 3 4 3 -1 2 3 Повернуть 2-ую колонку вверх на 1 4 1
правила
- Вы можете выбрать наиболее удобный формат ввода. Просто дайте понять, какой вы используете.
- Функция или полная программа разрешены.
- Правила по умолчанию для ввода / вывода.
- Применяются стандартные лазейки .
- Это код-гольф , поэтому выигрывает меньшее количество байт. Tiebreaker является более ранним представлением.
Контрольные примеры
Формат ввода здесь представляет собой список списков для матрицы и обычный список для целых чисел.
[[1,2], [3,4]], [1,2, -3, -1] -> [[2,3], [4,1]] [[1,2], [3,4]], [1,1,1,1] -> [[3,2], [4,1]] [[1,2], [3,4]], [0,0,0,0] -> [[1,2], [3,4]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [1, -2,0, -1,3,4] -> [[7, 5,0], [- 3, -8,2], [- 4,1,6]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [3,12, -3,0, -6, -3] -> [[1 , 2, -3], [- 4,5,6], [7, -8,0]]
Удачного кодирования!
Ответы:
CJam, 13 байтов
Безымянный блок (функция), который берет матрицу и список сверху стека (в этом порядке) и оставляет новую матрицу на своем месте.
Запустите все тестовые случаи.
Та же идея, то же количество байтов, разные реализации:
объяснение
В идеале мы хотим обрабатывать каждую инструкцию в списке одинаково и просто использовать ее для поворота первой строки матрицы. Это можно сделать довольно легко, преобразовав матрицу после каждой инструкции и убедившись, что все эти дополнительные преобразования отменяются в конце. Поэтому после обработки каждой инструкции мы поворачиваем все строки на одну строку вверх (так, чтобы следующая инструкция вдоль того же измерения обрабатывала следующую строку), а затем транспонируем матрицу, так что мы фактически обрабатываем столбцы в следующем. Эти дополнительные преобразования ортогональны инструкциям в списке и имеют период точно
2n
, то, что нам нужно.Что касается кода:
источник
APL (Dyalog Extended) ,
17151413 байт-3 байта от Адама
Попробуйте онлайн!
Принимает входные данные в виде списка, где первый элемент является матрицей, а остальные элементы являются величинами поворота. Если ⌽ повернуть вправо, а не влево, это побьет CJam.
источник
{⍉1⊖⌽⍺⌽@(⍳1)⌽⍵}
→(⍉1⊖⌽@(⍳1)⍢⌽)
но можете ли вы объяснить мне, почему@1
не будет работать вместо@(⍳1)
или@(,1)
? Кроме того, OP может позволить вам принять ввод в обратном порядке.at
стоящий за расширением@
, не является совместимым расширением. Тем не менее, вы можете использовать ту,@
с`@1
которой сохраняется байт@1 1
.Python 2, 96 байт
тесты
f
возвращает список кортежей. Каждая строка в теле функции имеет отступ от 1 символа табуляции.источник
return zip(*m)
спасет вас 5 байтов?m=zip(*m);return m
простоreturn zip(*m)
? Я не могу этого сделать, потому чтоm=zip(*m)
это частьfor
циклаStax , 12 байт
Запустите и отладьте его
источник