fn entropy(s: &[u8]) -> f32 { let mut entropy: f32 = 0.0; let mut histogram = [0; 256]; for i in 0..s.len() { histogram.get_mut(s[i] as usize).map(|v| *v += 1); } for i in 0..256 { if histogram[i] > 0 { let ratio = (histogram[i] as f32 / s.len() as f32) as f32; entropy -= (ratio * ratio.log2()) as f32; } } entropy } fn main() { let arg = std::env::args().nth(1).expect("Need a string."); println!("Entropy of {} is {}.", arg, entropy(&arg.bytes().collect::>())); }