use perty::{Duration, Pert, Task};
fn main() {
let csv = include_str!("../graphs/wiki_example.csv");
let mut lines = csv.lines();
lines.next();
let mut tasks: Vec<Task> = Vec::new();
for line in lines {
let mut cols = line.split(r#"",""#);
let id = cols.next().unwrap().replace('"', "");
let o: f32 = cols.next().unwrap().parse().unwrap();
let m: f32 = cols.next().unwrap().parse().unwrap();
let p: f32 = cols.next().unwrap().parse().unwrap();
let duration = Duration::Pert {
optimistic: o,
most_likely: m,
pessimistic: p,
};
let deps: Vec<String> = cols
.next()
.unwrap()
.replace('"', "")
.split(",")
.map(|v| v.to_owned())
.filter(|v| !v.is_empty())
.collect();
let task = Task::new(id, deps, duration);
tasks.push(task);
}
for t in tasks.iter() {
println!("{}: {:?}", t.id, t.duration);
}
let nodes = tasks.solve_pert(1_000).unwrap();
for n in nodes.iter() {
println!("{}: {:.2} {}", n.id, n.slack(), n.is_critical());
}
}