This commit is contained in:
2016-12-22 08:55:08 +01:00
parent 09f781d9e5
commit add430bbef
5 changed files with 1039 additions and 0 deletions

68
2016/20/src/main.rs Normal file
View File

@@ -0,0 +1,68 @@
use std::ops::Range;
use std::cmp;
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let input = stdin.lock().lines()
.filter_map(|line| line.ok())
.map(|line| {
let parts = line.split('-')
.map(|part| part.parse::<usize>().unwrap())
.collect::<Vec<usize>>();
(parts[0]..parts[1] + 1)
});
let mut ranges: Vec<Range<usize>> = Vec::new();
for range in input {
let mut left = range;
while let Some(index) = ranges.iter()
.position(|right| {
left.start >= right.start && left.start <= right.end ||
left.end >= right.start && left.end <= right.end ||
right.start >= left.start && right.start <= left.end ||
right.end >= left.start && right.end <= left.end
})
{
let right = ranges.remove(index);
left = cmp::min(left.start, right.start)..cmp::max(left.end, right.end);
}
ranges.push(left);
}
let mut value = 0;
for range in ranges.iter() {
if value >= range.start && value < range.end {
value = range.end;
}
}
println!("min={}", value);
let mut allowed = 4294967295;
for range in ranges.iter() {
allowed -= range.end - range.start;
}
println!("allowed={}", allowed + 1);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn example_01() {
}
}