simplify variable summary

master
Andrew Johnson 6 years ago
parent 2208da2f90
commit f06615a214

@ -10,11 +10,31 @@ use std::io::prelude::*;
use std::process;
extern crate termion;
use termion::{clear, cursor, style};
use termion::raw;
use termion::raw::IntoRawMode;
use termion::input::TermRead;
use termion::event::Key;
use std::cmp;
fn variable_summary<W: Write>(stdout: &mut raw::RawTerminal<W>, vname: String, data: Vec<f64>) {
//calculate statistics
let N = data.len();
let sum = data.clone().into_iter()
.fold(0.0, |a, b| a+b);
let avg = sum / (N as f64);
let dev = (
data.clone().into_iter()
.map(|v| (v - avg).powi(2))
.fold(0.0, |a, b| a+b)
/ (N as f64)
).sqrt();
//print formatted output
write!(stdout, "Average of {:25}{:.6}\r\n", vname, avg);
write!(stdout, "Standard deviation of {:14}{:.6}\r\n", vname, dev);
write!(stdout, "\r\n");
}
fn main()
{
@ -196,70 +216,12 @@ fn main()
thread::sleep(time::Duration::from_millis(10));
}
//6.1. Calculate summary statistics
let record_location_N = record_location.len();
let record_location_sum = record_location.clone().into_iter()
.fold(0.0, |a, b| a+b);
let record_location_avg = record_location_sum / (record_location_N as f64);
let record_location_dev = (
record_location.clone().into_iter()
.map(|v| (v - record_location_avg).powi(2))
.fold(0.0, |a, b| a+b)
/ (record_location_N as f64)
).sqrt();
let record_velocity_N = record_velocity.len();
let record_velocity_sum = record_velocity.clone().into_iter()
.fold(0.0, |a, b| a+b);
let record_velocity_avg = record_velocity_sum / (record_velocity_N as f64);
let record_velocity_dev = (
record_velocity.clone().into_iter()
.map(|v| (v - record_velocity_avg).powi(2))
.fold(0.0, |a, b| a+b)
/ (record_velocity_N as f64)
).sqrt();
let record_acceleration_N = record_acceleration.len();
let record_acceleration_sum = record_acceleration.clone().into_iter()
.fold(0.0, |a, b| a+b);
let record_acceleration_avg = record_acceleration_sum / (record_acceleration_N as f64);
let record_acceleration_dev = (
record_acceleration.clone().into_iter()
.map(|v| (v - record_acceleration_avg).powi(2))
.fold(0.0, |a, b| a+b)
/ (record_acceleration_N as f64)
).sqrt();
let record_voltage_N = record_voltage.len();
let record_voltage_sum = record_voltage.clone().into_iter()
.fold(0.0, |a, b| a+b);
let record_voltage_avg = record_voltage_sum / (record_voltage_N as f64);
let record_voltage_dev = (
record_voltage.clone().into_iter()
.map(|v| (v - record_voltage_avg).powi(2))
.fold(0.0, |a, b| a+b)
/ (record_voltage_N as f64)
).sqrt();
//6.2. Print summary statistics
//6 Calculate and print summary statistics
write!(stdout, "{}{}{}", clear::All, cursor::Goto(1, 1), cursor::Show).unwrap();
write!(stdout, "Average of location {:.6}\r\n", record_location_avg);
write!(stdout, "Standard deviation of location {:.6}\r\n", record_location_dev);
write!(stdout, "\r\n");
write!(stdout, "Average of velocity {:.6}\r\n", record_velocity_avg);
write!(stdout, "Standard deviation of velocity {:.6}\r\n", record_velocity_dev);
write!(stdout, "\r\n");
write!(stdout, "Average of acceleration {:.6}\r\n", record_acceleration_avg);
write!(stdout, "Standard deviation of acceleration {:.6}\r\n", record_acceleration_dev);
write!(stdout, "\r\n");
write!(stdout, "Average of voltage {:.6}\r\n", record_voltage_avg);
write!(stdout, "Standard deviation of voltage {:.6}\r\n", record_voltage_dev);
write!(stdout, "\r\n");
variable_summary(&mut stdout, "location".to_string(), record_location);
variable_summary(&mut stdout, "velocity".to_string(), record_velocity);
variable_summary(&mut stdout, "acceleration".to_string(), record_acceleration);
variable_summary(&mut stdout, "voltage".to_string(), record_voltage);
stdout.flush().unwrap();
}

Loading…
Cancel
Save