mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Implement day 11 part 1.
This commit is contained in:
1
2018/inputs/11.txt
Normal file
1
2018/inputs/11.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
9435
|
||||||
@@ -2,6 +2,15 @@ use std::io::Read;
|
|||||||
|
|
||||||
use common::Solution;
|
use common::Solution;
|
||||||
|
|
||||||
|
fn power_at(serial: i32, (x, y): (i32, i32)) -> i32 {
|
||||||
|
let rack_id = x + 10;
|
||||||
|
let mut power_level = rack_id * y;
|
||||||
|
power_level += serial;
|
||||||
|
power_level *= rack_id;
|
||||||
|
power_level = (power_level % 1000) / 100;
|
||||||
|
power_level - 5
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Day11 {}
|
pub struct Day11 {}
|
||||||
|
|
||||||
@@ -12,8 +21,37 @@ impl Day11 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Solution for Day11 {
|
impl Solution for Day11 {
|
||||||
fn part1(&mut self, _input: &mut Read) -> String {
|
fn part1(&mut self, input: &mut Read) -> String {
|
||||||
unimplemented!()
|
let mut data = String::new();
|
||||||
|
input.read_to_string(&mut data).unwrap();
|
||||||
|
let serial = data.trim().parse().unwrap();
|
||||||
|
|
||||||
|
let mut best_coordinates: Option<(i32, i32)> = None;
|
||||||
|
let mut best_result = 0;
|
||||||
|
|
||||||
|
for y in 1..=298 {
|
||||||
|
let mut running_sum = 0;
|
||||||
|
let mut slide = [0i32;3];
|
||||||
|
|
||||||
|
for x in 1..298 {
|
||||||
|
let new_sum = (y..=(y+2)).map(|y| power_at(serial, (x, y))).sum();
|
||||||
|
running_sum += new_sum;
|
||||||
|
|
||||||
|
if x >= 3 {
|
||||||
|
running_sum -= slide[(x as usize) % 3];
|
||||||
|
if running_sum > best_result {
|
||||||
|
best_result = running_sum;
|
||||||
|
best_coordinates = Some((x - 2, y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slide[(x as usize) % 3] = new_sum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let (x, y) = best_coordinates.unwrap();
|
||||||
|
|
||||||
|
format!("{},{}", x, y)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn part2(&mut self, _input: &mut Read) -> String {
|
fn part2(&mut self, _input: &mut Read) -> String {
|
||||||
@@ -22,4 +60,21 @@ impl Solution for Day11 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {}
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_power_at() {
|
||||||
|
assert_eq!(4, power_at(8, (3, 5)));
|
||||||
|
assert_eq!(-5, power_at(57, (122, 79)));
|
||||||
|
assert_eq!(0, power_at(39, (217, 196)));
|
||||||
|
assert_eq!(4, power_at(71, (101, 153)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sample_part1() {
|
||||||
|
let mut instance = Day11::new();
|
||||||
|
assert_eq!("33,45", instance.part1(&mut b"18".as_ref()));
|
||||||
|
assert_eq!("21,61", instance.part1(&mut b"42".as_ref()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user