commit dfb79ce0ee1145604efb43fe998c60f9ccddb522 Author: Ishan Jain Date: Sat Dec 31 22:53:11 2022 +0530 Added day 1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..cb2c96c --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aoc2015" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..2a1dc6c --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,256 @@ +[package] +name = "aoc2015" +version = "0.1.0" +edition = "2021" + +[dependencies] + + +[[bin]] +name = "d1-1" +path = "src/day1/1.rs" + + +[[bin]] +name = "d1-2" +path = "src/day1/2.rs" + + +[[bin]] +name = "d2-1" +path = "src/day2/1.rs" + + +[[bin]] +name = "d2-2" +path = "src/day2/2.rs" + + +[[bin]] +name = "d3-1" +path = "src/day3/1.rs" + + +[[bin]] +name = "d3-2" +path = "src/day3/2.rs" + + +[[bin]] +name = "d4-1" +path = "src/day4/1.rs" + + +[[bin]] +name = "d4-2" +path = "src/day4/2.rs" + + +[[bin]] +name = "d5-1" +path = "src/day5/1.rs" + + +[[bin]] +name = "d5-2" +path = "src/day5/2.rs" + + +[[bin]] +name = "d6-1" +path = "src/day6/1.rs" + + +[[bin]] +name = "d6-2" +path = "src/day6/2.rs" + + +[[bin]] +name = "d7-1" +path = "src/day7/1.rs" + + +[[bin]] +name = "d7-2" +path = "src/day7/2.rs" + + +[[bin]] +name = "d8-1" +path = "src/day8/1.rs" + + +[[bin]] +name = "d8-2" +path = "src/day8/2.rs" + + +[[bin]] +name = "d9-1" +path = "src/day9/1.rs" + + +[[bin]] +name = "d9-2" +path = "src/day9/2.rs" + + +[[bin]] +name = "d10-1" +path = "src/day10/1.rs" + + +[[bin]] +name = "d10-2" +path = "src/day10/2.rs" + + +[[bin]] +name = "d11-1" +path = "src/day11/1.rs" + + +[[bin]] +name = "d11-2" +path = "src/day11/2.rs" + + +[[bin]] +name = "d12-1" +path = "src/day12/1.rs" + + +[[bin]] +name = "d12-2" +path = "src/day12/2.rs" + + +[[bin]] +name = "d13-1" +path = "src/day13/1.rs" + + +[[bin]] +name = "d13-2" +path = "src/day13/2.rs" + + +[[bin]] +name = "d14-1" +path = "src/day14/1.rs" + + +[[bin]] +name = "d14-2" +path = "src/day14/2.rs" + + +[[bin]] +name = "d15-1" +path = "src/day15/1.rs" + + +[[bin]] +name = "d15-2" +path = "src/day15/2.rs" + + +[[bin]] +name = "d16-1" +path = "src/day16/1.rs" + + +[[bin]] +name = "d16-2" +path = "src/day16/2.rs" + + +[[bin]] +name = "d17-1" +path = "src/day17/1.rs" + + +[[bin]] +name = "d17-2" +path = "src/day17/2.rs" + + +[[bin]] +name = "d18-1" +path = "src/day18/1.rs" + + +[[bin]] +name = "d18-2" +path = "src/day18/2.rs" + + +[[bin]] +name = "d19-1" +path = "src/day19/1.rs" + + +[[bin]] +name = "d19-2" +path = "src/day19/2.rs" + + +[[bin]] +name = "d20-1" +path = "src/day20/1.rs" + + +[[bin]] +name = "d20-2" +path = "src/day20/2.rs" + + +[[bin]] +name = "d21-1" +path = "src/day21/1.rs" + + +[[bin]] +name = "d21-2" +path = "src/day21/2.rs" + + +[[bin]] +name = "d22-1" +path = "src/day22/1.rs" + + +[[bin]] +name = "d22-2" +path = "src/day22/2.rs" + + +[[bin]] +name = "d23-1" +path = "src/day23/1.rs" + + +[[bin]] +name = "d23-2" +path = "src/day23/2.rs" + + +[[bin]] +name = "d24-1" +path = "src/day24/1.rs" + + +[[bin]] +name = "d24-2" +path = "src/day24/2.rs" + + +[[bin]] +name = "d25-1" +path = "src/day25/1.rs" + + +[[bin]] +name = "d25-2" +path = "src/day25/2.rs" diff --git a/src/day1/1.rs b/src/day1/1.rs new file mode 100644 index 0000000..aed0487 --- /dev/null +++ b/src/day1/1.rs @@ -0,0 +1,50 @@ +#![feature(test)] +extern crate test; + +const INPUTS: [&str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")]; + +fn parse(input: &'static str) -> Vec { + input.trim().chars().collect() +} + +fn solution(input: Vec) -> i64 { + let mut answer = 0; + + for c in input { + match c { + '(' => answer += 1, + ')' => answer -= 1, + _ => unreachable!(), + } + } + + answer +} + +fn main() { + for input in INPUTS.iter() { + let output = parse(input); + let output = solution(output); + println!("{output}"); + } +} + +#[test] +fn solution_test() { + assert_eq!(solution("(())".chars().collect()), 0); + assert_eq!(solution("()()".chars().collect()), 0); + assert_eq!(solution("(((".chars().collect()), 3); + assert_eq!(solution("(()(()(".chars().collect()), 3); + assert_eq!(solution("))(((((".chars().collect()), 3); + assert_eq!(solution("())".chars().collect()), -1); + assert_eq!(solution(")())())".chars().collect()), -3); +} + +#[bench] +fn solution_bench(b: &mut test::Bencher) { + b.iter(|| { + let input = parse(INPUTS[1]); + let result = solution(input); + test::black_box(result); + }) +} diff --git a/src/day1/2.rs b/src/day1/2.rs new file mode 100644 index 0000000..68f0ee0 --- /dev/null +++ b/src/day1/2.rs @@ -0,0 +1,49 @@ +#![feature(test)] +extern crate test; + +const INPUTS: [&str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")]; + +fn parse(input: &'static str) -> Vec { + input.trim().chars().collect() +} + +fn solution(input: Vec) -> usize { + let mut answer = 0; + + for (i, c) in input.into_iter().enumerate() { + match c { + '(' => answer += 1, + ')' => answer -= 1, + _ => unreachable!(), + } + + if answer < 0 { + return i + 1; + } + } + + 0 +} + +fn main() { + for input in INPUTS.iter() { + let output = parse(input); + let output = solution(output); + println!("{output}"); + } +} + +#[test] +fn solution_test() { + assert_eq!(solution(")".chars().collect()), 1); + assert_eq!(solution("()())".chars().collect()), 5); +} + +#[bench] +fn solution_bench(b: &mut test::Bencher) { + b.iter(|| { + let input = parse(INPUTS[1]); + let result = solution(input); + test::black_box(result); + }) +} diff --git a/src/day1/input.txt b/src/day1/input.txt new file mode 100644 index 0000000..73e014e --- /dev/null +++ b/src/day1/input.txt @@ -0,0 +1 @@ +(((())))()((((((((())()(()))(()((((()(()(((()((()((()(()()()()()))(((()(()((((((((((())(()()((())()(((())))()(()(()((()(()))(()()()()((()((()(((()()(((((((()()())()((((()()(((((()(())()(())((())()()))()(((((((())(()())(()(((())(()))((())))(()((()())))()())((((())))(()(((((()(())(((()()((()((()((((((((((())(()())))))()))())()()((((()()()()()()((((((())())(((()())()((()()(((()()()))(((((()))(((()(()()()(()(()(((())()))(()(((()((())()(()())())))((()()()(()()(((()))(((()((((()(((((()()(()())((()())())(()((((((()(()()))((((()))))())((())()()((()(()))))((((((((()))(()()(((())())(())()((()()()()((()((()((()()(((())))(()((())()((((((((()((()(()()(((())())())))(())())))()((((()))))))())))()()))()())((()())()((()()()))(()()(((()(())((((())())((((((((()()()()())))()()()((((()()))))))()((((()(((()))(()()())))((()()(((()))()()())())(((())((()()(())()()()(((())))))()())((()))()))((())()()())()())()()(()))())))())()))(())((()(())))(()(())(()))))(()(())())(()(())(()(()))))((()())()))()((((()()))))())))()()())((())()((()()()))()(((()(()))))(())()()))(((()())))))))))(((())))()))())()))))()()(((())))))))()(()()(()))((()))))((())))((()((())))())))()()(()))())()(()((()())(()(()()())())(()()))()))))(()())()()))()()()()))(()(()(()))))))()(()))()))()()(()((())(()(())))()(((())(())())))))()(()(()))))()))(()()()(())()(()(())))()))))()()(((((())))))())()())())())()())()))))()))))))))())()()()()()()())))()))((())()))())))()((())()))))()))())))))))())()()()))()()(()((((()(((((((()(())((()())((()()))()))))(())))()()()(())((())()())))(())))(())))(((()()))()(())(((()(()))((())))())()))((((()))())()))))))))()(())())))(()))()(()()))())()()(())())))())()()(()())))()((()())(()(())(())))))))))))))(()))))()))))))()()())(()(((((()(()())))())()))(()))()))(()()))()())(()))())()(())((()()))))))())))())()(((())))(()(()))()()))()(()))))))((()())(()))))))()())))()()))))))))((((((((()()()(()))))))()())))())))()()((())()))((())(())))())())))()()()((()((()(())))())()(())))))))))()())))()()()()()()))()))((())())(()(()))))))(()()))()))(())))()))))))))))))(()))))))))()))))()))()())()))()()))))))()))))((()))))(()))())()(())))(()())((((()())))()))))(()))()(()()(())))))())))))()))))))())))())))))())))())())))())(()))))(())()(())))())()))((()()))))))())))((())))))))())))(())))))()()())))))())))))()))))))()))()()()(()(((()())())())(()))())))))((()(())(()))))))))(())))()()()())())(()))))()()()))()))())())())()(())))()(((()((((())))))))()))))))))))))))))))))((())()())(()))))()()))))))(()()(())())))())))((())))((())))))))))))))()))))()(()))))))())))))()))(()()())(()())))))))))()))))))(())))))()()))()())(((())))()))(()))))))))(())())))())))())())())()()))((())()(())()())()))()())(())(()))))()())))(()(((()))))))()(()())()()()))()))))))))()()()(())()())()(((((()))()())())(()))))()()()(())))())))()((()())))(()))())()(()())())(()))()()))((()()))((()()()()())))(())()))(()(())))((()()))))))))())))))))())()()))))))))))))))))(())()(())(())()())())()))()(()))))())())))))()())()(()))()()(())))(())())))))(()))))))))))))))())())(())(())))(((()))()))))())((())(()))())))))))())))))())))()))()))))))))))))())()))))()))))((()))(())))()(())))(())()))()))())))())))))))()(()())())))()()())))(())))))(()))))))))))))(()))()))()))())))(((()()()(())((()())))()())(((()))(())()))((()()()())))())(())(()))))()(((((())))(()))())())))))))((((()()()))())())()(()(()())))))))))()())())))(())))()())(((()(())())()()))())())))))))((()())((()()(()))(()(())))()))()))(()))(()))()()(()(((())((((()))()(()))((())()(()(()())()(()))()())))))(()))()))())()())))())))(())))((())(()())))))()))(())(()))()())()(()()((()(()))))))()(())(()())(())()))(((())()))(()()(()()()))))(()(())))()))))())))))())(()()()()()()(((())))(()()))()((())(((((()()())))(()))(()))()()))(((())())()(((()()()()))))(()))(())())))()())(()()())())))))))()))))((())))()())(()))(()(()))())))))())(())))))()()())())()))()()(())))(()))(())((((((())(()))(()))())()))(()()(())))()))(()()))()))()(())))(())))((()(()))(())()()())())))(((()()())(())()))))))()(((()(((((()()(((())(())))())()((()))))((()())()(())(((())))(((()((()(()(()))(()()))())(()))(())(())))()))))))((((()))()((((()(()))()))()()))))()(()(()))()(()((()(((()(()()(((()))))()(((()(()(()(((()(()())())()()(()(()())())(()((((())(()))()))(((((()()())(())()((()()())))()()(((()()))()((((((((()(())))())((()))))(())))(()))))((()((((()()(())(((((()))(((((((((((((()())))((((()(((()((())())()))((()))()(()()((()()()()(()()(()(()(((())()(()((((((()((()()((())()((((()((()()(()()())((()()()((()((())()(()(((()((())((((())(()))((()(()))(()())()((((((((()(((((((((((()))(()(((()(()()()((((())((())()())()))(())((())(()))(((()((()(())))(()))))((()()))))((((()(()(()())(()(())((((((((()((((()((()(((((()))())()(()))(()()((()(())(((((()(())()(((((()()))))))()(((())()(()()((((())()((())((()(((())(((()))((()()((((()(())))))((()((((()((()((()(((())((()))(((((((()(((()((((((((())()))((((())(((((()((((((((()(((()((()(((()()(((()((((((()()(()((((((((()()(()(()(())((((()())()))))(((()))((((())((((()())((()(())()((()((((((()((((((()(())))()())(((())())())()(())()(()())((()()((((())((((((())(()(((((()((((())()((((()(()(())(()())(((())()((())((((()))()((((((())(()(((()(((()((((((()(((()))(()()())())((()((()())()((((())(((()(()(((((((((())(())))()((()()()()(())((()))(((((((()(((((((((()(()))))(()((((((((()((((()((()()((((((()()(((((((()(()(())()(())((()()()((()(((((()())()(((((()())()()((()(()())(()()()(((()()(((((()((((((()()((()(()()()((((((((((((()((((((((()()(((()())))()(((()()(())())((((()((((()((((()()()(())(())((()(()(((((((((((((((()(())(())))))()()))((()(((()(())((()(((()(()()((((()()(((()(((()(((((()()((()(()(((()))((((((()((((((((()((()((())(((((()(((())(())())((()()))((((())()()((()(((()(((((()()(((()))(((()(()(((((((((((((()))((((((((()(((()))))())((((((((((((())((())((()())(((())((())(()((((((((((()(((())((()()(()((())(((((((((((()))((((((((((((()(()())((()((()((()(()(((()((((((((()()(()((()(()(((()))((()))(((((((((((((()(())((((((())(((()(())(()(()(()((()()))((((()((((()((((())))())((((()((((()))((((((()((((((()((()(((())))((())(()))(()((()((((()((()(((()()))((((()()()(((((((())(((())(()))())((((()())(((()(((((((((((()(()(()((()(((((((((((((((()()((((()((((((((()(((()()((()((((()))(((()(())((((((()((((())()((((()((()))(())()(()(((()((())())((((((()(()(())())(((())(()(()())(((((()((()((())()())(())))(((()(())))))))(((()(((()))()((()(((()()((()())()()))())))(((()))(()(((()(((((((((()(()(((((()()(((()())()()))))()(((()))(((()(()(()(()(()))()(())()))(()(((())))(()))))))))))(())((()((())((()(())()(())((()()((((()()((()()))((())(((()((()(())(())))()(()(((((()((()))())()(((((()()(((()(()((((((())(()))(())()))((()(()()))(())())()))(((())))(()((()(((())(())())))((()()((((((((((((((()((()(()()(()(((()))())()()((()()()(())(()))(()())(((())((())()(())()()(()()(())))((()(((()))))(((()()(()()))())((()((())()))((((()()()())((())))(((()(())(((((()(((((()((()(()((((()()(((()()()(((()())(((()()((((())(()))(((()))(())())((()))(((()((()))(((()()((())((()(((((()((((()()())((()))()((((()((()(()()()( \ No newline at end of file diff --git a/src/day1/sample.txt b/src/day1/sample.txt new file mode 100644 index 0000000..161ab0d --- /dev/null +++ b/src/day1/sample.txt @@ -0,0 +1 @@ +)())())