Defintion
Центросимметрична матрица представляет собой квадратную матрицу , которая симметрична относительно его центра. Точнее, матрица размером является центросимметричной, если для любого выполнено следующее соотношение:
Примеры таких матриц
Вот иллюстрация симметрии таких матриц (заимствовано из вышеупомянутой статьи в Википедии):
Центросимметричная матрица четной стороны ( ):
И нечетной длины ( ) один:
Задача и характеристики
Если задана квадратная матрица размером не менее , выведите одно из двух различных и согласованных значений, решая, является ли матрица центросимметричной или нет. Вы можете предположить, что матрица будет состоять исключительно из натуральных чисел.
Однако ваш код также должен быть центросимметричным. То есть это должна быть программа / функция (или ее эквиваленты), состоящая из строк, каждая из которых содержит байтов в кодировке вашего языка, и должна соответствовать определению, данному выше, но с байтами вместо положительных целых чисел. Ваша оценка будет равна значению , а меньшее будет лучше.н н
Вы можете принимать и выводить данные любым стандартным способом и в любом приемлемом формате, при этом отмечая, что эти лазейки по умолчанию запрещены. Вы можете (по желанию) также принять размер качестве входных данных (если только вы не берете входные данные в качестве одномерного списка, в этом случае вы можете использовать только качестве дополнительного ввода).n 2
Контрольные примеры
Truthy:
[[1, 2], [2, 1]]
[[1, 2, 3], [5, 6, 5], [3, 2, 1]]
[[10, 5, 30], [2, 6, 2], [30, 5, 10]]
[[100, 100, 100], [100, 50, 100], [100, 100, 100]]
[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [3, 2, 10, 2, 3], [9, 8, 7, 6, 5], [7, 6, 5, 4, 3]]
Falsy:
[[1, 2], [1, 2]]
[[1, 2, 10], [5, 6, 5], [11, 2, 1]]
[[14, 5, 32], [2, 6, 2], [30, 5, 16]]
[[19, 19, 19], [40, 50, 4], [19, 19, 19]]
[[1, 2, 20, 4], [7, 6, 7, 8], [8, 7, 6, 6], [3, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [4, 5, 10, 4, 5], [5, 6, 7, 8, 9], [3, 4, 5, 6, 7]]
источник
#
), чтобы нижняя половина кода была бы комментарием.#
будет работать, потому что комментарии, предшествующие этому,#
являются только встроенными: PОтветы:
JavaScript (ES6), размер
12119Все версии возвращают false для центросимметричного или true для нецентросимметричного.
1-мерный массив + длина, размер 9 (89 байт)
Принимает ввод в синтаксисе карри
(length)(array)
, где массив является 1-мерным.Попробуйте онлайн!
Матрица + ширина, размер 11 (131 байт)
Принимает ввод в синтаксисе карри
(width)(matrix)
.Попробуйте онлайн!
полезная нагрузка
Контейнер
Только матрица, размер 12 (155 байт)
Это мое оригинальное решение, которое вычисляет ширину матрицы самостоятельно.
Попробуйте онлайн!
Как?
Нам нужно несколько критических токенов, которые нельзя разделить:
some
length
)=>
Перевод строки может быть вставлен почти где-либо еще.
Развернутый код полезной нагрузки читается как:
и завернут в следующую структуру:
который после изменения становится действительным комментарием блока:
источник
Желе , оценка 2
Попробуйте онлайн!
Принимает входные данные в виде плоской квадратной матрицы (вектор размером ).n2
источник
Befunge-93 , размер 24
Попробуйте онлайн!
Входные данные:
n
за ним следуют элементы массива, разделенные пробелами. ПРИМЕЧАНИЕ: вам может понадобиться использовать другой переводчик, если у вас достаточно большой ввод.Я уверен, что есть лучший способ сделать это, я просто хотел попробовать это в Befunge. Фактическая часть кода - верхняя половина.
Как?
Код состоит из двух основных разделов: инициализация и проверка .
Инициализация:
Этот раздел кода записывает входную матрицу прямо под кодом в виде символов ASCII. И этот, и следующий раздел используют три ячейки в левом верхнем углу кода в качестве данных. Они хранятся как
n, i, j
.Проверка:
Другие части кода являются непрочитанным мусором, чтобы сделать его центросимметричным.
источник
Без комментариев!
Вводит в виде 1-D списка
Попробуйте онлайн!
Вводит в виде двумерной матрицы
Попробуйте онлайн!
Спасибо potato44 за всю их помощь в чате. И Линн за игру в гольф.
объяснение
Общая идея здесь проста, мы
concat
перечисляем список и сравниваем его с обратным. Однако, поскольку мы хотим быть центросимметричными, мы должны действовать осторожно. Сначала мы пишем код, как обычно:Теперь для того, чтобы наши обратные линии были также действительны в Haskell, нам нужно, чтобы левая часть наших уравнений выглядела так, как будто определение функции
tacnoc.)esrever>*<)==((
не соответствует.Первым шагом к решению этой проблемы является удаление скобок.
Однако сейчас у нас есть некоторые новые проблемы. И то,
.
и другое в==
обратном порядке одинаковы, поэтому наши перевернутые строки пытаются переопределить операторы (<*>
перевернутый,>*<
так что у нас все хорошо)..
может быть заменено на,<$>
поскольку функции являются функторами. И мы можем заменить==
на/=
, что сводит на нет наши результаты, но это все еще в пределах спецификации. Теперь у нас естьДля того, чтобы урезать нашу длину строки мы псевдоним
concat
иreverse
.Теперь мы просто заканчиваем это, делая все центросимметричным и квадратным.
Более короткая 1-D версия работает во многом таким же образом, за исключением того, что нет необходимости,
concat
мы можем сохранить две строки, удалив ее.источник
<$>
сторона<$>
.Python 2 , размер 10 (109 байт)
Попробуйте онлайн!
Предыдущий Python 2 , размер 14 (209 байт)
Попробуйте онлайн!
источник
-i-1
и-j-1
может быть просто~i
и~j
Pyth, размер 6 (41 байт)
Попробуй здесь
объяснение
Первая строка инвертирует ввод и каждую строку и проверяет, есть ли у нас копия ввода.
Во
.q
второй строке выходит из программы, так что все после этого, как иq
до него, является запретом.источник
APL (Dyalog Unicode) , оценка
7654Полная программа. Запрашивает матричное выражение из стандартного ввода. Выводит 1 или 0, а затем выдает ошибку. Без комментариев!
Попробуйте онлайн!
⎕
запросить выражение и оценить его.,
ravel (flatten)r←
сохранить результат вr
(для r avelled)⌽r
Зеркалоr
r≡
неявно печатать,r
идентично ли это≡
глубинаr
(дает 1)r⌽
используетсяr
для поворота(это всегда будет вызывать
RANK ERROR
и выходить, потому что матрица не разрешена в качестве левого аргумента⌽
)источник
Perl 6 , размер
9 87Попробуйте онлайн!
Хорошо, я изменил этоreverse
узкое место здесь. Я изменил его на технически более длинный, но гораздо более разделяемый[*-1 X-^*]
.[R,]
после того, как увидел ответ Брэда Гилберта на другой вопрос.Сглаженный код
{.flat eq [R,] .flat}
.Редактировать: Черт, я понял, что мне даже не нужно сгладить первый список, но попытки укоротить его до размера 6 потерпели неудачу с одним байтом, слишком большим, чтобы уместиться ...
:(
Хотя, если мы возьмем его в качестве одномерного массива, его легко уместить в размере 6.
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) (только REPL), размер 8 (71 байт)
Возвращает
True
для центросимметричного ввода и вFalse
противном случае.В Mathematica REPL строки с синтаксическими ошибками игнорируются (толстая красная полоса появляется на боковой стороне экрана). Здесь только первые три строки,
f=#[[c=-1;;1;;-1,c]]==#&
выполняются .Этот код фиксирует функцию в названии
f
.К сожалению, встроенный
PalindromeQ
слишком длинный.источник
Пыть , размер 1
Попробуйте онлайн!
Проверяет, является ли ввод (в форме объединенных строк) палиндромом.
источник
Japt , размер
94 (11 байт)Попробуйте онлайн!
Принимает одномерный ввод, проверяет, является ли он палиндромом. Если вы хотите, вы можете заполнить две пустые строки для ascii art.
Старая двумерная версия поворачивает ввод дважды и проверяет, равен ли он оригиналу:
Попробуйте онлайн!
источник
Шелуха , размер 3
Попробуйте онлайн! Введите как 1D-список. Каждая строка определяет функцию, но вызывается только та, что в первой строке.
Ṡ=↔
это палиндромный тест, который проверяет, равен ли вход (=
) его реверсу (↔
).Шелуха , размер 4
Попробуйте онлайн! Для ввода в качестве 2D-матрицы мы объединяем (
Σ
) список списков, прежде чем проверять, что это палиндром.источник
MATL , оценка 4
Ввод имеет формат
[1 2; 2 1]
, используя в;
качестве разделителя строк.Вывод через STDERR ( разрешен по умолчанию):
Для центросимметричного ввода выдается постоянная ошибка. С текущими версиями Linux и Octave в TIO создается следующий вывод STDERR (не учитывая последние строки, начинающиеся с
Real time: ...
):Ошибка может отличаться в зависимости от версий Linux и Octave, но будет одинаковой для всех входов.
Для нецентросимметричного ввода ошибка не выдается, и вывод STDERR на TIO
Попробуйте онлайн! Или проверьте все тестовые случаи:
Проверьте что программа центросимметричная.
объяснение
%
является символом комментария, который приводит к игнорированию остальной части строки. Новые строки также игнорируются. Так что код простокоторый делает следующее:
источник
Haskell, размер
11,10,9, 8Принимает ввод как 2D-список! (Благодарю Орджана Йохансена)
источник
<*>
должно быть>*<
. В 2D отсутствует,-
и обратная часть не имеет пробелов в нужных местах.Python 2 , размер 8
Попробуйте онлайн!
Принимает ввод как одномерный список объединенных строк (длинойN2 ) и выводится через код выхода (0 для симметричных входов, 1 в противном случае).
Список просто проверяется, чтобы быть палиндромом. Если это так, цепочка сравнения
a[::-1]!=a<_
дает сбой на!=
этапе и замыкается; в противном случае неизвестная переменная_
будет оценена, что приведет к сбою программы.источник
R , размер 9
Попробуйте онлайн!
Последние три строки представляют собой реальную программу, которая принимает одномерный массив в качестве входных данных и проверяет, равен ли он обратному. Значение истинности: ЛОЖЬ, значение ЛОЖЬ: ИСТИНА.
Р + Прир, размер 9
Попробуйте онлайн!
источник
C # (.NET Core) , оценка
13 1110Попробуйте онлайн!
Принимает ввод как массив 1D и n 2 как длину; возвращает
false
для центросимметричной иtrue
нецентросимметричной. Эта версия использует,System.Linq
но я не знаю, как вписать ее в представление кода из-за особых требований задачи. Развернутый код:Следующее - мое предыдущее представление, которое не использует LINQ:
C # (.NET Core) , оценка
16 1513Попробуйте онлайн!
Развернутый код:
источник
int
наvar
(то есть иtni
наrav
), вторая отправка также работает в JavaScript.Рубин , оценка
98Попробуйте онлайн!
Лямбда, принимающая уплощенную матрицу в качестве входных данных. Возвращает true для центросимметричного, иначе false.
-1 спасибо Mr.XCoder,
Распакованный:
источник
Чистый , размер 9
Спасибо Орджану Йохансену !
Попробуйте онлайн!
Чистый , размер 10
Попробуйте онлайн!
источник
m
.05AB1E , размер 3 (11 байт )
Ввод в виде единого списка.
Попробуйте онлайн.
Я думаю, этот не считается ..; р
Ввод в виде единого списка.
Попробуйте онлайн.
Объяснение:
Некоторые варианты размера 3 (11 байт ):
Матрица в качестве входных данных.
Попробуйте онлайн.
Единый список в качестве входных данных.
Попробуйте онлайн.
источник
С (gcc) , 12 х 12
Попробуйте онлайн!
источник
> <>, Размер 6
Попробуйте онлайн!
(Оказывается, это боль, передающая множественное значение -v в tio)
В качестве исходного состояния стека ввод принимается как одномерный массив с параметром -v. Выход без вывода, если матрица центросимметрична, выход с ошибкой (выводит «Что-то пахнет подозрительно ...»), если нет.
Я не совсем доволен этим форматом вывода, так что вот размер 7, который выводит 1 для true и 0 для false.
Попробуйте онлайн!
источник
{-?;
Stax , n = 3
Запустите и отладьте его
Объяснение:
3 является наилучшим из возможных, потому что мне нужно как минимум три команды: копировать, перевернуть и сравнить
Stax , n = 4
Запустите и отладьте его
Объяснение:
источник
Japt , размер 2 (5 байт)
Попытайся
источник
Java 10, размер 13 (181 байт)
Попробуйте онлайн.
Вдохновленный ответом C # @Charlie .
Гольф объяснение:
источник
C (gcc) , оценка 11
Принимает список int и n в качестве аргументов. Возвращает n как истинное значение, 0 как ложь.
Попробуйте онлайн!
источник
Javascript ES6, размер 8:
Javascript ES6, размер 7 (это действительно?):
Тест:
или с лямбдой, сохраненной в переменную с именем
a
:источник
Clojure, размер 9
Попробуйте онлайн!
источник