@@ -2,25 +2,76 @@ use ::day_11::{painting_robot::Robot, parse_input};
2
2
use day_09:: program:: Program ;
3
3
use std:: { sync:: mpsc:: channel, thread:: spawn} ;
4
4
5
- fn main ( ) {
5
+ fn part_01 ( input : & Vec < i64 > ) -> usize {
6
6
let ( b_sender, a_receiver) = channel ( ) ;
7
7
let ( a_sender, b_receiver) = channel ( ) ;
8
8
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 ) ;
11
11
12
12
spawn ( move || {
13
13
program. new_input ( b_receiver) ;
14
14
program. new_output ( b_sender) ;
15
15
program. run ( ) ;
16
16
} ) ;
17
17
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) ) ;
22
24
}
23
25
24
26
#[ cfg( test) ]
25
27
#[ 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
+ }
0 commit comments