Из этого вопроса stackoverflow
Для двумерного массива размером выведите значения против часовой стрелки. Выход должен начинаться снаружи внутрь, а начальная точка всегда будет .
Пример дан
Значения ребер в направлении против часовой стрелки составляют .
Теперь мы повторяем процесс для внутренних ценностей. В итоге получится матрица, подобная следующей
И внутренние значения тогда
Окончательный результат будет
правила
- Предположим, не пустой ввод
- Примите значения матрицы как положительные целые
- Применяются стандартные методы ввода / вывода
- Применяются стандартные правила игры в гольф и критерии выигрыша
Некоторые тестовые случаи
Input
[
[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10,11,12,13,14],
[15,16,17,18,19,20,21]
]
Output
1,8,15,16,17,18,19,20,21,14,7,6,5,4,3,2,9,10,11,12,13
--------------------------------------------------------
Input
[
[1,2,3],
[3,2,1],
[4,5,6],
[6,5,4],
[7,8,9],
[9,8,7]
]
Output
1,3,4,6,7,9,8,7,9,4,6,1,3,2,2,5,5,8
-----------------------------------------------------
Input
[
[1]
]
Output
1
-----------------------------------
Input
[
[1, 2],
[2, 1]
]
Output
1,2,1,2
-----------------------------------------------------
Input
[
[1,2,3,6,7],
[2,4,3,2,1],
[3,2,4,5,6],
[6,5,6,5,4],
[10,4,7,8,9],
[12,4,9,8,7]
]
Output
1,2,3,6,10,12,4,9,8,7,9,4,6,1,7,6,3,2,4,2,5,4,7,8,5,5,2,3,4,6
Ответы:
R , 54 байта
Несколько байтов сохранены @Giuseppe и @ J.Doe.
Попробуйте онлайн!
Рекурсивно уберите первый столбец и переверните строку / транспонируйте (сделав нижний ряд новым первым столбцом) остальную часть матрицы, пока не получите только один столбец. Безголовая «традиционная» версия:
Было отмечено, что это
ncol(m)
может быть использовано дляsum(m)
сохранения еще одного байта, поскольку нам разрешено принимать положительные значения целочисленной матрицы. Но я оставлю это так, поскольку это работает для всех матриц (даже матриц строк!)источник
t()
предотвращает поdrop=TRUE
умолчанию для`[`
облажатьсяif
условие!t()
не пришлось использоватьis.null
тест, который был в моих первоначальных попытках.m
итоге не будет нулевым, так что вы можете изменить оператор if для 54 байтов . Кажется, работает для тестовых случаев.Python 2 , 52 байта
Попробуйте онлайн!
источник
Pyth , 9 байт
Попробуй это здесь!
Как?
источник
Stax , 7 байт
Запустите и отладьте его
Он принимает массив строк в одну строку и производит вывод, разделенный символом новой строки.
Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
источник
Pyth, 20 байтов
Попробуй здесь
объяснение
источник
ОК , 12 байт
Попробуйте онлайн!
Это злоупотребляет тем фактом, что ОК не слишком заботится о форме для транспонирования. В к это будет 13 байт :
*:',/(1_+|:)\
.источник
Чисто , 69 байт
Попробуйте онлайн!
Перемещает следующую строку / столбец в начало списка, чтобы он мог соответствовать шаблону в аргументе.
Для первого примера в задаче это выглядит так:
источник
Юлия 0,7 , 47 байт
Попробуйте онлайн!
У Джулии есть удобная встроенная функция поворота матрицы на 90 градусов, что устраняет необходимость в операциях транспонирования и реверса.
Как вы можете видеть из предупреждений компилятора, он настаивает на том, что все компоненты троичного условия должны быть разделены пробелами, а в версии 1.0 это было фактически применено.
Как ни странно, в этой ситуации я нашел самый короткий путь выхода из рекурсии - использовать блок try-catch:
Юлия 1,0 , 50 байтов
Попробуйте онлайн!
источник
JavaScript (Node.js) , 89 байт
Попробуйте онлайн!
Берет первый столбец, транспонирует оставшийся, затем переворачивает каждую строку (= поворачивает матрицу на 90 градусов по часовой стрелке), а затем повторяет до тех пор, пока в массиве не останется больше записей.
источник
APL (Dyalog) ,
2422 байтаПопробуйте онлайн!
Как?
источник
05AB1E ,
131110 байт-2 байта благодаря @Emigna .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Желе , 9 байт
Попробуйте онлайн!
источник
Древесный уголь , 25 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Поверните вход на 180 °. Это происходит по двум причинам: а) последнюю строку легче всего удалить, и б) ее легче зациклить, если строку удалить в конце цикла. (Я попытался отразить и вывести по часовой стрелке, но это заняло дополнительный байт.)
Повторяйте, пока массив не станет пустым.
Поверните массив на 90 °.
Удалите последнюю строку массива и напечатайте элемент в виде строк в отдельных строках.
источник
Рубин , 65 байт
Попробуйте онлайн!
источник
PowerShell , 266 байт
Да ... PowerShell не лучший для работы с матрицами. Но алгоритм в основном такой же, как и выше. Каждая строка представлена в виде строки, разделенной запятыми, и мы в основном делаем вращение и перемещение для каждого слоя. Я , вероятно , может бриться более прочь, но ... Я нахожусь уже в пижаме ...
Попробуйте онлайн!
источник