就这样了(瘫倒
This commit is contained in:
parent
46e1bf18a8
commit
dc24a5c900
27
src/main.rs
27
src/main.rs
@ -1,4 +1,3 @@
|
||||
mod data_struct;
|
||||
mod name;
|
||||
|
||||
use base16384::Base16384Utf8;
|
||||
@ -12,6 +11,7 @@ use tracing::info;
|
||||
/// ? , 问号
|
||||
/// U2000 - U202F , unicode特殊空格 等
|
||||
/// 不可以空格开头
|
||||
#[inline(always)]
|
||||
pub fn gen_name(id: u64) -> String {
|
||||
// u64 -> [u8]
|
||||
let id_bytes = id.to_be_bytes();
|
||||
@ -54,6 +54,7 @@ pub struct Command {
|
||||
pub team: String,
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn cacl(start: u64, max: u64, step: usize, top: u32, id: u64, team: &String) {
|
||||
let mut start_time = std::time::Instant::now();
|
||||
let mut k: u64 = 0;
|
||||
@ -62,23 +63,21 @@ fn cacl(start: u64, max: u64, step: usize, top: u32, id: u64, team: &String) {
|
||||
let name = gen_name(i as u64);
|
||||
// let full_name = format!("{}@shenjack", name);
|
||||
// let namer = name::Namer::new(&full_name);
|
||||
let namer = name::Namer::new_raw(name, team);
|
||||
if let Some(namer) = namer {
|
||||
let prop = namer.get_property();
|
||||
if (prop + allow_d as f32) > top as f32 {
|
||||
if prop > top as f32 {
|
||||
info!("新的最高属性 {}", prop);
|
||||
top = prop as u32;
|
||||
}
|
||||
let name = gen_name(i as u64);
|
||||
let full_name = format!("{}@{}", name, team);
|
||||
info!("{:>20}|{}|{}", i, full_name, show_name(&namer));
|
||||
let namer = name::Namer::new_raw(name.as_str(), team);
|
||||
let prop = namer.get_property();
|
||||
if (prop + allow_d as f32) > top as f32 {
|
||||
if prop > top as f32 {
|
||||
info!("新的最高属性 {}", prop);
|
||||
top = prop as u32;
|
||||
}
|
||||
let name = gen_name(i as u64);
|
||||
let full_name = format!("{}@{}", name, team);
|
||||
info!("{:>15}|{}|{}", i, full_name, show_name(&namer));
|
||||
}
|
||||
k += 1;
|
||||
if k > report_interval as u64 {
|
||||
if k >= report_interval as u64 {
|
||||
let now = std::time::Instant::now();
|
||||
info!("{:>20} {} {}/s", i, id, k / now.duration_since(start_time).as_secs());
|
||||
info!("{:>15} {} {}/s", i, id, k as u128 / now.duration_since(start_time).as_millis() * 1000);
|
||||
start_time = now;
|
||||
k = 0;
|
||||
}
|
||||
|
184
src/name.rs
184
src/name.rs
@ -23,24 +23,24 @@ pub struct Namer {
|
||||
}
|
||||
|
||||
impl Namer {
|
||||
pub fn new(raw_name: &String) -> Option<Self> {
|
||||
// name@team
|
||||
// name
|
||||
let (name, team) = raw_name.split_once('@').unwrap_or((raw_name, ""));
|
||||
// len < 256
|
||||
if name.len() > 256 {
|
||||
warn!("Name too long({}): {}", name.len(), name);
|
||||
return None;
|
||||
}
|
||||
if team.len() > 256 {
|
||||
warn!("Team too long({}): {}", team.len(), team);
|
||||
return None;
|
||||
}
|
||||
Self::new_raw(name.to_string(), &team.to_string())
|
||||
}
|
||||
// pub fn new(raw_name: &String) -> Option<Self> {
|
||||
// // name@team
|
||||
// // name
|
||||
// let (name, team) = raw_name.split_once('@').unwrap_or((raw_name, ""));
|
||||
// // len < 256
|
||||
// if name.len() > 256 {
|
||||
// warn!("Name too long({}): {}", name.len(), name);
|
||||
// return None;
|
||||
// }
|
||||
// if team.len() > 256 {
|
||||
// warn!("Team too long({}): {}", team.len(), team);
|
||||
// return None;
|
||||
// }
|
||||
// Some(Self::new_raw(name.to_string(), &team.to_string()))
|
||||
// }
|
||||
|
||||
pub fn new_raw(name: String, team: &String) -> Option<Self> {
|
||||
|
||||
#[inline(always)]
|
||||
pub fn new_raw(name: &str, team: &str) -> Self {
|
||||
let mut val = [0_u8; 256];
|
||||
for i in 0..256 {
|
||||
val[i] = i as u8;
|
||||
@ -51,15 +51,15 @@ impl Namer {
|
||||
let skl_freq = [0_u8; 40];
|
||||
|
||||
// len < 256
|
||||
if name.len() > 256 {
|
||||
warn!("Name too long({}): {}", name.len(), name);
|
||||
return None;
|
||||
}
|
||||
// if name.len() > 256 {
|
||||
// warn!("Name too long({}): {}", name.len(), name);
|
||||
// return None;
|
||||
// }
|
||||
let name_len = name.len();
|
||||
if team.len() > 256 {
|
||||
warn!("Team too long({}): {}", team.len(), team);
|
||||
return None;
|
||||
}
|
||||
// if team.len() > 256 {
|
||||
// warn!("Team too long({}): {}", team.len(), team);
|
||||
// return None;
|
||||
// }
|
||||
let team_len = team.len();
|
||||
|
||||
let name_bytes = name.as_bytes();
|
||||
@ -89,15 +89,21 @@ impl Namer {
|
||||
val[i] = val[s as usize];
|
||||
val[s as usize] = tmp;
|
||||
}
|
||||
for _ in 0..2 {
|
||||
s = 0;
|
||||
for j in 0..256 {
|
||||
s += name_bytes[j % (name_len + 1)] as u32 + val[j] as u32;
|
||||
s %= 256;
|
||||
let tmp = val[j];
|
||||
val[j] = val[s as usize];
|
||||
val[s as usize] = tmp;
|
||||
}
|
||||
s = 0;
|
||||
for j in 0..256 {
|
||||
s += name_bytes[j % (name_len + 1)] as u32 + val[j] as u32;
|
||||
s %= 256;
|
||||
let tmp = val[j];
|
||||
val[j] = val[s as usize];
|
||||
val[s as usize] = tmp;
|
||||
}
|
||||
s = 0;
|
||||
for j in 0..256 {
|
||||
s += name_bytes[j % (name_len + 1)] as u32 + val[j] as u32;
|
||||
s %= 256;
|
||||
let tmp = val[j];
|
||||
val[j] = val[s as usize];
|
||||
val[s as usize] = tmp;
|
||||
}
|
||||
s = 0;
|
||||
for i in 0..256 {
|
||||
@ -114,11 +120,6 @@ impl Namer {
|
||||
for i in (10..31).step_by(3) {
|
||||
r[i..i + 3].sort_unstable();
|
||||
let med = median(r[i], r[i + 1], r[i + 2]);
|
||||
// let max_ = r[i].max(r[i + 1]).max(r[i + 2]);
|
||||
// let min_ = r[i].min(r[i + 1]).min(r[i + 2]);
|
||||
// r[i] = min_;
|
||||
// r[i + 1] = med;
|
||||
// r[i + 2] = max_;
|
||||
name_prop[prop_cnt] = med as u32;
|
||||
prop_cnt += 1;
|
||||
}
|
||||
@ -132,7 +133,7 @@ impl Namer {
|
||||
name_prop[i] += 36;
|
||||
}
|
||||
|
||||
Some(Self {
|
||||
Self {
|
||||
name: name.to_string(),
|
||||
team: team.to_string(),
|
||||
val,
|
||||
@ -142,58 +143,59 @@ impl Namer {
|
||||
name_prop,
|
||||
skl_id,
|
||||
skl_freq,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property(&self) -> f32 {
|
||||
// 除 prop[7] 外 加起来 + prop[7] / 3
|
||||
let sum1 = self.name_prop[0..7].iter().sum::<u32>();
|
||||
let sum2 = self.name_prop[7] as u32;
|
||||
sum1 as f32 + (sum2 as f32 / 3_f32)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn basic_new_test() {
|
||||
let namer = Namer::new(&"x@x".to_string());
|
||||
|
||||
assert!(namer.is_some());
|
||||
|
||||
let namer = namer.unwrap();
|
||||
|
||||
let base_name_vec: Vec<u8> = vec![
|
||||
53, 0, 40, 4, 58, 61, 37, 46, 56, 51, 21, 20, 27, 17, 15, 26, 13, 30, 52, 63, 36, 30,
|
||||
57, 34, 22, 37, 35, 6, 12, 25, 50, 49, 59, 23, 49, 27, 51, 58, 39, 28, 60, 20, 31, 36,
|
||||
41, 11, 7, 29, 24, 24, 61, 62, 57, 4, 28, 48, 55, 50, 38, 29, 10, 40, 42, 15, 23, 47,
|
||||
42, 62, 47, 1, 60, 5, 43, 21, 1, 46, 45, 9, 9, 14, 38, 13, 56, 0, 31, 59, 39, 6, 35,
|
||||
41, 55, 5, 34, 3, 7, 33, 33, 45, 16, 16, 32, 43, 18, 44, 22, 14, 17, 10, 11, 53, 18,
|
||||
44, 19, 52, 2, 32, 12, 8, 2, 54, 26, 48, 8, 3, 63, 54, 19, 25,
|
||||
];
|
||||
let val_vec: Vec<u8> = vec![
|
||||
225, 96, 49, 232, 20, 47, 115, 245, 234, 23, 111, 178, 231, 100, 118, 197, 42, 98, 137,
|
||||
196, 209, 86, 114, 184, 167, 129, 164, 239, 205, 211, 82, 173, 189, 153, 198, 67, 4, 3,
|
||||
90, 52, 128, 134, 176, 145, 85, 9, 250, 30, 63, 247, 240, 17, 215, 200, 78, 188, 132,
|
||||
117, 10, 45, 162, 79, 123, 73, 109, 91, 57, 210, 22, 175, 107, 203, 103, 32, 83, 70,
|
||||
242, 75, 220, 140, 148, 15, 138, 44, 228, 43, 105, 199, 99, 116, 97, 69, 80, 172, 230,
|
||||
25, 224, 33, 31, 135, 235, 74, 193, 238, 233, 88, 216, 204, 24, 163, 141, 6, 201, 26,
|
||||
38, 21, 186, 237, 101, 206, 212, 76, 144, 219, 149, 169, 202, 110, 41, 166, 139, 194,
|
||||
168, 34, 142, 147, 187, 108, 223, 94, 5, 243, 226, 60, 40, 102, 51, 87, 61, 236, 46,
|
||||
159, 64, 227, 113, 190, 81, 127, 65, 8, 183, 253, 150, 249, 229, 37, 156, 182, 180,
|
||||
246, 124, 244, 174, 122, 89, 120, 160, 35, 143, 11, 14, 151, 133, 27, 177, 251, 221,
|
||||
207, 58, 29, 131, 119, 171, 157, 93, 185, 48, 112, 192, 191, 66, 106, 39, 59, 92, 19,
|
||||
1, 155, 254, 84, 222, 165, 54, 121, 13, 50, 36, 130, 95, 161, 213, 170, 28, 241, 71,
|
||||
53, 68, 218, 0, 252, 16, 136, 179, 158, 248, 2, 154, 12, 125, 126, 255, 18, 146, 104,
|
||||
77, 152, 208, 214, 72, 55, 195, 62, 7, 217, 56, 181,
|
||||
];
|
||||
let prop_vec: Vec<u32> = vec![57, 53, 66, 72, 70, 71, 61, 344];
|
||||
assert_eq!(namer.name, "x");
|
||||
assert_eq!(namer.team, "x");
|
||||
assert_eq!(namer.val.to_vec(), val_vec);
|
||||
assert_eq!(namer.name_prop.to_vec(), prop_vec);
|
||||
assert_eq!(namer.name_base.to_vec(), base_name_vec);
|
||||
#[inline(always)]
|
||||
pub fn get_property(&self) -> f32 {
|
||||
// 除 prop[7] 外 加起来 + prop[7] / 3
|
||||
let sum1 = self.name_prop[0..7].iter().sum::<u32>();
|
||||
let sum2 = self.name_prop[7] as u32;
|
||||
sum1 as f32 + (sum2 as f32 / 3_f32)
|
||||
}
|
||||
}
|
||||
|
||||
// #[cfg(test)]
|
||||
// mod test {
|
||||
// use super::*;
|
||||
|
||||
// #[test]
|
||||
// fn basic_new_test() {
|
||||
// let namer = Namer::new(&"x@x".to_string());
|
||||
|
||||
// assert!(namer.is_some());
|
||||
|
||||
// let namer = namer.unwrap();
|
||||
|
||||
// let base_name_vec: Vec<u8> = vec![
|
||||
// 53, 0, 40, 4, 58, 61, 37, 46, 56, 51, 21, 20, 27, 17, 15, 26, 13, 30, 52, 63, 36, 30,
|
||||
// 57, 34, 22, 37, 35, 6, 12, 25, 50, 49, 59, 23, 49, 27, 51, 58, 39, 28, 60, 20, 31, 36,
|
||||
// 41, 11, 7, 29, 24, 24, 61, 62, 57, 4, 28, 48, 55, 50, 38, 29, 10, 40, 42, 15, 23, 47,
|
||||
// 42, 62, 47, 1, 60, 5, 43, 21, 1, 46, 45, 9, 9, 14, 38, 13, 56, 0, 31, 59, 39, 6, 35,
|
||||
// 41, 55, 5, 34, 3, 7, 33, 33, 45, 16, 16, 32, 43, 18, 44, 22, 14, 17, 10, 11, 53, 18,
|
||||
// 44, 19, 52, 2, 32, 12, 8, 2, 54, 26, 48, 8, 3, 63, 54, 19, 25,
|
||||
// ];
|
||||
// let val_vec: Vec<u8> = vec![
|
||||
// 225, 96, 49, 232, 20, 47, 115, 245, 234, 23, 111, 178, 231, 100, 118, 197, 42, 98, 137,
|
||||
// 196, 209, 86, 114, 184, 167, 129, 164, 239, 205, 211, 82, 173, 189, 153, 198, 67, 4, 3,
|
||||
// 90, 52, 128, 134, 176, 145, 85, 9, 250, 30, 63, 247, 240, 17, 215, 200, 78, 188, 132,
|
||||
// 117, 10, 45, 162, 79, 123, 73, 109, 91, 57, 210, 22, 175, 107, 203, 103, 32, 83, 70,
|
||||
// 242, 75, 220, 140, 148, 15, 138, 44, 228, 43, 105, 199, 99, 116, 97, 69, 80, 172, 230,
|
||||
// 25, 224, 33, 31, 135, 235, 74, 193, 238, 233, 88, 216, 204, 24, 163, 141, 6, 201, 26,
|
||||
// 38, 21, 186, 237, 101, 206, 212, 76, 144, 219, 149, 169, 202, 110, 41, 166, 139, 194,
|
||||
// 168, 34, 142, 147, 187, 108, 223, 94, 5, 243, 226, 60, 40, 102, 51, 87, 61, 236, 46,
|
||||
// 159, 64, 227, 113, 190, 81, 127, 65, 8, 183, 253, 150, 249, 229, 37, 156, 182, 180,
|
||||
// 246, 124, 244, 174, 122, 89, 120, 160, 35, 143, 11, 14, 151, 133, 27, 177, 251, 221,
|
||||
// 207, 58, 29, 131, 119, 171, 157, 93, 185, 48, 112, 192, 191, 66, 106, 39, 59, 92, 19,
|
||||
// 1, 155, 254, 84, 222, 165, 54, 121, 13, 50, 36, 130, 95, 161, 213, 170, 28, 241, 71,
|
||||
// 53, 68, 218, 0, 252, 16, 136, 179, 158, 248, 2, 154, 12, 125, 126, 255, 18, 146, 104,
|
||||
// 77, 152, 208, 214, 72, 55, 195, 62, 7, 217, 56, 181,
|
||||
// ];
|
||||
// let prop_vec: Vec<u32> = vec![57, 53, 66, 72, 70, 71, 61, 344];
|
||||
// assert_eq!(namer.name, "x");
|
||||
// assert_eq!(namer.team, "x");
|
||||
// assert_eq!(namer.val.to_vec(), val_vec);
|
||||
// assert_eq!(namer.name_prop.to_vec(), prop_vec);
|
||||
// assert_eq!(namer.name_base.to_vec(), base_name_vec);
|
||||
// }
|
||||
// }
|
||||
|
Loading…
Reference in New Issue
Block a user