Skip to content

Commit 0168e41

Browse files
committed
Seperate parsing
1 parent 7c5d8e2 commit 0168e41

File tree

1 file changed

+63
-66
lines changed

1 file changed

+63
-66
lines changed

src/day8.rs

Lines changed: 63 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,6 @@ fn part1_inner(s: &str) -> u64 {
2626
let mut masts: [ArrayVec<[i32; 4]>; FREQ_RANGE] =
2727
[ArrayVec::from_array_empty([0; 4]); FREQ_RANGE];
2828

29-
let mut antinodes = [false; (SIZE * SIZE) as usize];
30-
let mut total_antinotedes = 0;
31-
32-
let mut set_node = |x, y| {
33-
total_antinotedes += !antinodes[(y * SIZE + x) as usize] as u64;
34-
antinodes[(y * SIZE + x) as usize] = true;
35-
};
36-
3729
// let mut numbers = [0; 5];
3830

3931
for i in unsafe { OneInv::new_unchecked(b'.').iter(s) } {
@@ -43,38 +35,51 @@ fn part1_inner(s: &str) -> u64 {
4335
let f = s[i] - b'0';
4436
let i = i as i32;
4537

46-
let new_x = i % SIZE1;
47-
let new_y = i / SIZE1;
48-
49-
// numbers[masts[f as usize].len()] += 1;
38+
masts[f as usize].push(i);
39+
}
5040

51-
for mast_i in &masts[f as usize] {
52-
let mast_x = mast_i % SIZE1;
53-
let mast_y = mast_i / SIZE1;
41+
let mut antinodes = [false; (SIZE * SIZE) as usize];
42+
let mut total_antinotedes = 0;
5443

55-
let diff_x = mast_x - new_x;
56-
let diff_y = (new_y - mast_y).abs() as i32;
44+
let mut set_node = |x, y| {
45+
total_antinotedes += !antinodes[(y * SIZE + x) as usize] as u64;
46+
antinodes[(y * SIZE + x) as usize] = true;
47+
};
5748

58-
let node_x = mast_x + diff_x;
59-
if node_x >= 0 && node_x < SIZE && mast_y >= diff_y {
60-
let node_y = mast_y - diff_y;
49+
for masts in masts {
50+
for i in 0..masts.len() {
51+
let new_x = masts[i] % SIZE1;
52+
let new_y = masts[i] / SIZE1;
6153

62-
set_node(node_x, node_y);
63-
}
54+
for other_i in 0..masts.len() {
55+
if other_i == i {
56+
continue;
57+
}
58+
let mast_x = masts[other_i] % SIZE1;
59+
let mast_y = masts[other_i] / SIZE1;
6460

65-
let node_x = new_x - diff_x;
66-
if node_x >= 0 && node_x < SIZE && new_y + diff_y < SIZE {
67-
let node_y = new_y + diff_y;
61+
let node_x = mast_x + mast_x - new_x;
62+
let node_y = mast_y + mast_y - new_y;
6863

69-
set_node(node_x, node_y);
64+
if node_x >= 0 && node_x < SIZE && node_y >= 0 && node_y < SIZE {
65+
set_node(node_x, node_y);
66+
}
7067
}
7168
}
72-
73-
masts[f as usize].push(i);
7469
}
7570

76-
// for i in 0..5 {
77-
// println!("{i}: {}", numbers[i]);
71+
// for y in 0..SIZE {
72+
// for x in 0..SIZE {
73+
// print!(
74+
// "{}",
75+
// if antinodes[(y * SIZE + x) as usize] {
76+
// '#'
77+
// } else {
78+
// s[(y * SIZE1 + x) as usize] as char
79+
// }
80+
// )
81+
// }
82+
// println!("");
7883
// }
7984

8085
total_antinotedes
@@ -94,12 +99,7 @@ fn part2_inner(s: &str) -> u64 {
9499
let mut masts: [ArrayVec<[i32; 4]>; FREQ_RANGE] =
95100
[ArrayVec::from_array_empty([0; 4]); FREQ_RANGE];
96101

97-
let mut antinodes = [false; (SIZE * SIZE) as usize];
98-
let mut total_antinotedes = 0;
99-
let mut set_node = |x, y| {
100-
total_antinotedes += !antinodes[(y * SIZE + x) as usize] as u64;
101-
antinodes[(y * SIZE + x) as usize] = true;
102-
};
102+
// let mut numbers = [0; 5];
103103

104104
for i in unsafe { OneInv::new_unchecked(b'.').iter(s) } {
105105
if s[i] == b'\n' {
@@ -108,44 +108,41 @@ fn part2_inner(s: &str) -> u64 {
108108
let f = s[i] - b'0';
109109
let i = i as i32;
110110

111-
let new_x = i % SIZE1;
112-
let new_y = i / SIZE1;
113-
for mast_i in &masts[f as usize] {
114-
let mast_x = mast_i % SIZE1;
115-
let mast_y = mast_i / SIZE1;
116-
117-
let o_diff_x = mast_x - new_x;
118-
let o_diff_y = (new_y - mast_y).abs() as i32;
119-
120-
for k in 0.. {
121-
let diff_x = o_diff_x * k;
122-
let diff_y = o_diff_y * k;
123-
124-
let mut new_node = false;
111+
masts[f as usize].push(i);
112+
}
125113

126-
let node_x = mast_x + diff_x;
127-
if node_x >= 0 && node_x < SIZE && mast_y >= diff_y {
128-
let node_y = mast_y - diff_y;
114+
let mut antinodes = [false; (SIZE * SIZE) as usize];
115+
let mut total_antinotedes = 0;
129116

130-
new_node = true;
131-
set_node(node_x, node_y);
132-
}
117+
let mut set_node = |x, y| {
118+
total_antinotedes += !antinodes[(y * SIZE + x) as usize] as u64;
119+
antinodes[(y * SIZE + x) as usize] = true;
120+
};
133121

134-
let node_x = new_x - diff_x;
135-
if node_x >= 0 && node_x < SIZE && new_y + diff_y < SIZE {
136-
let node_y = new_y + diff_y;
122+
for masts in masts {
123+
for i in 0..masts.len() {
124+
let new_x = masts[i] % SIZE1;
125+
let new_y = masts[i] / SIZE1;
137126

138-
new_node = true;
139-
set_node(node_x, node_y);
127+
for other_i in 0..masts.len() {
128+
if other_i == i {
129+
continue;
140130
}
141-
142-
if !new_node {
143-
break;
131+
let mast_x = masts[other_i] % SIZE1;
132+
let mast_y = masts[other_i] / SIZE1;
133+
134+
for k in 0.. {
135+
let node_x = mast_x + (mast_x - new_x) * k;
136+
let node_y = mast_y + (mast_y - new_y) * k;
137+
138+
if node_x >= 0 && node_x < SIZE && node_y >= 0 && node_y < SIZE {
139+
set_node(node_x, node_y);
140+
} else {
141+
break;
142+
}
144143
}
145144
}
146145
}
147-
148-
masts[f as usize].push(i);
149146
}
150147

151148
total_antinotedes

0 commit comments

Comments
 (0)