Для этой задачи вы должны написать программу или функцию, которая выводит диагонали заданной квадратной матрицы. Однако если вы транспонируете строки и столбцы исходного кода вашего решения, вместо этого оно должно стать программой или функцией, которая возвращает антидиагонали матрицы. Читайте дальше для уточнения ...
правила
- Исходный код вашего решения рассматривается как двумерная сетка символов, разделенных стандартной новой строкой по вашему выбору (перевод строки, возврат каретки или их комбинация).
Никакая строка в вашем исходном коде не может быть длиннее предыдущей. Вот несколько примеров допустимых макетов:
### ### ###
######## ####### ### ### #
А вот пример неверного макета (третья строка длиннее второй):
###### #### ##### ###
Ваши два решения должны быть транспонируемыми друг для друга, то есть вы должны получать одно от другого, меняя строки и столбцы. Вот две допустимые пары:
abc def ghi
adg beh cfi
А также
print 10 (~^_^)~ foo bar !
p(fb! r~oa i^or n_ t^ ) 1~ 0
Обратите внимание, что пробелы обрабатываются как любые другие символы. В частности, конечные пробелы важны, так как они могут не быть конечными пробелами в транспонировании.
Каждое решение должно быть программой или функцией, которая принимает в качестве входных данных непустую квадратную матрицу из однозначных целых чисел. Одно решение должно выводить список всех диагоналей матрицы, а другое должно выводить список всех антидиагоналей. Вы можете использовать любые разумные, однозначные форматы ввода и вывода, но они должны быть идентичными в обоих решениях (это также означает, что они должны быть либо функциями, либо обеими программами).
- Каждая диагональ проходит сверху вниз слева направо, и они должны быть расположены сверху вниз.
- Каждая антидиагональ проходит снизу слева и сверху справа, и их следует упорядочивать сверху вниз.
счет
Чтобы поощрить решения, которые являются настолько «квадратными», насколько это возможно, основной показатель - это количество строк или количество столбцов вашего решения, в зависимости от того, что больше . Чем меньше тем лучше. Связи разбиваются по количеству символов в решении, не считая перевода строки. Опять же, чем меньше, тем лучше. Пример:
abcd
efg
h
Это и его транспонирование будут иметь начальный балл 4 (так как есть 4 столбца) и 8 баллов (так как есть 8 не-новых символов). Пожалуйста, укажите оба значения в заголовке вашего ответа.
Тестовые случаи
Реальная задача, выполняемая этими двумя решениями, не должна быть главной задачей здесь, но вот два примера, которые помогут вам протестировать ваши решения:
Input:
1 2 3
4 5 6
7 8 9
Diagonals:
3
2 6
1 5 9
4 8
7
Antidiagonals:
1
4 2
7 5 3
8 6
9
Input:
1 0 1 0
0 1 0 1
1 0 1 0
0 1 0 1
Diagonals:
0
1 1
0 0 0
1 1 1 1
0 0 0
1 1
0
Antidiagonals:
1
0 0
1 1 1
0 0 0 0
1 1 1
0 0
1
источник
Ответы:
Javascript, оценка
2014, (258176 не-новых символов)а также
Пример кода:
а также
источник
<!-- language-all: lang-javascript -->
перед первым блоком кода.MATL , оценка 10 (100 не-новых символов)
Есть 10 строк по 10 символов (обратите внимание на завершающие пробелы).
Приведенный выше код производит диагонали. Попробуйте онлайн!
Транспонированная версия производит анти-диагонали. Попробуйте онлайн!
объяснение
Обратите внимание, что
%
является символом комментария, который приводит к игнорированию остальной части строки.Функции с двумя символами, например,
Xd
не могут быть разбиты на aX
и ad
в последовательных строках.Оригинальный код
Исходный код, линеаризованный и без закомментированной части,
который работает следующим образом:
Транспонированный код
Транспонированный код, линеаризованный
который имеет следующие два различия по сравнению с исходным кодом:
T
и&
поменялись местами. Это не имеет никакого эффекта, потому чтоT
это литерал, а не функция, поэтому он не перехватывает&
спецификацию.P!
добавляется в начале.Добавленный код изменяет матрицу ввода так, что диагонали модифицированной матрицы являются антидиагоналями ввода:
источник
Желе , счет 7, 49 байтов без перевода строки
Программа диагональной печати
Попробуйте онлайн!
Программа антидиагональной печати
Попробуйте онлайн!
Старый ответ (неупорядоченный вывод), оценка 3, 6 байтов без перевода строки
Программа для диагональной печати
Попробуйте онлайн!
Анти-диагональная программа печати
Попробуйте онлайн!
источник
Желе , оценка 4 (12 символов)
предыдущие оценки: 5 (16 символов), 4 (16 символов)
оригинал
Попробуйте онлайн!
Транспонирование
Попробуйте онлайн!
Задний план
Диагонали
Простой способ получения диагоналей (сверху донизу) квадратной матрицы заключается в следующем.
Для ввода матрицы М ,
ŒD
списков M диагоналей «с, начиная с главной диагонали и перемещение вверх.Для ввода
это дает
ṙL
затем вычисляет длину M сL
и поворачивает полученную длину (M) на единицы влево.Для нашего примера длина равна 3, и мы получаем
Наконец,
Ṛ
меняет порядок диагоналей, возвращаядля нашего примера ввода.
Анти-диагональные
Те же самые строительные блоки можно использовать для получения антидиагоналей (опять же, сверху донизу) квадратной матрицы.
Для ввода матрицы М ,
Ṛ
первый изменяет порядок строк.Для ввода
это дает
Как и прежде,
ŒDṙL
генерирует диагонали (от самого нижнего к верхнему) результата.Для нашего примера это возвращает
по желанию.
Как это устроено
В Jelly каждая строка определяет ссылку (функцию). В частности, последняя строка определяет основную ссылку , которая выполняется при запуске программы.
Другие ссылки должны быть названы. Этот ответ использует
ñ
, который выполняет ссылку ниже диадически.ñ
оборачивается, поэтому, когда он вызывается из главной ссылки, он выполняет ссылку в первой строке.оригинал
Основная ссылка
принимает матрицу ввода M , вычисляет ее длину с
L
, затем поворачивает единицы длины ввода (M) влевоṙ
(обратите внимание, что это не меняет M ) и, наконец, вызывает первую ссылку с результатом ( M ) и длиной ( М) в качестве аргументов.Первая ссылка
вычисляет диагонали M с помощью
ŒD
(как показано в предыдущем разделе), поворачивает длину результата (M) на единицы влевоṙ
, а затем меняет порядок результата наṚ
.Вторая ссылка никогда не называется.
Транспонирование
Основная ссылка
принимает входную матрицу M и вычисляет ее обратное с
Ṛ
. Затем он вычисляет длину M с помощьюL
и вызывает первую ссылку с аргументами reverse (M) и length (M) .Первая ссылка
затем вычисляет диагонали реверса (M) с помощью
ŒD
(как видно из предыдущего раздела) и, наконец, поворачивает полученную длину (M) на единицы влево наṙ
.Остальные ссылки никогда не называются.
источник
R, оценка
14 1311 (9995 не-новых символов)Спасибо @Giuseppe за улучшение оценки на 1. Сократили несколько символов, используя избыточность в транспозициях. На данный момент лучший результат для не-гольф языка!
И транспонировал:
Попробуйте онлайн!
источник
row(m)+col(m)
короче для антидиагоналей.Шелуха ,
794 персонажа, оценка43Попробуйте онлайн!
-4 персонажа благодаря BMO .
источник