diff options
Diffstat (limited to 'bin/init_rust.sh')
-rwxr-xr-x | bin/init_rust.sh | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/bin/init_rust.sh b/bin/init_rust.sh index 5388a69..681ecf8 100755 --- a/bin/init_rust.sh +++ b/bin/init_rust.sh @@ -20,7 +20,64 @@ cat > 'Cargo.toml' << END_OF_TOML name = "day${DAY}" version = "0.1.0" authors = ["${GIT_USER} <${GIT_EMAIL}>"] -edition = "2018" +edition = "2021" [dependencies] +aoc = { path = "../../../common/rust/aoc" } +anyhow = "1.0" END_OF_TOML + +cat > 'src/main.rs' << END_OF_SRC +use { + anyhow::{ + anyhow, + Context, + Result, + }, + std::{ + env::args, + fs::File, + io::{ + BufRead, + BufReader, + }, + path::Path, + }, +}; + +fn read_input<T: AsRef<Path>>(filename: T) -> Result<Vec<usize>> { + let reader = BufReader::new(File::open(filename)?); + + reader.lines().map( + |v| { + let s = v?; + let n = s.parse()?; + Ok(n) + } + ).collect() +} + +fn part1<'a, I: IntoIterator<Item = &'a usize>>(input: I) -> Result<usize> { + Ok(0) +} + +fn part2<'a, I: IntoIterator<Item = &'a usize>>(input: I) -> Result<usize> { + Ok(0) +} + +fn main() -> Result<()> { + let ( do_part_1, do_part_2 ) = aoc::do_parts(); + + let filename = args().nth(1).ok_or(anyhow!("Missing input filename"))?; + let input = read_input(filename).context("Could not read input")?; + if do_part_1 { + let solution = part1(&input).context("No solution for part 1")?; + println!("Part1, solution found to be: {}", solution); + } + if do_part_2 { + let solution = part2(&input).context("No solution for part 2")?; + println!("Part2, solution found to be: {}", solution); + } + Ok(()) +} +END_OF_SRC |