pub struct HabitabilityZone {
pub name: &'static str,
pub temperature_range_k: (f64, f64),
pub water_availability: f64,
}
impl HabitabilityZone {
pub fn habitability_score(&self) -> f64 {
let temp_penalty = ((self.temperature_range_k.0 - 300.0).abs() / 500.0).min(1.0);
(1.0 - temp_penalty) * self.water_availability
}
}
pub fn cloud_layer_microhabitat() -> HabitabilityZone {
HabitabilityZone {
name: "Temperate cloud layer (50-60 km)",
temperature_range_k: (260.0, 330.0),
water_availability: 0.05,
}
}
pub fn habitability_zones() -> Vec<HabitabilityZone> {
vec![cloud_layer_microhabitat()]
}