젤리 , 21 20 18 17 바이트
ṡṂ€€×"
‘×¥\ç"Ụ€FṀ
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .
배경
M을 다음과 같은 비트 행렬로 하자.
0 0 0 1 1 0 0 0 0
1 1 0 1 1 0 0 1 0
1 1 0 1 1 1 1 1 0
1 1 0 0 1 1 1 0 0
0 1 0 0 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1 0
우리 는 M의 각 열에서 1 비트 의 수를 세는 것으로 시작 하여 0 비트 가 발생할 때마다 카운트를 재설정합니다 .
예제 매트릭스의 경우
0 0 0 1 1 0 0 0 0
1 1 0 2 2 0 0 1 0
2 2 0 3 3 1 1 2 0
3 3 0 0 4 2 2 0 0
0 4 0 0 5 3 3 1 1
1 5 1 1 6 4 4 2 2
2 6 2 2 0 5 5 3 0
다음으로 각 행의 모든 연속 된 하위 목록을 계산합니다. 길이 k 의 모든 슬라이스를 생성하여이를 달성합니다 . 여기서 k 는 1 과 각 행의 항목 수 사이 에서 다릅니다 .
두 번째 행의 경우
[1], [5], [1], [1], [6], [4], [4], [2], [2]
[1, 5], [5, 1], [1, 1], [1, 6], [6, 4], [4, 4], [4, 2], [2, 2]
[1, 5, 1], [5, 1, 1], [1, 1, 6], [1, 6, 4], [6, 4, 4], [4, 4, 2], [4, 2, 2]
[1, 5, 1, 1], [5, 1, 1, 6], [1, 1, 6, 4], [1, 6, 4, 4], [6, 4, 4, 2], [4, 4, 2, 2]
[1, 5, 1, 1, 6], [5, 1, 1, 6, 4], [1, 1, 6, 4, 4], [1, 6, 4, 4, 2], [6, 4, 4, 2, 2]
[1, 5, 1, 1, 6, 4], [5, 1, 1, 6, 4, 4], [1, 1, 6, 4, 4, 2], [1, 6, 4, 4, 2, 2]
[1, 5, 1, 1, 6, 4, 4], [5, 1, 1, 6, 4, 4, 2], [1, 1, 6, 4, 4, 2, 2]
[1, 5, 1, 1, 6, 4, 4, 2], [5, 1, 1, 6, 4, 4, 2, 2]
[1, 5, 1, 1, 6, 4, 4, 2, 2]
다음으로 각 슬라이스를 최소 및 길이의 곱에 매핑합니다. 각 슬라이스에 대해 주어진 슬라이스가 맨 아래 행인 최대 높이 1 비트의 사각형 영역을 계산합니다 .
예제 매트릭스의 두 번째 행 의 길이 3 의 슬라이스에 대해
3 3 3 3 12 6 6
남은 것은 모든 행의 모든 슬라이스에서 최대 값을 취하는 것입니다.
예제 행렬의 경우 12가 됩니다.
작동 원리
‘×¥\ç"Ụ€FṀ Main link. Argument: M (2D list of bits)
\ Reduce the columns of M by the link to the left.
¥ Combine the two atoms to the left into a dyadic chain.
‘ Increment the left argument.
× Multiply the result with the right argument.
Ụ€ Grade up each; yield the indices of each row of M, sorted by their
values. The order is not important here; we just need the indices.
ç" Apply the helper link to each element of the result to the left and
the corresponding element of the result to the right.
F Flatten the resulting, nested list.
Ṁ Extract the maximum.
ṡṂ€€×" Helper link. Arguments: R (row), X (indices of R)
ṡ For each k in X, split R into overlapping slices of length k.
Ṁ€€ Compute the minimum of each individual slice.
×" Multiply the minima of all slices of length k by k.
plow
.