Files
rose-ash/lib/ocaml/baseline/kth_two.ml
giles b3ee88e9bb
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 26s
ocaml: phase 5.1 kth_two.ml baseline (8th smallest of two sorted = 8)
Two-pointer merge advancing the smaller-head pointer k times,
without materializing the merged array:

  while !count < k do
    let pick_a =
      if !i = m then false        (* a exhausted, take from b *)
      else if !j = n then true    (* b exhausted, take from a *)
      else a.(!i) <= b.(!j)
    in
    if pick_a then ... else ...;
    count := !count + 1
  done

For a = [1;3;5;7;9;11;13], b = [2;4;6;8;10;12]:
  merged order: 1,2,3,4,5,6,7,8,9,10,11,12,13
  8th element = 8.

Tests nested if/else if/else flowing into a bool, dual-ref
two-pointer loop, separate count counter for k-th constraint.

184 baseline programs total.
2026-05-11 02:44:40 +00:00

28 lines
556 B
OCaml

let kth_two a b k =
let m = Array.length a in
let n = Array.length b in
let i = ref 0 and j = ref 0 and count = ref 0 in
let result = ref 0 in
while !count < k do
let pick_a =
if !i = m then false
else if !j = n then true
else a.(!i) <= b.(!j)
in
if pick_a then begin
result := a.(!i);
i := !i + 1
end else begin
result := b.(!j);
j := !j + 1
end;
count := !count + 1
done;
!result
;;
let a = [| 1; 3; 5; 7; 9; 11; 13 |] in
let b = [| 2; 4; 6; 8; 10; 12 |] in
kth_two a b 8