Введение
Для этой задачи мы определим соседей элемента в квадратной матрице (такой, что ) как все элементы , которые непосредственно примыкают по диагонали, горизонтали или вертикали к (то есть они «окружают» , не оборачиваясь).E = A i , j A E
Для педантов формальное определение соседей для matix (с 0 индексами): где n×nA N i ,E i ,
Предположим, что элемент с индексом живет во враждебности, если он взаимно прост со всеми соседями (то есть ). К сожалению, эта бедная запись не может одолжить даже чашки сахара у своих грубых соседей ...
задача
Достаточно историй: учитывая квадратную матрицу натуральных чисел, выведите одно из следующего:
- Плоский список элементов (дедуплицированный или нет), указывающий все записи, которые занимают некоторые индексы в такие, что соседи являются враждебными.
- Булева матрица с с в позициях, где соседи враждебны, и противном случае (вы можете выбрать любые другие непротиворечивые значения вместо и ).
- Список пар индексов , представляющих враждебные окрестности.
Реализация ссылок в Physica - поддерживает синтаксис Python также для ввода / вывода. Вы можете принимать и выводить данные любым стандартным способом и в любом приемлемом формате, при этом отмечая, что эти лазейки по умолчанию запрещены. Это код-гольф, поэтому выигрывает самый короткий код в байтах (на каждом языке)!
Кроме того, вы также можете использовать размер матрицы в качестве входных данных и дополнительно можете использовать матрицу в виде плоского списка, поскольку он всегда будет квадратным.
пример
Рассмотрим следующую матрицу:
Соответствующие соседи каждого элемента:
i j – E -> Neighbours | All coprime to E?
|
0 0 – 64 -> {10; 27; 22} | False
0 1 – 10 -> {64; 14; 27; 22; 32} | False
0 2 – 14 -> {10; 22; 32} | False
1 0 – 27 -> {64; 10; 22; 53; 58} | True
1 1 – 22 -> {64; 10; 14; 27; 32; 53; 58; 36} | False
1 2 – 32 -> {10; 14; 22; 58; 36} | False
2 0 – 53 -> {27; 22; 58} | True
2 1 – 58 -> {27; 22; 32; 53; 36} | False
2 2 – 36 -> {22; 32; 58} | False
И, таким образом, вывод должен быть одним из следующих:
{27; 53}
{{0; 0; 0}; {1; 0; 0}; {1; 0; 0}}
{(1; 0); (2; 0)}
Контрольные примеры
Input –> Version 1 | Version 2 | Version 3
[[36, 94], [24, 69]] ->
[]
[[0, 0], [0, 0]]
[]
[[38, 77, 11], [17, 51, 32], [66, 78, 19]] –>
[38, 19]
[[1, 0, 0], [0, 0, 0], [0, 0, 1]]
[(0, 0), (2, 2)]
[[64, 10, 14], [27, 22, 32], [53, 58, 36]] ->
[27, 53]
[[0, 0, 0], [1, 0, 0], [1, 0, 0]]
[(1, 0), (2, 0)]
[[9, 9, 9], [9, 3, 9], [9, 9, 9]] ->
[]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]] ->
[1, 1, 1, 1, 1, 1, 1, 1, 1] or [1]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
[[35, 85, 30, 71], [10, 54, 55, 73], [80, 78, 47, 2], [33, 68, 62, 29]] ->
[71, 73, 47, 29]
[[0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]
[(0, 3), (1, 3), (2, 2), (3, 3)]
источник
Ответы:
APL (Dyalog) , 17 байт
Попробуйте онлайн! (кредиты для ngn за перевод тестовых примеров в APL)
Краткое объяснение
(×/∘,↓)⌺3 3
получает произведение каждого элемента со своими соседями.Затем я делю на аргумент
÷⊢
, чтобы каждая запись в матрице была сопоставлена с произведением ее соседей.Наконец, я беру gcd аргумента с этой матрицей
⊢∨
и проверяю равенство с 1,1=
Обратите внимание, что, как и в случае ответа ngn , для некоторых входных данных это не удается из-за ошибки в интерпретаторе.
источник
JavaScript (ES6), 121 байт
Возвращает матрицу логических значений, где false означает враждебность.
Попробуйте онлайн!
Как?
Метод, используемый для выделения 8 соседей каждой ячейки, аналогичен методу, описанному здесь .
комментарии
источник
MATL , 22 байта
Вход представляет собой матрицу. Вывод всех чисел с враждебными соседями.
Попробуйте онлайн! Или проверьте все тестовые случаи .
Пояснение с проработанным примером
Рассмотрим ввод
[38, 77, 11; 17, 51, 32; 66, 78, 19]
в качестве примера. Содержимое стека показано снизу вверх.источник
APL (Dyalog Classic) ,
2322 байта-1 байт благодаря @ H.PWiz
Попробуйте онлайн!
не поддерживает матрицы размером менее 3х3 из- за ошибки в интерпретаторе
источник
(⊃∨⊢)
->∨∘⊂⍨
Я думаю,Желе , 24 байта
Хм, кажется долго.
Монадическая ссылка, принимающая список списков положительных целых чисел, который возвращает список каждого из значений, которые находятся во враждебных окрестностях (версия 1 без дедупликации).
Попробуйте онлайн! Или посмотрите тестовый набор .
Как?
источник
Python 2 ,
182177166 байтПопробуйте онлайн!
Выводит список списков с записями True / False.
источник
Haskell , 95 байт
Попробуйте онлайн!
Функция
?
принимает матрицуm
как список списков и размер матрицыn
; возвращает список записей враждебности .источник