Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 21s
Recursive 4-way flood fill from every unvisited 1-cell:
let rec flood visited r c =
if r < 0 || r >= h || c < 0 || c >= w then 0
else if visited.(r).(c) || grid.(r).(c) = 0 then 0
else begin
visited.(r).(c) <- true;
1 + flood visited (r - 1) c
+ flood visited (r + 1) c
+ flood visited r (c - 1)
+ flood visited r (c + 1)
end
Grid (1s shown as #, 0s as .):
# # . # #
# . . . #
. . # . .
# # # # .
. . . # #
Largest component: {(2,2),(3,0),(3,1),(3,2),(3,3),(4,3),(4,4)} = 7.
Bounds check r >= 0 must short-circuit before visited/grid reads;
relies on the && / || fix from iter 242.
157 baseline programs total.
39 lines
813 B
OCaml
39 lines
813 B
OCaml
let h = 5
|
|
let w = 5
|
|
|
|
let grid = [|
|
|
[| 1; 1; 0; 1; 1 |];
|
|
[| 1; 0; 0; 0; 1 |];
|
|
[| 0; 0; 1; 0; 0 |];
|
|
[| 1; 1; 1; 1; 0 |];
|
|
[| 0; 0; 0; 1; 1 |]
|
|
|]
|
|
|
|
let rec flood visited r c =
|
|
if r < 0 || r >= h || c < 0 || c >= w then 0
|
|
else if visited.(r).(c) || grid.(r).(c) = 0 then 0
|
|
else begin
|
|
visited.(r).(c) <- true;
|
|
1 + flood visited (r - 1) c
|
|
+ flood visited (r + 1) c
|
|
+ flood visited r (c - 1)
|
|
+ flood visited r (c + 1)
|
|
end
|
|
|
|
let largest_component () =
|
|
let visited = Array.init h (fun _ -> Array.make w false) in
|
|
let best = ref 0 in
|
|
for r = 0 to h - 1 do
|
|
for c = 0 to w - 1 do
|
|
if grid.(r).(c) = 1 && not visited.(r).(c) then begin
|
|
let s = flood visited r c in
|
|
if s > !best then best := s
|
|
end
|
|
done
|
|
done;
|
|
!best
|
|
|
|
;;
|
|
|
|
largest_component ()
|