ocaml: phase 5.1 flood_fill.ml baseline (largest grid component = 7)
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.
This commit is contained in:
2026-05-10 21:57:42 +00:00
parent e057d9f18f
commit 3ea8967571
3 changed files with 47 additions and 0 deletions

View File

@@ -73,6 +73,7 @@
"fizz_classifier.ml": 540,
"fizzbuzz.ml": 57,
"flatten_tree.ml": 28,
"flood_fill.ml": 7,
"floyd_warshall.ml": 9,
"lis.ml": 6,
"list_ops.ml": 30,

View File

@@ -0,0 +1,38 @@
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 ()