commit e0e3ed3c274216cb3d10df9c06ec5a9b7c86874d
parent f156801f2153258f518959e55c9ab5f490d4d780
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Wed, 29 Mar 2023 19:24:27 -0700
cleanup
Diffstat:
1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/src/lechatphp/mod.rs b/src/lechatphp/mod.rs
@@ -73,6 +73,8 @@ lazy_static! {
("VhI+pixHt3onSUOggyJvHXlkPxS0FADs=", 'y'),
("PhI+pm+GvXAuzIjkfZXwVADs=", 'z'),
]);
+ static ref RED_COLOR: Rgba<u8> = Rgba::from([204, 2, 4, 255]);
+ static ref ON_COLOR: Rgba<u8> = Rgba::from([252, 254, 252, 255]);
}
fn get_letter_img(letter: char) -> Option<DynamicImage> {
@@ -124,7 +126,6 @@ fn _solve_difficulty1(img: &DynamicImage) -> Option<String> {
}
fn solve_difficulty2(img: &DynamicImage) -> Option<String> {
- let on_color = Rgba::from([252, 254, 252, 255]);
let mut answer = String::new();
for i in 0..5 {
let sub_img = img.crop_imm(5 + ((8+1)*i), 7, 8, 14);
@@ -132,8 +133,8 @@ fn solve_difficulty2(img: &DynamicImage) -> Option<String> {
let good_letter_img = get_letter_img(c).unwrap();
for y in 0..14 {
for x in 0..8 {
- if good_letter_img.get_pixel(x, y) == on_color &&
- sub_img.get_pixel(x, y) != on_color {
+ if good_letter_img.get_pixel(x, y) == *ON_COLOR &&
+ sub_img.get_pixel(x, y) != *ON_COLOR {
continue 'alphabet_loop;
}
}
@@ -414,24 +415,23 @@ impl From<(u32, u32)> for Point {
fn get_contour_red_pixels(top_left_pt: &Point, img: &DynamicImage) -> Vec<Point> {
let mut out = vec![];
- let red_color = Rgba::from([204, 2, 4, 255]);
let img_dim = img.dimensions();
let bottom_right_pt = top_left_pt.add(Point::from(img_dim));
for i in 0..img_dim.0 {
if let Some(px_color) = get_pixel_in_bound(img, i, 0) {
- if px_color == red_color {
+ if px_color == *RED_COLOR {
out.push(Point::new(top_left_pt.x+i, 0));
}
}
if let Some(px_color) = get_pixel_in_bound(img, i, img_dim.1-1) {
- if px_color == red_color {
+ if px_color == *RED_COLOR {
out.push(Point::new(top_left_pt.x+i, bottom_right_pt.y-1));
}
}
}
for i in 1..img_dim.1-1 {
if let Some(px_color) = get_pixel_in_bound(img, 0, i) {
- if px_color == red_color {
+ if px_color == *RED_COLOR {
out.push(Point::new(top_left_pt.x, top_left_pt.y+i));
}
}
@@ -441,7 +441,7 @@ fn get_contour_red_pixels(top_left_pt: &Point, img: &DynamicImage) -> Vec<Point>
}
}
if let Some(px_color) = get_pixel_in_bound(img, img_dim.0-1, i) {
- if px_color == red_color {
+ if px_color == *RED_COLOR {
out.push(Point::new(bottom_right_pt.x-1, top_left_pt.y+i));
}
}
@@ -459,15 +459,13 @@ fn get_pixel_in_bound(img: &DynamicImage, x: u32, y: u32) -> Option<Rgba<u8>> {
// give an image and a valid letter image, return either or not the letter is in that image.
fn img_contains_letter(img: &DynamicImage, letter_img1: &DynamicImage) -> bool {
- let on_color = Rgba::from([252, 254, 252, 255]);
- let red_color = Rgba::from([204, 2, 4, 255]);
for y in 0..letter_img1.dimensions().1 {
for x in 0..letter_img1.dimensions().0 {
if let Some(good_letter_color) = get_pixel_in_bound(letter_img1, x, y) {
if let Some(letter_img_color) = get_pixel_in_bound(img, x, y) {
// If we find an Off pixel where it's supposed to be On, skip that letter
- if (good_letter_color == on_color || good_letter_color == red_color) &&
- (letter_img_color != on_color && letter_img_color != red_color) {
+ if (good_letter_color == *ON_COLOR || good_letter_color == *RED_COLOR) &&
+ (letter_img_color != *ON_COLOR && letter_img_color != *RED_COLOR) {
return false;
}
}
@@ -478,11 +476,10 @@ fn img_contains_letter(img: &DynamicImage, letter_img1: &DynamicImage) -> bool {
}
fn has_red_in_center_area(letter_img: &DynamicImage) -> bool {
- let red_color = Rgba::from([204, 2, 4, 255]);
for y in 5..=std::cmp::min(letter_img.dimensions().1, 7) {
for x in 3..=std::cmp::min(letter_img.dimensions().0, 5) {
if let Some(letter_img_color) = get_pixel_in_bound(letter_img, x, y) {
- if letter_img_color == red_color {
+ if letter_img_color == *RED_COLOR {
return true;
}
}
@@ -493,13 +490,11 @@ fn has_red_in_center_area(letter_img: &DynamicImage) -> bool {
// Count pixels that are On (either white or red)
fn count_px_on(img: &DynamicImage) -> usize {
- let on_color = Rgba::from([252, 254, 252, 255]);
- let red_color = Rgba::from([204, 2, 4, 255]);
let mut count_on = 0;
for y in 0..std::cmp::min(img.dimensions().1, 14) {
for x in 0..std::cmp::min(img.dimensions().0, 8) {
let c = img.get_pixel(x, y);
- if c == on_color || c == red_color {
+ if c == *ON_COLOR || c == *RED_COLOR {
count_on += 1
}
}
@@ -509,12 +504,11 @@ fn count_px_on(img: &DynamicImage) -> usize {
// Count pixels that are red
fn count_red_px(img: &DynamicImage) -> usize {
- let red_color = Rgba::from([204, 2, 4, 255]);
let mut count_on = 0;
for y in 0..img.dimensions().1 {
for x in 0..img.dimensions().0 {
let c = img.get_pixel(x, y);
- if c == red_color {
+ if c == *RED_COLOR {
count_on += 1
}
}