Учитывая двумерную матрицу 1 с и 0, например, для -
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
[0, 1, 1, 0, 0, 1, 0, 1, 0, 1],
[1, 1, 0, 0, 1, 1, 0, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 1, 0, 0],
[1, 0, 0, 0, 1, 0, 1, 1, 0, 0],
[1, 0, 0, 0, 1, 0, 1, 1, 1, 0],
[1, 0, 0, 0, 1, 1, 0, 1, 1, 0]])
1 обозначает блок, а 0 обозначает пустой пробел.
Я хочу рассчитать количество скважин и их суммарную глубину .
Скважина существует, когда столбец короче, чем оба соседних столбца, предполагается, что границы заполнены блоками (1 с). Например, для заполнения границ массив становится:
array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1],
[1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1],
[1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1],
[1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1],
[1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1]])
Количество скважин составляет 3 ( Столбец 1, 4 и (9,10) ).
Глубина скважины min(height(col_to_left), height(col_to_right)) - height(well_col)
.
Таким образом, в этом случае глубина составляет [1, 1, 7] . И поэтому накопленная глубина составляет 1 + 1 + 7 = 9 .
Как мне найти это? Я хочу избежать использования петель.