1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#[macro_use] extern crate lazy_static; #[macro_use] extern crate log; extern crate unicode_segmentation; extern crate regex; extern crate time; extern crate hyper; extern crate rand; extern crate termion; extern crate protobuf; extern crate libc; mod logging; mod serialization; mod screen; mod node; mod pack; mod meta; mod plot; mod task; mod colors; mod pb; mod config; use std::cmp; use std::collections::HashMap; pub use self::serialization::{serialize_screen, deserialize_screen}; pub use self::screen::Screen; pub use self::node::Node; pub use self::pack::Pack; pub use self::colors::random_fg_color; pub use self::config::{Config, Action}; pub use logging::init_screen_log; pub use meta::Meta; pub type Coords = (u16, u16); pub type NodeID = u64; pub type ScreenDesc = (HashMap<Coords, NodeID>, HashMap<NodeID, Coords>); #[derive(Debug, PartialEq, Eq)] pub enum Dir { L, R, } pub fn distances(c1: Coords, c2: Coords) -> (u16, u16) { let xcost = cmp::max(c1.0, c2.0) - cmp::min(c1.0, c2.0); let ycost = cmp::max(c1.1, c2.1) - cmp::min(c1.1, c2.1); (xcost, ycost) } pub fn cost(c1: Coords, c2: Coords) -> u16 { let (xcost, ycost) = distances(c1, c2); xcost + ycost } pub fn pair_cost(c1: (Coords, Coords), c2: (Coords, Coords)) -> u16 { let (l1, r1) = c1; let (l2, r2) = c2; let possibilities = vec![(l1, l2), (l1, r2), (r1, l2), (r1, r2)]; possibilities.into_iter().map(|(one, two)| cost(one, two)).min().unwrap() }