Day 12 part 2.
This commit is contained in:
7
Cargo.lock
generated
7
Cargo.lock
generated
@@ -8,6 +8,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"aoc-runner",
|
"aoc-runner",
|
||||||
"aoc-runner-derive",
|
"aoc-runner-derive",
|
||||||
|
"json",
|
||||||
"regex",
|
"regex",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -55,6 +56,12 @@ version = "0.4.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
|
checksum = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "json"
|
||||||
|
version = "0.12.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.7.1"
|
version = "2.7.1"
|
||||||
|
|||||||
@@ -10,4 +10,5 @@ bench = false
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
aoc-runner = "0.3.0"
|
aoc-runner = "0.3.0"
|
||||||
aoc-runner-derive = "0.3.0"
|
aoc-runner-derive = "0.3.0"
|
||||||
regex = "1.10.2"
|
regex = "1.10.2"
|
||||||
|
json = "0.12.4"
|
||||||
27
src/day12.rs
27
src/day12.rs
@@ -1,4 +1,5 @@
|
|||||||
use aoc_runner_derive::aoc;
|
use aoc_runner_derive::aoc;
|
||||||
|
use json::{parse, JsonValue};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
#[aoc(day12, part1)]
|
#[aoc(day12, part1)]
|
||||||
@@ -10,6 +11,32 @@ fn part1(input: &str) -> i64 {
|
|||||||
.sum()
|
.sum()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[aoc(day12, part2)]
|
||||||
|
fn part2(input: &str) -> i64 {
|
||||||
|
let json = parse(input).unwrap();
|
||||||
|
sum(&json)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sum(json: &JsonValue) -> i64 {
|
||||||
|
match json {
|
||||||
|
JsonValue::Null => 0,
|
||||||
|
JsonValue::Short(_) => 0,
|
||||||
|
JsonValue::String(_) => 0,
|
||||||
|
JsonValue::Number(_) => json.as_i64().unwrap(),
|
||||||
|
JsonValue::Boolean(_) => 0,
|
||||||
|
JsonValue::Object(o) => {
|
||||||
|
if o.iter().any(|(_, value)| {
|
||||||
|
value.is_string() && Some("red") == value.as_str()
|
||||||
|
}) {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
o.iter().map(|(_key, value)| sum(value)).sum()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JsonValue::Array(a) => a.iter().map(|e| sum(e)).sum(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
Reference in New Issue
Block a user