///|
/// HilbertCurve Demo - Demonstrates Hilbert curve coordinate mapping.
fn main {
println("=== HilbertCurve Demo ===")
let hc = @bio.HilbertCurve::new(4, 2)
println("Levels: \{hc.levels}")
println("Dimension: \{hc.dimension}")
println("Max coordinate: \{hc.max_coordinate}")
println("")
println("Encode/decode roundtrip:")
let coords = [3, 5]
let encoded = @bio.hilbert_encode(hc, coords)
let decoded = @bio.hilbert_decode(hc, encoded)
println(
" Coords [3,5] -> encoded: \{encoded} -> decoded: [\{decoded[0]},\{decoded[1]}]",
)
println("")
println("Distance between [1,2] and [3,4]:")
let dist = @bio.hilbert_distance(hc, [1, 2], [3, 4])
println(" Distance: \{dist}")
println("")
println("Linearize genome (10 positions):")
let segments = @bio.hilbert_linearize_genome(10, 3)
let mut i = 0
while i < segments.length() && i < 5 {
println(" Position \{segments[i].0} -> Hilbert index \{segments[i].1}")
i = i + 1
}
println("")
println("Map values to grid:")
let values = [1.0, 2.0, 3.0, 4.0]
let grid = @bio.hilbert_map_to_grid(@bio.HilbertCurve::new(2, 2), values)
println(" Grid size: \{grid.length()}x\{grid.length()}")
}