-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate.rs
58 lines (49 loc) · 1.47 KB
/
template.rs
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
#![allow(unused)]
#![allow(dead_code)]
fn part1(lines: &Vec<&str>) -> Option<usize> {
//TODO: implement me
None
}
fn part2(lines: &Vec<&str>) -> Option<usize> {
//TODO: implement me
None
}
fn main() {
use std::fs;
use std::env;
use std::time::Instant;
let args: Vec<String> = env::args().collect();
let infile = args.get(1).unwrap_or_else(|| {
println!("Usage: {} <puzzle input>", args[0]);
std::process::exit(1);
});
let contents = fs::read_to_string(infile)
.expect("Could not read in file");
let lines: Vec<&str> = contents.lines().collect();
// execute part 1 and part 2, print their results if they exist
// later parts may follow, so we loop over the part functions
let parts = [part1, part2];
for (index, part) in parts.iter().enumerate() {
let partstart = Instant::now();
let result = part(&lines);
match result {
Some(result) => println!("Part {}: {}\t({:?})", index+1, result, partstart.elapsed()),
None => println!("Part {}: No result", index+1),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
static TESTINPUT: &str = "CHANGEME";
#[test]
fn test_part1() {
let lines: Vec<&str> = TESTINPUT.lines().collect();
assert_eq!(Some(1337), part1(&lines));
}
#[test]
fn test_part2() {
let lines: Vec<&str> = TESTINPUT.lines().collect();
assert_eq!(Some(13337), part2(&lines));
}
}