Определения
К е кольцо квадратной матрицы размера N , где 1 ≤ K ≤ потолок (N / 2) представляет собой список , образованный элементами к - й и (N-K + 1) й строки и столбцы, но без первый и последний к-1 элементов.
Пример:
Матрица: 1 2 3 4 5 6 7 8 9 1 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 Разграничены в кольцах: + ------------------- + | 1 2 3 4 5 | | + ----------- + | | 6 | 7 8 9 | 1 | | | + --- + | | | 8 | 7 | 6 | 5 | 4 | | | + --- + | | | 3 | 2 1 9 | 8 | | + ----------- + | | 7 6 5 4 3 | + ------------------- +
Первое кольцо из вышесказанного 1,2,3,4,5,1,4,8,3,4,5,6,7,3,8,6
, второе 7,8,9,5,9,1,2,7
и третье 6
.
N на N матрицы положительных целых чисел (для целей этой задачи):
вогнутыми, если все целые числа в k- м кольце строго больше, чем целые в (k + 1) -й кольце, где k - любое целое число от 1 до N (те, что в первом кольце, больше, чем во втором в свою очередь больше, чем на третьем и т. д.). Пример:
4 5 6 4 7 -> потому что 4,5,6,4,7,4,8,5,5,4,6,5,9,5,5,4 все выше, чем 4 3 2 2 4 любая из 3,2,2,3,2,3,3,2, которые все выше 1 5 2 1 3 8 5 3 3 2 5 9 5 6 4 5
плоский, если все целые числа в матрице равны. Другой пример (возможно, избыточный):
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
выпуклые, если все числа в k- м кольце строго ниже, чем в (k + 1) -м кольце, где k - любое целое число между 1 до N (те, что в первом кольце, меньше, чем во втором, что в свою очередь ниже, чем на третьем и т. д.). Пример:
1 2 1 -> потому что 1 и 2 ниже 6 2 6 2 1 2 1
смешивается, если матрица не удовлетворяет ни одному из вышеуказанных критериев. Пример:
3 3 3 3 3 3 2 2 2 3 3 2 3 2 3 3 2 2 2 3 3 3 3 3 3
Вызов
Учитывая квадратную матрицу натуральных чисел размером не менее 3 , классифицируйте ее в соответствии с определениями выше. То есть выведите одно из четырех различных последовательных значений на основе того, является ли матрица вогнутой, плоской, выпуклой или смешанной.
Вы можете соревноваться на любом языке программирования и можете принимать и выводить данные любым стандартным методом и в любом приемлемом формате, при этом отмечая, что эти лазейки по умолчанию запрещены. Это код-гольф , поэтому выигрывает самое короткое представление (в байтах) для каждого языка .
Контрольные примеры
Вот несколько примеров для выбора - я выбрал 6 из каждой категории.
вогнутый
[[3, 3, 3], [3, 1, 3], [3, 3, 3]]
[[2, 3, 4], [5, 1, 6], [7, 8, 9]]
[[19, 34, 45], [34, 12, 14], [13, 13, 13]]
[[3, 4, 3, 4], [4, 2, 1, 3], [3, 1, 2, 4], [4, 3, 4, 3]]
[[4, 5, 6, 4, 7], [4, 3, 2, 2, 4], [5, 2, 1, 3, 8], [5, 3, 3, 2, 5], [9, 5, 6, 4, 5]]
[[7, 7, 7, 7, 7], [7, 6, 6, 6, 7], [7, 6, 5, 6, 7], [7, 6, 6, 6, 7], [7, 7, 7, 7, 7]]
Плоский
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[2, 2, 2], [2, 2, 2], [2, 2, 2]]
[[8, 8, 8], [8, 8, 8], [8, 8, 8]]
[[120, 120, 120], [120, 120, 120], [120, 120, 120]]
[[10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10]]
[[5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5]]
выпуклость
[[1, 2, 1], [2, 6, 2], [1, 2, 1]]
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
[[19, 34, 45], [34, 76, 14], [13, 6, 13]]
[[3, 3, 3, 3], [3, 4, 4, 3], [3, 4, 4, 3], [3, 3, 3, 3]]
[[192, 19, 8, 6], [48, 324, 434, 29], [56, 292, 334, 8], [3, 4, 23, 23]]
[[291, 48, 7, 5], [47, 324, 454, 30], [58, 292, 374, 4], [9, 2, 53, 291]]
смешанный
[[1, 2, 3], [4, 5, 9], [6, 7, 8]]
[[10, 14, 21], [100, 8, 3], [29, 2, 19]]
[[5, 5, 5, 5], [5, 4, 4, 5], [5, 4, 6, 5], [5, 5, 5, 5]]
[[3, 3, 3, 3], [3, 1, 2, 3], [3, 3, 2, 3], [3, 3, 3, 3]]
[[12, 14, 15, 16], [12, 18, 18, 16], [12, 11, 11, 16], [12, 14, 15, 16]]
[[5, 5, 5, 5, 5], [5, 4, 4, 4, 5], [5, 4, 6, 4, 5], [5, 4, 4, 4, 5], [5, 5, 5, 5, 5]]
источник
Ответы:
Java (JDK 10) ,
247232220 байтПопробуйте онлайн!
Выходы:
1
для "вогнутой"2
для "квартиры"3
для "выпуклой"4
для "смешанных"Ungolfed:
источник
Желе ,
18 1716 байтЯ считаю, что есть большие возможности для того, чтобы это усилие было в гольфе
Монадическая ссылка, принимающая список списков чисел, который возвращает список целых чисел:
Попробуйте онлайн! Или посмотрите набор тестов .
L‘H
может быть заменен на менее эффективный, но атомно корочеJÆm
.Как?
источник
Python 2 ,
219216189176 байтПопробуйте онлайн!
Выходы
set([1]), set([0]), set([-1]),
илиFalse
для вогнутых, плоских, выпуклых или смешанных соответственно.Спасибо за: колоссальные 27 байтов из нескольких оптимизаций по ovs . А потом еще 13 байтов после.
A
Понимание списка (из-за ovs) создает список элементов каждого кольца, отсортированных.Далее мы сравниваем
max
иmin
значение между соседними кольцами, глядя на0
го и-1
й элементы каждого отсортированного списка в A. Заметим , что если, например,M
имеет вогнутую форму,min
каждого наружного кольца должна быть большеmax
следующего внутреннего кольца-самые ; и из этого следует, чтоmax
каждого внешнего кольца также будет больше, чемmin
следующего самого внутреннего кольца.Если
M
вогнутый, плоский или выпуклый, набор этихmin/max
сравнений будет иметь только 1 элемент из{-1, 0, 1}
; если это смешано, будет два или более элементов.источник
while M:k=M[0]+M[-1];M=M[1:-1];A+=sorted(k+[i.pop(j)for j in[0,-1]for i in M]),
(174 байта),A=()
из своего числа байтов ...A=()
while M: A+= (some expression)
.Желе , 17 байт
Возвращает 1 для вогнутых , 0 для плоских , -1 для выпуклой и ничего для смешанной .
Попробуйте онлайн!
источник
JavaScript (ES6), 168 байт
Возвращает:
-1
для квартиры0
для смешанного1
для выпуклой2
для вогнутойПопробуйте онлайн!
Как?
Минимум и максимум на каждом кольце
Вычисляем минимум m и максимум M на каждом кольце.
Мы проверяем, расположена ли ячейка в данном кольце, вычисляя квадратное расстояние от центра матрицы на каждой оси. Взятие абсолютного значения будет работать так же хорошо, но квадрат короче.
Ячейка в точке (x, y) расположена в n-м кольце (с индексами 0, начиная с самого дальнего), если следующая формула неверна :
где:
Пример: находится ли ячейка (1, 2) на втором кольце матрицы 6x6?
Флаги
В конце каждой итерации мы сравниваем m и M с минимальным p и максимальным P предыдущего кольца и соответствующим образом обновляем переменную флага i :
i |= 1
если m> Pi |= 2
если М <рВ конце процесса мы конвертируем окончательное значение i следующим образом:
источник
K (нгн / к) ,
1007169 байтПопробуйте онлайн!
возвращает
1
= вогнутый,::
= плоский,-1
= выпуклый,0
= смешанный(
::
используется как заполнитель для пропущенных значений в k)источник
&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/*:'(|+:)\)'-1_(-1_1_+-1_1_)\
ок , 56 байт
Основано на ответе ngn .
Попробуйте онлайн!
источник
{&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/x)@.=i&|i:&/!2##x}
C ++ 17 (gcc) , 411 байт
Новый рекорд! (во время публикации, по крайней мере) Ну, это немного изящно, но все же C ++.
Попробуйте онлайн!
Лямбда
C
беретstd::vector<std::vector<int>>
и возвращает 1 для вогнутой, 2 для выпуклой, 3 для плоской или 0 для смешанной.Более разборчивая версия кода с описательными идентификаторами, комментариями,
R
->return
иI
->int
написано и т.д .:источник