Fix clippy errors

This commit is contained in:
2025-05-26 15:50:22 -05:00
parent da92f241eb
commit a400730c88
3 changed files with 45 additions and 63 deletions

View File

@@ -20,7 +20,7 @@ fn parse_line(line: &str) -> Result<(i64, i64), Box<dyn Error>> {
// Parse and return our two elements // Parse and return our two elements
let first_element = split_line[0].parse::<i64>()?; let first_element = split_line[0].parse::<i64>()?;
let second_element = split_line[1].parse::<i64>()?; let second_element = split_line[1].parse::<i64>()?;
return Ok((first_element, second_element)); Ok((first_element, second_element))
} }
/// Part 1 /// Part 1
@@ -108,5 +108,5 @@ fn main() -> Result<(), Box<dyn Error>> {
calculate_similarity(left_list, right_list) calculate_similarity(left_list, right_list)
); );
return Ok(()); Ok(())
} }

View File

@@ -65,11 +65,11 @@ fn compare_levels(curr_level: i64, next_level: i64) -> LevelTransition {
TransitionDirection::Desc TransitionDirection::Desc
}; };
return LevelTransition { state, direction }; LevelTransition { state, direction }
} }
/// Tests if a report is safe /// Tests if a report is safe
fn is_report_safe_no_dampening(report: &Vec<i64>) -> bool { fn is_report_safe_no_dampening(report: &[i64]) -> bool {
// Turn the report into a bunch of states for each adjacent pair in the report // Turn the report into a bunch of states for each adjacent pair in the report
let report: Vec<LevelTransition> = report let report: Vec<LevelTransition> = report
.windows(2) .windows(2)
@@ -98,13 +98,14 @@ fn is_report_safe_no_dampening(report: &Vec<i64>) -> bool {
// Setup for next iteration // Setup for next iteration
prev_transition = level_transition; prev_transition = level_transition;
} }
return true;
true
} }
/// Tests if a report is safe or code be made safe if you remove a single /// Tests if a report is safe or code be made safe if you remove a single
/// level from the report /// level from the report
fn is_report_safe_with_dampening_brute_force(report: &Vec<i64>) -> bool { fn is_report_safe_with_dampening_brute_force(report: &[i64]) -> bool {
if is_report_safe_no_dampening(&report) { if is_report_safe_no_dampening(report) {
return true; return true;
} }
@@ -115,7 +116,8 @@ fn is_report_safe_with_dampening_brute_force(report: &Vec<i64>) -> bool {
return true; return true;
} }
} }
return false;
false
} }
// fn compare_levels_3(prev_level: i64, curr_level: i64, next_level: i64) -> LevelTransition { // fn compare_levels_3(prev_level: i64, curr_level: i64, next_level: i64) -> LevelTransition {

View File

