Вступление
Пусть поле будет прямоугольником, заполненным только символами -
и [0-9]
. Пример поля:
11-011123
111-010--
0010---01
111-01234
Вы видите, что это поле было разделено на три меньшие области:
Чтобы вычислить счет меньшего района, мы просто складываем все числа. Например:
11
111
0010
111
1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 = 9
Общая оценка по этой области - 9 . Теперь мы делаем то же самое для второй области:
011123
010
0 + 1 + 1 + 1 + 2 + 3 + 0 + 1 + 0 = 9
Общая оценка также 9 . Теперь мы должны рассмотреть последнюю область:
01
01234
0 + 1 + 0 + 1 + 2 + 3 + 4 = 11
Это имеет общую оценку 11 . Наивысшая оценка на поле - 11, так что это то, что нам нужно вывести.
Задание
Для данного поля (в виде 2D-строки, массива и т. Д.) Выведите на поле наивысшую оценку . Вы можете предположить, что данные поля всегда будут содержать не менее 1 цифры. Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
Контрольные примеры
Тестовый пример 1:
Input:
1
Output:
1
Контрольный пример 2:
Input:
1-1-1-1
-1-1-1-
2-1-1-1
-1-1-1-
Output:
2
Тестовый пример 3:
Input:
12-45-
4-65-9
87-654
12-487
45----
684764
Output:
69
Контрольный пример 4:
Input:
111-12
------
21--10
Output:
3
["111", "01234"]
?-
разделенные области? Можете ли вы сделать часть «что определяет область» более понятной, пожалуйста?Ответы:
MATL ,
545149 байтовВвод - это двумерный массив символов в формате MATL (AB) с
;
разделителем строк. Входные данные в примере и в тестовых случаях соответственно:Попробуйте онлайн!
объяснение
Это работает путем построения матрицы смежности графа, определяемого отношением «быть связанным». В качестве примера рассмотрим поле 3 × 4
Записи в двумерном массиве легко описываются в MATL с использованием линейной индексации (основной столбец). В случае 3 × 4 линейный индекс каждой записи дается как
Матрица смежности строится поэтапно с использованием умножения матриц. На первом этапе рассматриваются непосредственные соседи. Например, точка с индексом 3 является соседом самой себя, а точка с индексом 2. Это не соседка 6, потому что эта точка не содержит числа в соответствии с полем. В этом примере матрица смежности отношения «непосредственный сосед» представляет собой матрицу 12 × 12 L, заданную как
(Видно, что столбец 3 имеет значение
1
в строках 2 и 3.) Эта матрица всегда симметрична, а ее диагональ имеет значение1
для точек, которые не содержат-
.Следующим шагом будет матрица смежности отношения, «связанного не более чем с одной точкой между ними ». Чтобы получить его, достаточно умножить L на себя и установить ненулевые записи в
1
. В общем случае матрица смежности отношения «связана некоторым путем», M , получается путем возведения L в показатель степени (в матричном смысле), который представляет максимально возможную длину пути. Верхняя граница длины максимального пути является количество ненулевых элементов в L .Непосредственное вычисление мощности матрицы может вызвать переполнение, потому что быстро появляются большие числа. Поэтому лучше постепенно умножать на одну и ту же матрицу, преобразовывая ненулевые записи в 1 после каждого шага, чтобы предотвратить накопление больших чисел.
Столбец i в M представляет точки, которые связаны (любым путем) с точкой i . Теперь поле уровня можно уменьшить до вектора столбца c в линейном порядке, где каждая запись содержит соответствующее число или неопределенное значение для
-
. Так что в этом случае с будетУмножение каждого столбца M на c поэлементно и вычисление суммы каждого столбца дает, для каждой точки i , общий балл точки области i, к которой принадлежит. Площадь определяется всеми точками, которые связаны между собой. Обратите внимание, что многие столбцы дают одинаковый результат; а именно, столбцы i и j будут давать одинаковую сумму, если точки i и j соединены (принадлежат одной и той же области). Конечный результат - максимум этих сумм.
источник
JavaScript (ES6), 157 байт
объяснение
Принимает поле ввода в виде строки. Для каждого числа в поле суммирует все числа в области. Это выполняется путем многократного повторения каждого числа в поле, добавления числа к оценке, если соседняя ячейка содержит ранее подсчитанное число. Подсчитанные числа, которые являются частью области, представлены путем установки их на 99, чтобы они не считались снова. Выводит наивысший балл в виде числа.
источник
Pyth, 93 байта
Попробуйте онлайн!
Как это устроено
Первый шаг: прочитайте ввод
Второй шаг: определить функцию для оценки одной области
Третий шаг: прочитать все области и найти нужный максимум
источник