Skip to content

Commit 997e8fa

Browse files
committed
feat: added part 1 of day 11
1 parent fa3c9a5 commit 997e8fa

File tree

2 files changed

+66
-11
lines changed

2 files changed

+66
-11
lines changed

day_11/src/main.rs

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,76 @@ use ::day_11::{painting_robot::Robot, parse_input};
22
use day_09::program::Program;
33
use std::{sync::mpsc::channel, thread::spawn};
44

5-
fn main() {
5+
fn part_01(input: &Vec<i64>) -> usize {
66
let (b_sender, a_receiver) = channel();
77
let (a_sender, b_receiver) = channel();
88

9-
let mut program = Program::new(&parse_input(&include_str!("../../input/day_11")));
10-
let mut robot = Robot::new(a_receiver, a_sender);
9+
let mut program = Program::new(input);
10+
let mut robot = Robot::new(a_receiver, a_sender, false);
1111

1212
spawn(move || {
1313
program.new_input(b_receiver);
1414
program.new_output(b_sender);
1515
program.run();
1616
});
1717

18-
let part_01_output = spawn(move || robot.run()).join().unwrap();
19-
println!("part_01, {}", part_01_output);
20-
// let mut robot = Robot::new(&instructions);
21-
// println!("part_01: {:?}", robot.run());
18+
spawn(move || robot.run()).join().unwrap()
19+
}
20+
21+
fn main() {
22+
let input = parse_input(&include_str!("../../input/day_11"));
23+
println!("part_01: {:?}", part_01(&input));
2224
}
2325

2426
#[cfg(test)]
2527
#[allow(dead_code)]
26-
mod tests {}
28+
mod tests {
29+
use super::*;
30+
31+
#[test]
32+
#[ignore]
33+
fn gets_the_same_result_as_part_01() {
34+
let (b_sender, a_receiver) = channel();
35+
let (a_sender, _b_receiver) = channel();
36+
37+
for input in vec![0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, -1] {
38+
b_sender.send(input).unwrap()
39+
}
40+
41+
let mut robot = Robot::new(a_receiver, a_sender, false);
42+
43+
let result = spawn(move || robot.run()).join().unwrap();
44+
45+
assert_eq!(result, 6);
46+
}
47+
48+
#[test]
49+
fn it_does_not_count_the_same_spot_twice() {
50+
let (b_sender, a_receiver) = channel();
51+
let (a_sender, b_receiver) = channel();
52+
53+
let output_thread = spawn(move || {
54+
let mut output = vec![];
55+
loop {
56+
let new_output = match b_receiver.recv() {
57+
Ok(val) => val,
58+
_ => break,
59+
};
60+
&output.push(new_output);
61+
}
62+
output.to_owned()
63+
});
64+
65+
for input in vec![0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, -1] {
66+
b_sender.send(input).unwrap()
67+
}
68+
69+
let mut robot = Robot::new(a_receiver, a_sender, false);
70+
71+
let result = spawn(move || robot.run()).join().unwrap();
72+
73+
assert_eq!(output_thread.join().unwrap(), vec![0, 0, 0, 0, 0, 0, 0]);
74+
75+
assert_eq!(result, 6);
76+
}
77+
}

day_11/src/painting_robot.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ pub struct Robot {
1515
}
1616

1717
impl Robot {
18-
pub fn new(receiver: Receiver<i64>, sender: Sender<i64>) -> Robot {
18+
pub fn new(receiver: Receiver<i64>, sender: Sender<i64>, start_on_white: bool) -> Robot {
1919
let position = Point { x: 0, y: 0 };
2020
let mut visited = HashSet::new();
2121
let mut whites = HashSet::new();
2222

2323
visited.insert(position.clone());
24-
whites.insert(position.clone());
24+
25+
if start_on_white {
26+
whites.insert(position.clone());
27+
}
2528

2629
Robot {
2730
input: receiver,
@@ -64,6 +67,8 @@ impl Robot {
6467
self.whites.insert(self.position.clone());
6568
}
6669

70+
self.visited.insert(self.position.clone());
71+
6772
let next_position = match self.input.recv() {
6873
Ok(0) => 0u8,
6974
Ok(1) => 1u8,
@@ -72,7 +77,6 @@ impl Robot {
7277

7378
self.direction.turn(next_position);
7479
self.move_position();
75-
self.visited.insert(self.position.clone());
7680
}
7781

7882
self.visited.len()

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy