21 lines
560 B
Plaintext
21 lines
560 B
Plaintext
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::<Vec<_>>()));
|
|
}
|