ゼリー、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と各行のエントリ数の間で変化します。
最後から2番目の行については、これにより
[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のスライスの場合例のマトリックスの最後から2番目の行の場合、これは
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
。