bhcli

"Strange's fork of n0tr1v's bhcli (onion)"
git clone https://git.dasho.dev/Strange/bhcli.git
Log | Files | Refs | README

commit 8fb69816832f5d1bbdc82078c0e9aad40d6e9763
parent e1de40ffd00933d6e976656d08cce2c237522a20
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Thu, 30 Mar 2023 01:08:19 -0700

cleanup

Diffstat:
Msrc/lechatphp/mod.rs | 32+++++++++++++++++---------------
1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/lechatphp/mod.rs b/src/lechatphp/mod.rs @@ -197,7 +197,6 @@ fn solve_difficulty3(img: &DynamicImage) -> Result<String, CaptchaErr> { let image_width = 150; let image_height = 200; let min_px_for_letter = 21; - let min_starting_pt_red_px = 50; let mut letters_map: HashMap<char, Letter> = HashMap::new(); @@ -249,24 +248,12 @@ fn solve_difficulty3(img: &DynamicImage) -> Result<String, CaptchaErr> { return Err(CaptchaErr(format!("did not find exactly 5 letters {}", letters_map.len()))); } - let mut starting: Option<Letter> = None; // Step2: Find the starting letter - for (_, letter) in letters_map.iter() { - let square = img.crop_imm(letter.offset.x-5, letter.offset.y-3, 8+5+6, 14+3+2); - let count_red = count_red_px(&square); - if count_red > min_starting_pt_red_px { - starting = Some(letter.clone()); - break; - } - } - - if starting.is_none() { - return Err(CaptchaErr("could not find starting letter".to_owned())); - } + let starting = get_starting_letter(&img, &letters_map).ok_or(CaptchaErr("could not find starting letter".to_owned()))?; let mut answer = String::new(); let mut visited = HashSet::<Letter>::new(); - let mut letter = starting.unwrap(); + let mut letter = starting; answer.push(letter.character); visited.insert(letter.clone()); for i in 0..4 { @@ -294,6 +281,21 @@ fn solve_difficulty3(img: &DynamicImage) -> Result<String, CaptchaErr> { Ok(answer) } +fn get_starting_letter(img: &DynamicImage, letters_map: &HashMap<char, Letter>) -> Option<Letter> { + let min_starting_pt_red_px = 50; + let mut starting: Option<Letter> = None; + // Step2: Find the starting letter + for (_, letter) in letters_map.iter() { + let square = img.crop_imm(letter.offset.x-5, letter.offset.y-3, 8+5+6, 14+3+2); + let count_red = count_red_px(&square); + if count_red > min_starting_pt_red_px { + starting = Some(letter.clone()); + break; + } + } + starting +} + fn get_next_node(red_px_pts: &Vec<Point>, letter: &Letter, letters_map: &HashMap<char, Letter>, visited: &HashSet<Letter>, i: i32, nb_lines: usize) -> Result<Letter, CaptchaErr> { let mut res: Option<Letter> = None; 'some_loop: for idx in 0..nb_lines {