From 18ea3c01cb137272dd6f5ea67b4c3532096399f3 Mon Sep 17 00:00:00 2001 From: kageru Date: Tue, 8 Dec 2020 11:32:59 +0100 Subject: [PATCH] Make 2020 a single cargo project --- 2020/01/Cargo.toml | 10 ---------- 2020/01/d1.py | 15 --------------- 2020/02/Cargo.toml | 11 ----------- 2020/03/Cargo.toml | 10 ---------- 2020/05/Cargo.toml | 10 ---------- 2020/06/Cargo.toml | 11 ----------- 2020/07/Cargo.toml | 9 --------- 2020/08/Cargo.toml | 9 --------- 2020/{04 => }/Cargo.toml | 5 ++++- 2020/{01/input => inputs/day01} | 0 2020/{02/input => inputs/day02} | 0 2020/{03/input => inputs/day03} | 0 2020/{04/input => inputs/day04} | 0 2020/{05/input => inputs/day05} | 0 2020/{06/input => inputs/day06} | 0 2020/{07/input => inputs/day07} | 0 2020/{08/input => inputs/day08} | 0 2020/setup_day.sh | 14 ++++---------- 2020/{01/src/main.rs => src/bin/day01.rs} | 5 +++-- 2020/{02/src/main.rs => src/bin/day02.rs} | 16 ++++++++-------- 2020/{03/src/main.rs => src/bin/day03.rs} | 6 +++--- 2020/{04/src/main.rs => src/bin/day04.rs} | 3 ++- 2020/{05/src/main.rs => src/bin/day05.rs} | 4 ++-- 2020/{06/src/main.rs => src/bin/day06.rs} | 4 ++-- 2020/{07/src/main.rs => src/bin/day07.rs} | 5 ++--- 2020/{08/src/main.rs => src/bin/day08.rs} | 2 +- 2020/src/main.rs | 3 +++ 27 files changed, 34 insertions(+), 118 deletions(-) delete mode 100644 2020/01/Cargo.toml delete mode 100644 2020/01/d1.py delete mode 100644 2020/02/Cargo.toml delete mode 100644 2020/03/Cargo.toml delete mode 100644 2020/05/Cargo.toml delete mode 100644 2020/06/Cargo.toml delete mode 100644 2020/07/Cargo.toml delete mode 100644 2020/08/Cargo.toml rename 2020/{04 => }/Cargo.toml (78%) rename 2020/{01/input => inputs/day01} (100%) rename 2020/{02/input => inputs/day02} (100%) rename 2020/{03/input => inputs/day03} (100%) rename 2020/{04/input => inputs/day04} (100%) rename 2020/{05/input => inputs/day05} (100%) rename 2020/{06/input => inputs/day06} (100%) rename 2020/{07/input => inputs/day07} (100%) rename 2020/{08/input => inputs/day08} (100%) rename 2020/{01/src/main.rs => src/bin/day01.rs} (87%) rename 2020/{02/src/main.rs => src/bin/day02.rs} (82%) rename 2020/{03/src/main.rs => src/bin/day03.rs} (94%) rename 2020/{04/src/main.rs => src/bin/day04.rs} (96%) rename 2020/{05/src/main.rs => src/bin/day05.rs} (93%) rename 2020/{06/src/main.rs => src/bin/day06.rs} (91%) rename 2020/{07/src/main.rs => src/bin/day07.rs} (95%) rename 2020/{08/src/main.rs => src/bin/day08.rs} (98%) create mode 100644 2020/src/main.rs diff --git a/2020/01/Cargo.toml b/2020/01/Cargo.toml deleted file mode 100644 index 1943cd3..0000000 --- a/2020/01/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "day01" -version = "0.1.0" -authors = ["kageru "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -itertools = "0.9.0" diff --git a/2020/01/d1.py b/2020/01/d1.py deleted file mode 100644 index 332db84..0000000 --- a/2020/01/d1.py +++ /dev/null @@ -1,15 +0,0 @@ -from itertools import combinations - -with open('input') as f: - lines = list(map(int, f.readlines())) - -def p1(lines): - a, b = filter(lambda t: t[0] + t[1] == 2020, combinations(lines, 2)).__next__() - return a * b - -def p2(lines): - a, b, c = filter(lambda t: t[0] + t[1] + t[2] == 2020, combinations(lines, 3)).__next__() - return a * b * c - -print(p1(lines)) -print(p2(lines)) diff --git a/2020/02/Cargo.toml b/2020/02/Cargo.toml deleted file mode 100644 index 80336e0..0000000 --- a/2020/02/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "day02" -version = "0.1.0" -authors = ["kageru "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -itertools = "0.9.0" -text_io = "0.1.8" diff --git a/2020/03/Cargo.toml b/2020/03/Cargo.toml deleted file mode 100644 index 1b3450a..0000000 --- a/2020/03/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "day03" -version = "0.1.0" -authors = ["kageru "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -itertools = "0.9.0" diff --git a/2020/05/Cargo.toml b/2020/05/Cargo.toml deleted file mode 100644 index dbf353b..0000000 --- a/2020/05/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "day05" -version = "0.1.0" -authors = ["kageru "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -itertools = "0.9.0" diff --git a/2020/06/Cargo.toml b/2020/06/Cargo.toml deleted file mode 100644 index d430b86..0000000 --- a/2020/06/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "day06" -version = "0.1.0" -authors = ["kageru "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -itertools = "0.9.0" -reduce = "0.1.3" diff --git a/2020/07/Cargo.toml b/2020/07/Cargo.toml deleted file mode 100644 index 071dc6c..0000000 --- a/2020/07/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "day07" -version = "0.1.0" -authors = ["kageru "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] diff --git a/2020/08/Cargo.toml b/2020/08/Cargo.toml deleted file mode 100644 index 785bc92..0000000 --- a/2020/08/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "day08" -version = "0.1.0" -authors = ["kageru "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] diff --git a/2020/04/Cargo.toml b/2020/Cargo.toml similarity index 78% rename from 2020/04/Cargo.toml rename to 2020/Cargo.toml index 5b2bf8a..9adddad 100644 --- a/2020/04/Cargo.toml +++ b/2020/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "day04" +name = "aoc2020" version = "0.1.0" authors = ["kageru "] edition = "2018" @@ -7,7 +7,10 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +itertools = "0.9.0" lazy_static = "1.4.0" regex = "1.4.2" +text_io = "0.1.8" +# for the day 4 meme solution serde = { version = "1.0.117", features = ["derive"] } serde_yaml = "0.8.14" diff --git a/2020/01/input b/2020/inputs/day01 similarity index 100% rename from 2020/01/input rename to 2020/inputs/day01 diff --git a/2020/02/input b/2020/inputs/day02 similarity index 100% rename from 2020/02/input rename to 2020/inputs/day02 diff --git a/2020/03/input b/2020/inputs/day03 similarity index 100% rename from 2020/03/input rename to 2020/inputs/day03 diff --git a/2020/04/input b/2020/inputs/day04 similarity index 100% rename from 2020/04/input rename to 2020/inputs/day04 diff --git a/2020/05/input b/2020/inputs/day05 similarity index 100% rename from 2020/05/input rename to 2020/inputs/day05 diff --git a/2020/06/input b/2020/inputs/day06 similarity index 100% rename from 2020/06/input rename to 2020/inputs/day06 diff --git a/2020/07/input b/2020/inputs/day07 similarity index 100% rename from 2020/07/input rename to 2020/inputs/day07 diff --git a/2020/08/input b/2020/inputs/day08 similarity index 100% rename from 2020/08/input rename to 2020/inputs/day08 diff --git a/2020/setup_day.sh b/2020/setup_day.sh index add3ced..aa7f9dc 100755 --- a/2020/setup_day.sh +++ b/2020/setup_day.sh @@ -1,16 +1,10 @@ #!/bin/sh today=$(date +%d) -mkdir "$today" -cd "$today" -cargo init --name "day$today" -echo 'Initialized cargo project' -cargo add itertools - # this assumes that your puzzle input is already in your clipboard -xsel -b > input +xsel -b > inputs/$today # add trailing newline if necessary -sed -i -e '$a\' input +sed -i -e '$a\' inputs/$today echo ' #![feature(test)] @@ -18,7 +12,7 @@ extern crate test; use std::env; fn read_input() -> String { - std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("input"))).unwrap() + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day'$today'"))).unwrap() } fn parse_input(raw: &str) -> Vec { @@ -38,4 +32,4 @@ mod tests { const TEST_INPUT: &str = ""; -}' > src/main.rs +}' > src/day$today.rs diff --git a/2020/01/src/main.rs b/2020/src/bin/day01.rs similarity index 87% rename from 2020/01/src/main.rs rename to 2020/src/bin/day01.rs index 651bbb1..36c3c13 100644 --- a/2020/01/src/main.rs +++ b/2020/src/bin/day01.rs @@ -1,9 +1,10 @@ -#![feature(test,bool_to_option)] +#![feature(test, bool_to_option)] extern crate test; use itertools::Itertools; +use std::env; fn read_input() -> Vec { - std::fs::read_to_string("input") + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day01"))) .unwrap() .lines() .filter_map(|l| l.parse().ok()) diff --git a/2020/02/src/main.rs b/2020/src/bin/day02.rs similarity index 82% rename from 2020/02/src/main.rs rename to 2020/src/bin/day02.rs index 2aa330d..581ff33 100644 --- a/2020/02/src/main.rs +++ b/2020/src/bin/day02.rs @@ -1,7 +1,7 @@ #![feature(test)] extern crate test; use itertools::Itertools; -use std::ops::RangeInclusive; +use std::{env, ops::RangeInclusive}; use text_io::scan; #[derive(Debug)] @@ -37,12 +37,16 @@ impl PasswordVerification { let pw = self.password.as_bytes(); let (first, second) = (*self.required_quantity.start(), *self.required_quantity.end()); // 1-based indexing :reeeeeee: - (pw[first-1] == self.required_char as u8) ^ (pw[second-1] == self.required_char as u8) + (pw[first - 1] == self.required_char as u8) ^ (pw[second - 1] == self.required_char as u8) } } fn read_input() -> Vec { - std::fs::read_to_string("input").unwrap().lines().map_into().collect() + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day02"))) + .unwrap() + .lines() + .map_into() + .collect() } fn main() { @@ -71,11 +75,7 @@ mod tests { #[test] fn test_part2() { let pws: Vec = TEST_INPUT.lines().map_into().collect_vec(); - let pws = pws - .into_iter() - .filter(|pw| pw.is_valid_part2()) - .map(|pw| pw.password) - .collect_vec(); + let pws = pws.into_iter().filter(|pw| pw.is_valid_part2()).map(|pw| pw.password).collect_vec(); assert_eq!(pws, vec![String::from("abcde")]); } } diff --git a/2020/03/src/main.rs b/2020/src/bin/day03.rs similarity index 94% rename from 2020/03/src/main.rs rename to 2020/src/bin/day03.rs index 8fbb409..33bc233 100644 --- a/2020/03/src/main.rs +++ b/2020/src/bin/day03.rs @@ -2,7 +2,7 @@ #![feature(test)] extern crate test; use itertools::Itertools; -use std::iter; +use std::{env, iter}; #[derive(Debug, PartialEq, Copy, Clone)] enum Tile { @@ -29,7 +29,7 @@ impl From for Tile { } fn read_input() -> String { - std::fs::read_to_string("input").unwrap() + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day03"))).unwrap() } fn parse_input(raw: &str) -> Forest { @@ -50,7 +50,7 @@ fn count_trees(forest: &Forest, step_right: usize, step_down: usize) -> usize { y + step_down, Some(x + step_right) .filter(|&it| it < forest[0].len()) - .unwrap_or_else(||(x + step_right) - forest[0].len()), + .unwrap_or_else(|| (x + step_right) - forest[0].len()), )) }) .map_while(|(y, x)| forest.get(y).map(|r| r[x])) diff --git a/2020/04/src/main.rs b/2020/src/bin/day04.rs similarity index 96% rename from 2020/04/src/main.rs rename to 2020/src/bin/day04.rs index 587c590..a85548b 100644 --- a/2020/04/src/main.rs +++ b/2020/src/bin/day04.rs @@ -3,6 +3,7 @@ extern crate test; use lazy_static::lazy_static; use regex::Regex; use serde::{Deserialize, Serialize}; +use std::env; #[derive(Serialize, Deserialize, Debug, Clone)] struct Passport { @@ -17,7 +18,7 @@ struct Passport { } fn read_input() -> String { - std::fs::read_to_string("input").unwrap() + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day04"))).unwrap() } /// When I first saw the input and puzzle, I thought diff --git a/2020/05/src/main.rs b/2020/src/bin/day05.rs similarity index 93% rename from 2020/05/src/main.rs rename to 2020/src/bin/day05.rs index 8773b80..9df35e1 100644 --- a/2020/05/src/main.rs +++ b/2020/src/bin/day05.rs @@ -1,7 +1,7 @@ #![feature(test, map_first_last)] extern crate test; use itertools::Itertools; -use std::collections::BTreeSet; +use std::{collections::BTreeSet, env}; const NUM_ROWS: usize = 128; const NUM_COLS: usize = 8; @@ -50,7 +50,7 @@ fn main() { } fn read_input() -> String { - std::fs::read_to_string("input").unwrap() + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day05"))).unwrap() } #[cfg(test)] diff --git a/2020/06/src/main.rs b/2020/src/bin/day06.rs similarity index 91% rename from 2020/06/src/main.rs rename to 2020/src/bin/day06.rs index d393e0e..728d3e4 100644 --- a/2020/06/src/main.rs +++ b/2020/src/bin/day06.rs @@ -1,7 +1,7 @@ #![feature(test)] extern crate test; use std::{ - collections::HashSet, ops::{BitAnd, BitOr} + collections::HashSet, env, ops::{BitAnd, BitOr} }; fn main() { @@ -11,7 +11,7 @@ fn main() { } fn read_input() -> String { - std::fs::read_to_string("input").unwrap() + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day06"))).unwrap() } fn parse_input(raw: &str) -> Vec>> { diff --git a/2020/07/src/main.rs b/2020/src/bin/day07.rs similarity index 95% rename from 2020/07/src/main.rs rename to 2020/src/bin/day07.rs index 044dda9..90cca2a 100644 --- a/2020/07/src/main.rs +++ b/2020/src/bin/day07.rs @@ -1,7 +1,6 @@ #![feature(test)] -use std::collections::HashSet; +use std::{collections::HashSet, env}; extern crate test; -use std::env; const COLOR: &str = "shiny gold"; @@ -47,7 +46,7 @@ impl From<&str> for Bag { } fn read_input() -> String { - std::fs::read_to_string(env::args().nth(1).unwrap_or(String::from("input"))).unwrap() + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day07"))).unwrap() } fn part1<'a, 'b>(bags: &'b [Bag], color: &str, seen: &'a mut HashSet<&'b str>) -> &'a mut HashSet<&'b str> { diff --git a/2020/08/src/main.rs b/2020/src/bin/day08.rs similarity index 98% rename from 2020/08/src/main.rs rename to 2020/src/bin/day08.rs index 1891869..b252e1a 100644 --- a/2020/08/src/main.rs +++ b/2020/src/bin/day08.rs @@ -10,7 +10,7 @@ enum Command { } fn read_input() -> String { - std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("input"))).unwrap() + std::fs::read_to_string(env::args().nth(1).filter(|n| n != "--bench").unwrap_or(String::from("inputs/day08"))).unwrap() } fn parse_input(raw: &str) -> Vec { diff --git a/2020/src/main.rs b/2020/src/main.rs new file mode 100644 index 0000000..016ef1c --- /dev/null +++ b/2020/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Please use cargo run dayXX to run any of the days."); +}