@@ -4,18 +4,13 @@ use crate::tokenizer::Token;
use std::iter::Peekable; use std::iter::Peekable;
fn is_mul_text_token(text_token: &str) -> bool { fn is_mul_text_token(text_token: &str) -> bool {
if text_token.ends_with("mul") { text_token.ends_with("mul")
true
} else {
false
}
} }
fn parse_mul<'a>(token_iter: &mut Peekable<impl Iterator<Item = &'a Token>>) -> Option<MulOp> { fn parse_mul<'a>(token_iter: &mut Peekable<impl Iterator<Item = &'a Token>>) -> Option<MulOp> {
// Take OpenParenthesis or return None // Take OpenParenthesis or return None
if !token_iter.next_if_eq(&&Token::OpenParenthesis).is_some() { token_iter.next_if_eq(&&Token::OpenParenthesis)?;
return None;
}
// Take Number or return None // Take Number or return None
let lhs = let lhs =
if let Some(Token::Number(lhs)) = token_iter.next_if(|v| matches!(v, Token::Number(_))) { if let Some(Token::Number(lhs)) = token_iter.next_if(|v| matches!(v, Token::Number(_))) {
@@ -23,10 +18,10 @@ fn parse_mul<'a>(token_iter: &mut Peekable<impl Iterator<Item = &'a Token>>) ->
} else { } else {
return None; return None;
}; };
// Take Comma or return None // Take Comma or return None
if !token_iter.next_if_eq(&&Token::Comma).is_some() { token_iter.next_if_eq(&&Token::Comma)?;
return None;
}
// Take Number or return None // Take Number or return None
let rhs = if let Some(Token::Number(rhs)) = let rhs = if let Some(Token::Number(rhs)) =
token_iter.next_if(|v: &&Token| matches!(v, Token::Number(_))) token_iter.next_if(|v: &&Token| matches!(v, Token::Number(_)))
@@ -35,78 +30,63 @@ fn parse_mul<'a>(token_iter: &mut Peekable<impl Iterator<Item = &'a Token>>) ->
} else { } else {
return None; return None;
}; };
// Take CloseParenthesis or return None // Take CloseParenthesis or return None
if !token_iter.next_if_eq(&&Token::CloseParenthesis).is_some() { token_iter.next_if_eq(&&Token::CloseParenthesis)?;
return None;
}
Some(MulOp::new(lhs, rhs)) Some(MulOp::new(lhs, rhs))
} }
fn is_do_text_token(text_token: &str) -> bool { fn is_do_text_token(text_token: &str) -> bool {
if text_token.ends_with("do") { text_token.ends_with("do")
true
} else {
false
}
} }
fn parse_do<'a>(token_iter: &mut Peekable<impl Iterator<Item = &'a Token>>) -> Option<DoOp> { fn parse_do<'a>(token_iter: &mut Peekable<impl Iterator<Item = &'a Token>>) -> Option<DoOp> {
// Take OpenParenthesis or return None // Take OpenParenthesis or return None
if !token_iter.next_if_eq(&&Token::OpenParenthesis).is_some() { token_iter.next_if_eq(&&Token::OpenParenthesis)?;
return None;
}
// Take CloseParenthesis or return None // Take CloseParenthesis or return None
if !token_iter.next_if_eq(&&Token::CloseParenthesis).is_some() { token_iter.next_if_eq(&&Token::CloseParenthesis)?;
return None;
}
Some(DoOp::new()) Some(DoOp::new())
} }
fn is_dont_text_token(text_token: &str) -> bool { fn is_dont_text_token(text_token: &str) -> bool {
if text_token.ends_with("don't") { text_token.ends_with("don't")
true
} else {
false
}
} }
fn parse_dont<'a>(token_iter: &mut Peekable<impl Iterator<Item = &'a Token>>) -> Option<DontOp> { fn parse_dont<'a>(token_iter: &mut Peekable<impl Iterator<Item = &'a Token>>) -> Option<DontOp> {
// Take OpenParenthesis or return None // Take OpenParenthesis or return None
if !token_iter.next_if_eq(&&Token::OpenParenthesis).is_some() { token_iter.next_if_eq(&&Token::OpenParenthesis)?;
return None;
}
// Take CloseParenthesis or return None // Take CloseParenthesis or return None
if !token_iter.next_if_eq(&&Token::CloseParenthesis).is_some() { token_iter.next_if_eq(&&Token::CloseParenthesis)?;
return None;
}
Some(DontOp::new()) Some(DontOp::new())
} }
/// Parse all tokens into Ops /// Parse all tokens into Ops
pub fn parse_tokens(tokens: &Vec<Token>) -> Vec<Ops> { pub fn parse_tokens(tokens: &[Token]) -> Vec<Ops> {
let mut tokens = tokens.iter().peekable(); let mut tokens = tokens.iter().peekable();
let mut muls: Vec<Ops> = Vec::new(); let mut muls: Vec<Ops> = Vec::new();
while let Some(token) = tokens.next() { while let Some(token) = tokens.next() {
match token { if let Token::Text(t) = token {
Token::Text(t) => { if is_mul_text_token(t) {
if is_mul_text_token(t) { let op = parse_mul(tokens.by_ref());
let op = parse_mul(tokens.by_ref()); if let Some(op) = op {
if let Some(op) = op { muls.push(Ops::Mul(op));
muls.push(Ops::Mul(op)); }
} } else if is_do_text_token(t) {
} else if is_do_text_token(t) { let op = parse_do(tokens.by_ref());
let op = parse_do(tokens.by_ref()); if let Some(op) = op {
if let Some(op) = op { muls.push(Ops::Do(op));
muls.push(Ops::Do(op)); }
} } else if is_dont_text_token(t) {
} else if is_dont_text_token(t) { let op = parse_dont(tokens.by_ref());
let op = parse_dont(tokens.by_ref()); if let Some(op) = op {
if let Some(op) = op { muls.push(Ops::Dont(op));
muls.push(Ops::Dont(op));
}
} }
} }
_ => (),
} }
} }
muls muls