diff --git a/Cargo.lock b/Cargo.lock index e785ea0..660f7ad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,16 @@ version = "0.1.0" dependencies = [ "aoc-runner", "aoc-runner-derive", + "regex", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", ] [[package]] @@ -45,6 +55,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + [[package]] name = "proc-macro2" version = "0.4.21" @@ -81,6 +97,35 @@ dependencies = [ "proc-macro2 1.0.47", ] +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + [[package]] name = "ryu" version = "0.2.7" diff --git a/Cargo.toml b/Cargo.toml index 4d0828a..6762aa7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,4 +9,5 @@ bench = false [dependencies] aoc-runner = "0.3.0" -aoc-runner-derive = "0.3.0" \ No newline at end of file +aoc-runner-derive = "0.3.0" +regex = "1.10.2" \ No newline at end of file diff --git a/src/day12.rs b/src/day12.rs new file mode 100644 index 0000000..520f24e --- /dev/null +++ b/src/day12.rs @@ -0,0 +1,24 @@ +use aoc_runner_derive::aoc; +use regex::Regex; + +#[aoc(day12, part1)] +fn part1(input: &str) -> i64 { + Regex::new(r"-?\d+") + .unwrap() + .find_iter(input) + .map(|m| m.as_str().parse::().unwrap()) + .sum() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_example() { + assert_eq!(part1("[1,2,3]"), 6); + assert_eq!(part1("{\"a\":2,\"b\":4}"), 6); + assert_eq!(part1(r"[[[3]]]"), 3); + assert_eq!(part1(r#"{"a":{"b":4},"c":-1}"#), 3); + } +} diff --git a/src/lib.rs b/src/lib.rs index 2ceb10c..50dc1b5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,5 +4,6 @@ extern crate aoc_runner_derive; mod day10; mod day11; +mod day12; aoc_lib! { year = 2015 }