ocaml: phase 5.1 polygon_area.ml baseline (pentagon 2x area = 32)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s
Shoelace formula on a pentagon with integer vertices:
pts = [(0,0); (4,0); (4,3); (2,5); (0,3)]
2 * area = | Σ (x_i * y_{i+1} - x_{i+1} * y_i) |
= | 0*0 - 4*0 + 4*3 - 4*0 + 4*5 - 2*3 + 2*3 - 0*5
+ 0*0 - 0*3 |
= 32
Returns the doubled form (32) to stay integral.
Tests:
- let (x1, y1) = arr.(i) in -- tuple destructure from array
- arr.((i + 1) mod n) -- modular wrap-around index
- if a < 0 then - a else a -- prefix - negation
162 baseline programs total.
This commit is contained in:
@@ -122,6 +122,7 @@
|
|||||||
"prefix_sum.ml": 66,
|
"prefix_sum.ml": 66,
|
||||||
"pretty_table.ml": 64,
|
"pretty_table.ml": 64,
|
||||||
"poly_stack.ml": 5,
|
"poly_stack.ml": 5,
|
||||||
|
"polygon_area.ml": 32,
|
||||||
"pow_mod.ml": 738639,
|
"pow_mod.ml": 738639,
|
||||||
"prime_factors.ml": 17,
|
"prime_factors.ml": 17,
|
||||||
"pythagorean.ml": 16,
|
"pythagorean.ml": 16,
|
||||||
|
|||||||
17
lib/ocaml/baseline/polygon_area.ml
Normal file
17
lib/ocaml/baseline/polygon_area.ml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
let pts = [(0, 0); (4, 0); (4, 3); (2, 5); (0, 3)]
|
||||||
|
|
||||||
|
let polygon_2area pts =
|
||||||
|
let arr = Array.of_list pts in
|
||||||
|
let n = Array.length arr in
|
||||||
|
let acc = ref 0 in
|
||||||
|
for i = 0 to n - 1 do
|
||||||
|
let (x1, y1) = arr.(i) in
|
||||||
|
let (x2, y2) = arr.((i + 1) mod n) in
|
||||||
|
acc := !acc + x1 * y2 - x2 * y1
|
||||||
|
done;
|
||||||
|
let a = !acc in
|
||||||
|
if a < 0 then - a else a
|
||||||
|
|
||||||
|
;;
|
||||||
|
|
||||||
|
polygon_2area pts
|
||||||
@@ -407,6 +407,15 @@ _Newest first._
|
|||||||
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
|
||||||
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
'a tree`) with insert + in-order traversal. Tests parametric ADT,
|
||||||
recursive match, List.append, List.fold_left.
|
recursive match, List.append, List.fold_left.
|
||||||
|
- 2026-05-10 Phase 5.1 — polygon_area.ml baseline (shoelace formula
|
||||||
|
on pentagon, returns 2× area = 32). Vertices (0,0), (4,0), (4,3),
|
||||||
|
(2,5), (0,3); shoelace sum |Σ(x_i·y_{i+1} − x_{i+1}·y_i)| = 32 so
|
||||||
|
the area is 16, and we return the doubled form to stay integral.
|
||||||
|
Tests `let (x1, y1) = arr.(i) in` tuple destructuring from array
|
||||||
|
access (previously suspected broken in bfs_grid but works here —
|
||||||
|
the iter-242 bug was actually `&&` short-circuit, not destructure),
|
||||||
|
modular wrap-around `arr.((i+1) mod n)`, prefix-`-` negation.
|
||||||
|
162 baseline programs total.
|
||||||
- 2026-05-10 Phase 5.1 — min_cost_path.ml baseline (min-cost path
|
- 2026-05-10 Phase 5.1 — min_cost_path.ml baseline (min-cost path
|
||||||
through 4×4 cost grid, top-left to bottom-right with moves
|
through 4×4 cost grid, top-left to bottom-right with moves
|
||||||
right/down only, optimal = 12). Standard 2D DP: dp[i][j] = min
|
right/down only, optimal = 12). Standard 2D DP: dp[i][j] = min
|
||||||
|
|||||||
Reference in New Issue
Block a user