Implement day 11 part 1.

This commit is contained in:
2018-12-11 10:31:23 +01:00
parent eaf1156ae0
commit ff8bc97329
2 changed files with 59 additions and 3 deletions

1
2018/inputs/11.txt Normal file
View File

@@ -0,0 +1 @@
9435

View File

@@ -2,6 +2,15 @@ use std::io::Read;
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)]
pub struct Day11 {}
@@ -12,8 +21,37 @@ impl Day11 {
}
impl Solution for Day11 {
fn part1(&mut self, _input: &mut Read) -> String {
unimplemented!()
fn part1(&mut self, input: &mut Read) -> String {
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 {
@@ -22,4 +60,21 @@ impl Solution for Day11 {
}
#[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()));
}
}