From fdb2804883deb31e3aeb15bbe588dcc9b7b76bd0 Mon Sep 17 00:00:00 2001 From: Mica White Date: Mon, 8 Dec 2025 19:56:48 -0500 Subject: Stuff --- model/src/coordinates.rs | 304 +++++++++++++++++++++++------------------------ 1 file changed, 152 insertions(+), 152 deletions(-) mode change 100644 => 100755 model/src/coordinates.rs (limited to 'model/src/coordinates.rs') diff --git a/model/src/coordinates.rs b/model/src/coordinates.rs old mode 100644 new mode 100755 index 0f45322..d16f900 --- a/model/src/coordinates.rs +++ b/model/src/coordinates.rs @@ -1,152 +1,152 @@ -use std::fmt::{Display, Formatter}; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] -pub struct SquareCoordinate { - rank: u8, - file: u8, -} - -impl SquareCoordinate { - pub fn new(rank: u8, file: u8) -> Self { - if rank > 8 { - panic!("A Square cannot have a rank greater than 8. Got {}", rank) - } else if file > 8 { - panic!("A Square cannot have a file greater than 8. Got {}", file) - } else { - Self { rank, file } - } - } - - pub fn from_normal_value(value: usize) -> Self { - static VALUE_COORDINATE_MAP: [SquareCoordinate; 32] = [ - SquareCoordinate { rank: 0, file: 6 }, - SquareCoordinate { rank: 0, file: 4 }, - SquareCoordinate { rank: 0, file: 2 }, - SquareCoordinate { rank: 0, file: 0 }, - SquareCoordinate { rank: 1, file: 7 }, - SquareCoordinate { rank: 1, file: 5 }, - SquareCoordinate { rank: 1, file: 3 }, - SquareCoordinate { rank: 1, file: 1 }, - SquareCoordinate { rank: 2, file: 6 }, - SquareCoordinate { rank: 2, file: 4 }, - SquareCoordinate { rank: 2, file: 2 }, - SquareCoordinate { rank: 2, file: 0 }, - SquareCoordinate { rank: 3, file: 7 }, - SquareCoordinate { rank: 3, file: 5 }, - SquareCoordinate { rank: 3, file: 3 }, - SquareCoordinate { rank: 3, file: 1 }, - SquareCoordinate { rank: 4, file: 6 }, - SquareCoordinate { rank: 4, file: 4 }, - SquareCoordinate { rank: 4, file: 2 }, - SquareCoordinate { rank: 4, file: 0 }, - SquareCoordinate { rank: 5, file: 7 }, - SquareCoordinate { rank: 5, file: 5 }, - SquareCoordinate { rank: 5, file: 3 }, - SquareCoordinate { rank: 5, file: 1 }, - SquareCoordinate { rank: 6, file: 6 }, - SquareCoordinate { rank: 6, file: 4 }, - SquareCoordinate { rank: 6, file: 2 }, - SquareCoordinate { rank: 6, file: 0 }, - SquareCoordinate { rank: 7, file: 7 }, - SquareCoordinate { rank: 7, file: 5 }, - SquareCoordinate { rank: 7, file: 3 }, - SquareCoordinate { rank: 7, file: 1 }, - ]; - - VALUE_COORDINATE_MAP[value] - } - - pub fn from_ampere_value(value: usize) -> Self { - static VALUE_COORDINATE_MAP: [SquareCoordinate; 32] = [ - SquareCoordinate { rank: 0, file: 6 }, - SquareCoordinate { rank: 1, file: 7 }, - SquareCoordinate { rank: 4, file: 0 }, - SquareCoordinate { rank: 5, file: 1 }, - SquareCoordinate { rank: 6, file: 2 }, - SquareCoordinate { rank: 7, file: 3 }, - SquareCoordinate { rank: 0, file: 4 }, - SquareCoordinate { rank: 1, file: 5 }, - SquareCoordinate { rank: 2, file: 6 }, - SquareCoordinate { rank: 3, file: 7 }, - SquareCoordinate { rank: 6, file: 0 }, - SquareCoordinate { rank: 7, file: 1 }, - SquareCoordinate { rank: 0, file: 2 }, - SquareCoordinate { rank: 1, file: 3 }, - SquareCoordinate { rank: 2, file: 4 }, - SquareCoordinate { rank: 3, file: 5 }, - SquareCoordinate { rank: 4, file: 6 }, - SquareCoordinate { rank: 5, file: 7 }, - SquareCoordinate { rank: 0, file: 0 }, - SquareCoordinate { rank: 1, file: 1 }, - SquareCoordinate { rank: 2, file: 2 }, - SquareCoordinate { rank: 3, file: 3 }, - SquareCoordinate { rank: 4, file: 4 }, - SquareCoordinate { rank: 5, file: 5 }, - SquareCoordinate { rank: 6, file: 6 }, - SquareCoordinate { rank: 7, file: 7 }, - SquareCoordinate { rank: 2, file: 0 }, - SquareCoordinate { rank: 3, file: 1 }, - SquareCoordinate { rank: 4, file: 2 }, - SquareCoordinate { rank: 5, file: 3 }, - SquareCoordinate { rank: 6, file: 4 }, - SquareCoordinate { rank: 7, file: 5 }, - ]; - - VALUE_COORDINATE_MAP[value] - } - - pub fn rank(self) -> u8 { - self.rank - } - - pub fn file(self) -> u8 { - self.file - } - - pub fn to_ampere_value(self) -> Option { - if self.rank % 2 == 0 { - if self.file % 2 == 0 { - Some(((18 - ((self.file / 2) * 6)) + ((self.rank / 2) * 8)) as usize % 32) - } else { - None - } - } else if self.file % 2 == 1 { - let column_value = match self.file { - 1 => 19, - 3 => 13, - 5 => 7, - 7 => 1, - _ => unreachable!(), - }; - let row_value = match self.rank { - 1 => 0, - 3 => 8, - 5 => 16, - 7 => 24, - _ => unreachable!(), - }; - Some((column_value + row_value) % 32) - } else { - None - } - } - - pub fn to_normal_value(self) -> Option { - if self.rank % 2 == 0 { - Some(self.rank as usize * 4 + self.file as usize % 4) - } else { - Some(self.rank as usize * 4 + self.file as usize % 4 + 1) - } - } -} - -impl Display for SquareCoordinate { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!( - f, - "{}{}", - char::from_u32((self.file + b'a') as u32).unwrap(), - self.rank + 1 - ) - } -} +use std::fmt::{Display, Formatter}; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] +pub struct SquareCoordinate { + rank: u8, + file: u8, +} + +impl SquareCoordinate { + pub fn new(rank: u8, file: u8) -> Self { + if rank > 8 { + panic!("A Square cannot have a rank greater than 8. Got {}", rank) + } else if file > 8 { + panic!("A Square cannot have a file greater than 8. Got {}", file) + } else { + Self { rank, file } + } + } + + pub fn from_normal_value(value: usize) -> Self { + static VALUE_COORDINATE_MAP: [SquareCoordinate; 32] = [ + SquareCoordinate { rank: 0, file: 6 }, + SquareCoordinate { rank: 0, file: 4 }, + SquareCoordinate { rank: 0, file: 2 }, + SquareCoordinate { rank: 0, file: 0 }, + SquareCoordinate { rank: 1, file: 7 }, + SquareCoordinate { rank: 1, file: 5 }, + SquareCoordinate { rank: 1, file: 3 }, + SquareCoordinate { rank: 1, file: 1 }, + SquareCoordinate { rank: 2, file: 6 }, + SquareCoordinate { rank: 2, file: 4 }, + SquareCoordinate { rank: 2, file: 2 }, + SquareCoordinate { rank: 2, file: 0 }, + SquareCoordinate { rank: 3, file: 7 }, + SquareCoordinate { rank: 3, file: 5 }, + SquareCoordinate { rank: 3, file: 3 }, + SquareCoordinate { rank: 3, file: 1 }, + SquareCoordinate { rank: 4, file: 6 }, + SquareCoordinate { rank: 4, file: 4 }, + SquareCoordinate { rank: 4, file: 2 }, + SquareCoordinate { rank: 4, file: 0 }, + SquareCoordinate { rank: 5, file: 7 }, + SquareCoordinate { rank: 5, file: 5 }, + SquareCoordinate { rank: 5, file: 3 }, + SquareCoordinate { rank: 5, file: 1 }, + SquareCoordinate { rank: 6, file: 6 }, + SquareCoordinate { rank: 6, file: 4 }, + SquareCoordinate { rank: 6, file: 2 }, + SquareCoordinate { rank: 6, file: 0 }, + SquareCoordinate { rank: 7, file: 7 }, + SquareCoordinate { rank: 7, file: 5 }, + SquareCoordinate { rank: 7, file: 3 }, + SquareCoordinate { rank: 7, file: 1 }, + ]; + + VALUE_COORDINATE_MAP[value] + } + + pub fn from_ampere_value(value: usize) -> Self { + static VALUE_COORDINATE_MAP: [SquareCoordinate; 32] = [ + SquareCoordinate { rank: 0, file: 6 }, + SquareCoordinate { rank: 1, file: 7 }, + SquareCoordinate { rank: 4, file: 0 }, + SquareCoordinate { rank: 5, file: 1 }, + SquareCoordinate { rank: 6, file: 2 }, + SquareCoordinate { rank: 7, file: 3 }, + SquareCoordinate { rank: 0, file: 4 }, + SquareCoordinate { rank: 1, file: 5 }, + SquareCoordinate { rank: 2, file: 6 }, + SquareCoordinate { rank: 3, file: 7 }, + SquareCoordinate { rank: 6, file: 0 }, + SquareCoordinate { rank: 7, file: 1 }, + SquareCoordinate { rank: 0, file: 2 }, + SquareCoordinate { rank: 1, file: 3 }, + SquareCoordinate { rank: 2, file: 4 }, + SquareCoordinate { rank: 3, file: 5 }, + SquareCoordinate { rank: 4, file: 6 }, + SquareCoordinate { rank: 5, file: 7 }, + SquareCoordinate { rank: 0, file: 0 }, + SquareCoordinate { rank: 1, file: 1 }, + SquareCoordinate { rank: 2, file: 2 }, + SquareCoordinate { rank: 3, file: 3 }, + SquareCoordinate { rank: 4, file: 4 }, + SquareCoordinate { rank: 5, file: 5 }, + SquareCoordinate { rank: 6, file: 6 }, + SquareCoordinate { rank: 7, file: 7 }, + SquareCoordinate { rank: 2, file: 0 }, + SquareCoordinate { rank: 3, file: 1 }, + SquareCoordinate { rank: 4, file: 2 }, + SquareCoordinate { rank: 5, file: 3 }, + SquareCoordinate { rank: 6, file: 4 }, + SquareCoordinate { rank: 7, file: 5 }, + ]; + + VALUE_COORDINATE_MAP[value] + } + + pub fn rank(self) -> u8 { + self.rank + } + + pub fn file(self) -> u8 { + self.file + } + + pub fn to_ampere_value(self) -> Option { + if self.rank % 2 == 0 { + if self.file % 2 == 0 { + Some(((18 - ((self.file / 2) * 6)) + ((self.rank / 2) * 8)) as usize % 32) + } else { + None + } + } else if self.file % 2 == 1 { + let column_value = match self.file { + 1 => 19, + 3 => 13, + 5 => 7, + 7 => 1, + _ => unreachable!(), + }; + let row_value = match self.rank { + 1 => 0, + 3 => 8, + 5 => 16, + 7 => 24, + _ => unreachable!(), + }; + Some((column_value + row_value) % 32) + } else { + None + } + } + + pub fn to_normal_value(self) -> Option { + if self.rank % 2 == 0 { + Some(self.rank as usize * 4 + self.file as usize % 4) + } else { + Some(self.rank as usize * 4 + self.file as usize % 4 + 1) + } + } +} + +impl Display for SquareCoordinate { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}{}", + char::from_u32((self.file + b'a') as u32).unwrap(), + self.rank + 1 + ) + } +} -- cgit v1.2.3