day3 part1 done
parent
9dede32fdf
commit
c78dd24d31
|
@ -13,57 +13,33 @@ struct Part {
|
||||||
|
|
||||||
impl Engine {
|
impl Engine {
|
||||||
fn valid_number(&self, current_row: usize, position: usize) -> bool {
|
fn valid_number(&self, current_row: usize, position: usize) -> bool {
|
||||||
if self.parts[current_row].row.get(position + 1).is_some()
|
let search_grid: Vec<[i32; 2]> = vec![
|
||||||
&& !self.number_or_point(self.parts[current_row].row[position + 1])
|
[0, 1],
|
||||||
{
|
[0, -1],
|
||||||
return true;
|
[1, 0],
|
||||||
}
|
[1, 1],
|
||||||
if position > 0
|
[1, -1],
|
||||||
&& self.parts[current_row].row.get(position - 1).is_some()
|
[-1, -1],
|
||||||
&& !self.number_or_point(self.parts[current_row].row[position - 1])
|
[-1, 0],
|
||||||
{
|
[-1, 1],
|
||||||
return true;
|
];
|
||||||
}
|
|
||||||
|
|
||||||
if self.parts.get(current_row + 1).is_some() {
|
let result = search_grid.iter().find(|[x, y]| {
|
||||||
if self.parts[current_row + 1].row.get(position + 1).is_some()
|
let x_i32 = current_row as i32 + x;
|
||||||
&& !self.number_or_point(self.parts[current_row + 1].row[position + 1])
|
let y_i32 = position as i32 + y;
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if self.parts[current_row + 1].row.get(position).is_some()
|
|
||||||
&& !self.number_or_point(self.parts[current_row + 1].row[position])
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if position > 0
|
|
||||||
&& self.parts[current_row + 1].row.get(position - 1).is_some()
|
|
||||||
&& !self.number_or_point(self.parts[current_row + 1].row[position - 1])
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if current_row > 0 && self.parts.get(current_row - 1).is_some() {
|
if self.parts.get(x_i32 as usize).map_or(false, |part| {
|
||||||
if position > 0
|
part.row
|
||||||
&& self.parts[current_row - 1].row.get(position - 1).is_some()
|
.get(y_i32 as usize)
|
||||||
&& !self.number_or_point(self.parts[current_row - 1].row[position - 1])
|
.map_or(false, |value| !self.number_or_point(*value))
|
||||||
{
|
}) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if self.parts[current_row - 1].row.get(position + 1).is_some()
|
|
||||||
&& !self.number_or_point(self.parts[current_row - 1].row[position + 1])
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if self.parts[current_row - 1].row.get(position).is_some()
|
|
||||||
&& !self.number_or_point(self.parts[current_row - 1].row[position])
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
false
|
false
|
||||||
|
});
|
||||||
|
|
||||||
|
result.is_some()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn number_or_point(&self, c: char) -> bool {
|
fn number_or_point(&self, c: char) -> bool {
|
||||||
|
@ -122,6 +98,16 @@ fn part1(input: &str) -> u32 {
|
||||||
current_number.push(*letter);
|
current_number.push(*letter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if valid_number && !current_number.is_empty() {
|
||||||
|
let parsed = current_number.parse::<u32>().unwrap();
|
||||||
|
debug!(
|
||||||
|
"New line current number {} parsed: {}",
|
||||||
|
current_number, parsed
|
||||||
|
);
|
||||||
|
row_sum += parsed;
|
||||||
|
}
|
||||||
|
|
||||||
debug!("Sum: {}", row_sum);
|
debug!("Sum: {}", row_sum);
|
||||||
|
|
||||||
row_sum
|
row_sum
|
||||||
|
|
Loading…
Reference in New Issue