Обратите внимание, что эта задача не требует обработки или понимания комплексных чисел.
Учитывая непустую квадратную матрицу, где каждый элемент является двухэлементным (Re, Im) целочисленным списком, определите (давая любые значения истинности / ложности или любые два непротиворечивых значения), представляет ли это эрмитову матрицу.
Обратите внимание, что входные данные являются трехмерным массивом целых чисел; не двумерный массив комплексных чисел. Если ваш язык не может взять трехмерный массив напрямую, вы можете взять плоский список (и форму n × n или n × n × 2, если это поможет).
Матрица является эрмитовой, если она равна собственной сопряженной транспонировании . Другими словами, если вы перевернете его по диагонали от верхнего левого до нижнего правого и отрицаете второй элемент всех двухэлементных листовых списков, он будет идентичен входной матрице. Обратите внимание, что порядок переворота и отрицания не имеет значения, поэтому вы можете сначала отрицать, а потом перевернуть.
Пройти хотя бы пример
Этот пример использует JSON с лишним пробелом для облегчения чтения:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Транспонировать (перевернуть NW — SE диагональ):
[[ [2, 0] , [2,-1] , [4, 0] ],
[ [2, 1] , [3, 0] , [0,-1] ],
[ [4, 0] , [0, 1] , [1, 0] ]]
Отрисуем вторые элементы лист-списков:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Поскольку это идентично вводу, матрица является эрмитовой.
Контрольные примеры
эрмитова
[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,0]]]
[[[1,0],[2,0]],[[2,0],[1,0]]]
[[[1,0],[2,-3]],[[2,3],[1,0]]]
[[[42,0]]]
Неэрмитовых
[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,-1]]]
[[[0,1],[0,2]],[[0,2],[0,1]]]
[[[1,0],[2,3]],[[2,3],[1,0]]]
[[[3,2]]]
Ответы:
R
714847 байтПринимает трехмерный массив действительных чисел, создает двумерный массив воображаемых чисел, транспонирует, сопрягает и сравнивает.
Спасибо @Giuseppe за уменьшение количества байтов на 23 изумительных байта и @Vlo за финальный 1!
Попробуйте онлайн!
Пример:
источник
B=A[,,1]+A[,,2]*1i
следует сохранить несколько байтов.isSymmetric
существует и работает для эрмитовых комплексных матриц, но1x1
дело сложное, так как[
отбрасывает атрибуты, и это приводит кcomplex
скорееmatrix
function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)
In-line назначение сохраняет 1.Октава ,
393431 байтПопробуйте онлайн!
Сохранено 3 байта благодаря Луису Мендо, который сообщил мне о разъяснениях в тексте задания.
Объяснение:
В MATLAB и Octave,
'
это сопряженный комплекс транспонирования, а не «регулярный» транспонирования.Мы создаем переменную
y
inline, это первый слой трехмерной матрицы плюс второй слой, умноженный на сложную единицуj
, то есть сложную матрицу, где реальный термин - это первый «слой», а воображаемый - второй «слой». Затем мы проверяем, равно ли оно комплексно сопряженному транспонированному.Это выведет матрицу, содержащую только,
1
если true, и матрицу, содержащую, по крайней мере, одну,0
если false. Они считаются истинными и ложными в Октаве (Доказательство) .источник
Python 2 , 50 байт
Попробуйте онлайн!
источник
APL (Dyalog Unicode) ,
221597 байтПопробуйте онлайн!
Функция молчаливого префикса.
Спасибо Адаму за 7 байт в Dfn, а также Адаму и ErikTheOutgolfer за то,
что онисмирилисьс моей глупостью,помогая мне найти молчаливую версию.Благодаря ngn за 2 байта на молчаливой версии.
Как?
источник
Wolfram Language (Mathematica) ,
453433262118 байтПопробуйте онлайн!
источник
0xf3c7
это оператор транспонирования, но что это0xf3c8
?0xf3c9
( Документация Wolfram ).Java 8,
137136134126119116 байт-3 байта благодаря @ceilingcat .
Возвращает,
1
если эрмитово, в0
противном случае.Объяснение:
Попробуйте онлайн.
источник
J , 14 байт
Попробуйте онлайн!
объяснение
источник
-:0 2|:(,-)/"1
Haskell , 50 байтов
-7 байт благодаря H.PWiz.
Попробуйте онлайн!
источник
Желе ,
65 байтВозвращение монадической ссылки
1
для эрмитова ввода и в0
противном случае.Попробуйте онлайн!
Как?
источник
Ø+
.05AB1E , 9 байтов
Попробуйте онлайн!
объяснение
источник
Рубин , 46 байт
Попробуйте онлайн!
Порт моего Python ответа
источник
Perl 5 , -a0 48 байт
Старый счет: 50 байт (
+2
дляa0
). Неплохо для языка, в котором нет встроенной транспонирования (я вообще не ревную, нет, сэрри)Дайте входную матрицу на STDIN с
,
между действительной и мнимой частями, например:Напечатаю
1
для эрмита, иначе ничегоПопробуйте онлайн!
источник
Шелуха , 7 байт
Попробуйте онлайн!
Как?
Обратите внимание, что
†
должно работать вместоmm
, но есть раздражающая ошибка которая мешает мне использовать его :(источник
JavaScript (ES6), 53 байта
Сохранено 2 байта благодаря @Neil
Возвращается
false
за эрмитовой илиtrue
не эрмитовой.Попробуйте онлайн!
источник
f=([c,...s],p='')=>c?p+c+f(s,p+'🍹'):p
.C (gcc) ,
107103100 байтA[0]
в*A
два раза.Попробуйте онлайн!
источник
На самом деле , 13 байтов
Попробуйте онлайн!
Как это устроено?
Это представление на самом деле использует комплексные числа. Если было разрешено принимать входные данные в качестве матрицы сложных записей, то это было бы 8 байтов .
источник
Pyth, 9 байт
Объяснение:
Тестовый пакет .
источник
qCmm*V_B1
.qCmm.e_Fbk
... по-видимому, я забыл отредактировать счетчик байтов в окончательном представлении. @ Mr.Xcoder Я все исправил, спасибо за улов!C
111110108 байтСпасибо @Jonathan Frech за сохранение байта и спасибо @ceilingcat за сохранение двух байтов!
Попробуйте онлайн!
C (gcc) ,
106104 байтаПопробуйте онлайн!
источник
r|=...|...
работает так же, как иr+=...||...
.На самом деле , 13 байтов
Попробуйте онлайн!
Объяснение:
источник