bhcli

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

commit fdc4721ec6cf37bd8b66bba09e665f6f2b6fe81a
parent 5789320f1242ed3dbc677509a96b97e1e75f4ce3
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Wed, 29 Mar 2023 22:47:25 -0700

cleanup

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

diff --git a/src/lechatphp/mod.rs b/src/lechatphp/mod.rs @@ -1,5 +1,6 @@ use std::collections::{HashMap, HashSet}; use std::fmt::{Display, Formatter}; +use std::hash::{Hash, Hasher}; use base64::{engine::general_purpose, Engine as _}; use image::{ColorType, DynamicImage, GenericImageView, Rgba}; use lazy_static::lazy_static; @@ -146,21 +147,25 @@ fn solve_difficulty2(img: &DynamicImage) -> Option<String> { Some(answer) } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Eq)] struct Letter { offset: Point, character: char, } +impl Hash for Letter { + fn hash<H: Hasher>(&self, state: &mut H) { + self.character.hash(state); + self.offset.x.hash(state); + self.offset.y.hash(state); + } +} + impl Letter { fn new(offset: Point, character: char) -> Self { Self { offset, character } } - fn key(&self) -> String { - format!("{}_{}_{}", self.character, self.offset.x, self.offset.y) - } - fn offset(&self) -> Point { self.offset.clone() } @@ -261,14 +266,14 @@ fn solve_difficulty3(img: &DynamicImage) -> Result<String, CaptchaErr> { let mut answer = String::new(); let mut letter = starting.unwrap(); - let mut visited = HashSet::<String>::new(); + let mut visited = HashSet::<Letter>::new(); for i in 0..5 { - if visited.contains(&letter.key()) { + if visited.contains(&letter) { return Err(CaptchaErr(format!("already visited node {:?}", letter))); } answer.push(letter.character); // println!("visiting {:?}", letter); - visited.insert(letter.key()); + visited.insert(letter.clone()); if i == 4 { break; } @@ -324,14 +329,14 @@ fn solve_difficulty3(img: &DynamicImage) -> Result<String, CaptchaErr> { let angle = get_angle(fst_red_pt, &letter.center()); let mut neighbor = get_letter_in_direction(&letter, angle, &letters_map).unwrap(); - if visited.contains(&neighbor.key()) { + if visited.contains(&neighbor) { let fst_red_pt = red_px_pts.get(1).unwrap(); let angle = get_angle(fst_red_pt, &letter.center()); neighbor = get_letter_in_direction(&letter, angle, &letters_map).unwrap(); - if visited.contains(&neighbor.key()) { + if visited.contains(&neighbor) { if i == 3 { for (_, l) in letters_map.iter() { - if !visited.contains(&l.key()) { + if !visited.contains(&l) { letter = l.clone(); break 'the_loop; } @@ -395,7 +400,7 @@ impl Rect { } } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] struct Point { x: u32, y: u32,