Задний план
В большинстве разумных языков программирования очень легко вращать строки или столбцы двумерного массива. В этом задании ваша задача - вместо этого вращать антидиагоналы . Напомним, что антидиагоналами двумерного массива являются его одномерные срезы, взятые в северо-восточном направлении ↗.
вход
Непустой прямоугольный двумерный массив однозначных чисел в любом приемлемом формате. Обратите внимание, что массив не может быть квадратным.
Выход
Тот же массив, но с каждой анти-диагональю повернутой на один шаг вправо.
пример
Рассмотрим 3x4
входной массив
0 1 2 3
4 5 6 7
8 9 0 1
Анти-диагонали этого массива
0
4 1
8 5 2
9 6 3
0 7
1
Их повернутые версии
0
1 4
2 8 5
3 9 6
7 0
1
Таким образом, правильный вывод
0 4 5 6
1 8 9 0
2 3 7 1
Правила и оценки
Вы можете написать полную программу или функцию. Также допустимо написать функцию, которая модифицирует входной массив на месте, если ваш язык позволяет это. Побеждает меньшее количество байтов, и стандартные лазейки запрещены.
Leaderboard
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы хотите включить в свой заголовок несколько чисел (например, потому что ваш счет - это сумма двух файлов, или вы хотите перечислить штрафы флага переводчика отдельно, или вы хотите показать старые улучшенные результаты), убедитесь, что фактический счет это последний номер в заголовке.
Дополнительные тестовые случаи
Input:
4
Output:
4
Input:
5 6 1
Output:
5 6 1
Input:
0 1
6 2
Output:
0 6
1 2
Input:
6 3 0 8
4 6 1 4
6 2 3 3
9 3 0 3
Output:
6 4 6 1
3 6 2 3
0 9 3 0
8 4 3 3
Input:
5 8 2
6 7 3
2 6 1
6 0 6
6 4 1
Output:
5 6 7
8 2 6
2 6 0
3 6 4
1 6 1
Input:
9 9 4 0 6 2
2 3 2 6 4 7
1 5 9 3 1 5
0 2 6 0 4 7
Output:
9 2 3 2 6 4
9 1 5 9 3 1
4 0 2 6 0 4
0 6 2 7 5 7
CJam,
44434240 байтПроверьте это здесь.
Хм, намного лучше, чем моя первая попытка, но я чувствую, что Денис все равно решит это гораздо меньше ...
Вход и выход в виде сетки ASCII:
дает
источник
J, 24 символа
Функция принимает один аргумент.
У J есть оператор с
/.
именем Oblique . Он не может инвертировать его, поэтому реконструкция не тривиальна, но вы можете рассматривать «перечисление наклонов» как перестановку элементов массива. Таким образом, мы инвертируем эту перестановку с помощью/:
(двоичной сортировки ), помещая перестановку «list obliques» для этого размера (</.@i.@$
) справа, а наши новые наклонные значения, правильно повернутые слева. Затем мы преобразуем этот список в старый прямоугольный массив, используя старый добрый$$
.Попробуйте онлайн.
источник
J,
3830 байт8 байтов сохранено благодаря @algorithmshark.
Функция собирает верхний и левый края в список, разрезает список на две части достаточного размера и сшивает их справа и снизу от основной части.
Использование:
Попробуйте это онлайн здесь.
источник
{./.
Заменяет}:@{.,{:"1
, и вы можете сохранить две тильды, щелкая на поезд вокруг:{./.((}.~#),~({.~#),.])}:"1@}.
.Юлия,
153149139 байтЭто создает безымянную функцию, которая принимает массив и возвращает модифицированный входной массив на месте.
Ungolfed:
Спасибо Мартину Бюттнеру за алгоритмический совет и за сохранение 4 байта!
источник
ES6, 75 байт
Это принимает массив массивов в качестве параметра и изменяет его на месте.
Ungolfed:
Смотрите диаграмму @ aditsu для дальнейшего разъяснения.
источник
{t.push(r.pop());r.unshift(t.shift())}
наt.push(r.pop())+r.unshift(t.shift())
Pyth, 20 байтов
Использует подход Adistu, заключающийся в удалении верхнего ряда и правого столбца, а затем прикреплении их слева и снизу. Но с изменяемыми структурами данных, а не с транспозициями.
источник
Октава, 85 байт
Я надеюсь, что смогу избавиться от
end
с.источник
Python 2 ,
11310494 байтаПопробуйте онлайн!
Это довольно буквальная интерпретация метода @ aditsu. Синтаксис Python для обработки пустых списков как False помог сэкономить дополнительные 10 байтов.
источник
0
в[0:1]