rustgym 0.2.0

rustgym solutions
Documentation
use std::collections::BTreeMap;

type Interval = (i32, i32);
type Center = i32;

#[derive(Default)]
struct MyCalendar {
    btm: BTreeMap<Center, Interval>,
}

impl MyCalendar {
    fn new() -> Self {
        let btm: BTreeMap<Center, Interval> = BTreeMap::new();
        MyCalendar { btm }
    }

    fn book(&mut self, start: i32, end: i32) -> bool {
        let center = start + end;
        if let Some((_, &(_, last_end))) = self.btm.range(..=center).next_back() {
            if start < last_end {
                return false;
            }
        }
        if let Some((_, &(first_start, _))) = self.btm.range(center..).next() {
            if first_start < end {
                return false;
            }
        }
        self.btm.insert(center, (start, end));
        true
    }
}

#[test]
fn test() {
    let mut obj = MyCalendar::new();
    assert_eq!(obj.book(10, 20), true);
    assert_eq!(obj.book(15, 25), false);
    assert_eq!(obj.book(20, 30), true);
}