Задача
При наличии двумерного массива любого размера напишите программу или функцию для альтернативного смещения столбцов и строк.
пример
a b c d e
f g h i j
k l m n o
Все элементы в первом сдвиге столбца вниз одной строки, то второй сдвиг столбца до одной строки, то третий сдвиг вниз один ряд и так далее, упаковка , когда они достигают края.
k g m i o
a l c n e
f b h d j
Все элементы в первом сдвиге строки к правому , то второй , чтобы к левому , тем третьему к правым и т.д., упаковкам , когда они достигают края.
o k g m i
l c n e a
j f b h d
Я буду следовать традиции выбора кратчайшего рабочего кода в качестве лучшего ответа
code-golf
array-manipulation
Каран Шишу
источник
источник
Ответы:
Шелуха , 7 байт
Попробуйте онлайн!
объяснение
источник
MATL , 13 байт
Попробуйте онлайн!
объяснение
источник
J ,
26, 2119 байт-5 байт благодаря милям
Объяснение:
^:2
- повторить дважды следующее:@|:
- транспонировать и#\
- найти длину префиксов (1, 2, 3 ... строки)_1^
- повысить -1 до указанных выше сил, создав список чередующихся -1 1 -1 1 ...|."_1~
- вращать каждую строку входного массива со смещением из приведенного выше спискаПопробуйте онлайн!
Оригинальная версия:
Как это устроено
^:2
- повторить дважды следующее:|:
- транспонировать и|."0 1]
- вращать каждую строку входного массива, смещения в списке:@#
- количество строк в массиве($_1 1"0)
- альтернативный _1 1 (3 -> _1 1 _1)Попробуйте онлайн!
источник
_1 1..
используя(|."_1~_1^2|#\)@|:^:2
также2|
рольWolfram Language (Mathematica) , 55 байтов
Попробуйте онлайн!
источник
Python 2 , 83 байта
Попробуйте онлайн!
источник
APL + WIN, 30 байт
Запрашивает ввод на экран 2d массива
источник
APL (Dyalog Unicode) , 26 байтов
Попробуйте онлайн!
Префикс Dfn.
Как?
источник
APL (Dyalog Unicode) , 15 байт (SBCS)
Попробуйте онлайн!
источник
JavaScript (ES6),
9491 байтВероятно, есть лучший способ сделать вращение ...
источник
Pyth, 15 байт
Попробуйте онлайн
объяснение
источник
q / kdb + , 32 байта
Решение:
Пример:
Объяснение:
Переверните сетку, чтобы применить вращение к столбцам , вторая итерация переворачивается еще раз, поэтому вращение применяется к строкам на втором проходе.
Вращение основывается на списке
-1 1 -1 1..
длины поворачиваемой строки / столбца.Здоровые 9 байт были golfed от от этого легче для чтения версии
источник
JavaScript (ES6),
11676 байтПопробуйте онлайн!
комментарии
источник
Желе , 10 байт
Попробуйте онлайн!
источник
Чисто , 93 байта
В качестве литерала частичной функции это выглядит как лицо.
Попробуйте онлайн!
источник
05AB1E , 14 байтов
Попробуйте онлайн!
объяснение
источник
APL NARS, 36 байтов, 18 символов
Этот {⍵⌽⍨- × - \ ⍳≢⍵} будет вращать каждую строку аргумента матрицы, следуя за вектором -1 1 -1 1 и т. Д. (Длина его вектора равна длине строк матрицы аргумента). Тестовое задание:
источник
Баш и др., 84
Неконкурентное решение для оболочки.
Это основано на функции, которая чередует направление вращения строк. Та же процедура, что и для транспонированного массива, будет вращать столбцы. Например
transpose | rotate | transpose | rotate
.Поочередное вращение может быть выполнено для односимвольных массивов
sed
следующим образом:Транспонирование может быть сделано с помощью
rs
илиdatamash
:Взяты вместе:
Выход:
источник