summaryrefslogtreecommitdiff
path: root/bin/init_rust
diff options
context:
space:
mode:
Diffstat (limited to 'bin/init_rust')
-rwxr-xr-xbin/init_rust83
1 files changed, 83 insertions, 0 deletions
diff --git a/bin/init_rust b/bin/init_rust
new file mode 100755
index 0000000..1431b87
--- /dev/null
+++ b/bin/init_rust
@@ -0,0 +1,83 @@
+#!/bin/sh -eu
+
+YEAR=${YEAR:-$(date +%Y)}
+DAY=${DAY:-$(TZ=EST date '+%d')}
+
+GIT_USER=$(git config --get 'user.name')
+GIT_EMAIL=$(git config --get 'user.email')
+
+CARGO=$( sed "s/^#\(.*${DAY}\)/\1/" <"${YEAR}/rust/Cargo.toml")
+echo "${CARGO}" >"${YEAR}/rust/Cargo.toml"
+
+cd "${YEAR}/rust"
+mkdir "day${DAY}" || :
+cd "day${DAY}"
+
+cargo init --bin
+
+cat > 'Cargo.toml' << END_OF_TOML
+[package]
+name = "day${DAY}"
+version = "0.1.0"
+authors = ["${GIT_USER} <${GIT_EMAIL}>"]
+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