Compare commits

..

10 Commits

Author SHA1 Message Date
f4cd58547f
reeee 2024-03-17 12:07:00 +08:00
a7f0468507
我需要一个解释( 2024-03-03 20:05:33 +08:00
b4b9c4d739
ruaaaa 2024-03-03 17:37:45 +08:00
c7592652bc
Revert "with out unsafe(test only"
This reverts commit bcfb504a01.
2024-03-03 17:27:05 +08:00
bcfb504a01
with out unsafe(test only 2024-03-03 17:24:38 +08:00
be76d612a4
unsafe enhance 2024-03-03 17:23:58 +08:00
351e96488d
test2 2024-03-03 17:13:44 +08:00
becfc8c634
test1 2024-03-03 17:12:29 +08:00
315417b8a8
我决定开始画饼( 2024-03-03 14:51:01 +08:00
df7860b4f3
simd完活 2024-03-03 13:47:42 +08:00
14 changed files with 3509 additions and 486 deletions

24
Cargo.lock generated
View File

@ -242,18 +242,6 @@ version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "namerena-rs"
version = "0.1.0"
dependencies = [
"base16384",
"chrono",
"clap",
"colored",
"tracing",
"tracing-subscriber",
]
[[package]] [[package]]
name = "nu-ansi-term" name = "nu-ansi-term"
version = "0.46.0" version = "0.46.0"
@ -472,6 +460,18 @@ dependencies = [
"tracing-log", "tracing-log",
] ]
[[package]]
name = "tswn"
version = "0.1.0"
dependencies = [
"base16384",
"chrono",
"clap",
"colored",
"tracing",
"tracing-subscriber",
]
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.12" version = "1.0.12"

View File

@ -1,5 +1,6 @@
[package] [package]
name = "namerena-rs" name = "tswn"
description = "tool shenjack work shop namerena"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
@ -22,6 +23,7 @@ simd = []
opt-level = 3 opt-level = 3
codegen-units = 1 codegen-units = 1
panic = "abort" panic = "abort"
debug = false debug = true
strip = false
lto = true lto = true
overflow-checks = false overflow-checks = false

20
pie.md Normal file
View File

@ -0,0 +1,20 @@
# tswn 画的饼
## 测号方法
- [ ] xp 1.3
- [ ] xp 2.0
- [ ] 曙光
- [ ] 霛雲
- [x] 八围
- [x] 技能
## 号生成算法
- [ ] 桃花模式
- 词库
- xxxx的xxxx
- [ ] 全排列
- 给定字符串的全排列
- [x] base 16384
- [ ] base 64

23
rustfmt.toml Normal file
View File

@ -0,0 +1,23 @@
# cargo fmt config
# 最大行长
max_width = 100
# 链式调用的最大长度
chain_width = 80
# 数组的最大长度
array_width = 70
# 函数参数的最大长度
attr_fn_like_width = 60
# 函数调用参数的最大长度
fn_call_width = 80
# 简单函数格式化为单行
fn_single_line = true
# 自动对齐最大长度
enum_discrim_align_threshold = 5
# 字段初始化使用简写
use_field_init_shorthand = true
# 是否使用彩色输出
color = "Always"
edition = "2021"

138
src/cacluate.rs Normal file
View File

@ -0,0 +1,138 @@
use crate::{evaluate::NamerEvaluater, name::{Namer, TeamNamer}};
use std::{io::Write, path::PathBuf};
use base16384::Base16384Utf8;
use colored::Colorize;
use tracing::{debug, info, warn};
pub fn show_name(namer: &Namer) -> String {
format!(
"HP|{} 攻|{} 防|{} 速|{} 敏|{} 魔|{} 抗|{} 智|{} 八围:{}",
namer.name_prop[0],
namer.name_prop[1],
namer.name_prop[2],
namer.name_prop[3],
namer.name_prop[4],
namer.name_prop[5],
namer.name_prop[6],
namer.name_prop[7],
namer.get_property()
)
}
/// 根据 u64 生成对应的 name
/// 转换成 base 16384
/// 禁用:
/// U00 ~ U1F ,换行,制表符 等
/// ? , 问号
/// U2000 - U202F , unicode特殊空格 等
/// 不可以空格开头
#[inline(always)]
pub fn gen_name(id: u64) -> String {
let id_bytes = id.to_be_bytes();
Base16384Utf8::encode(id_bytes.as_slice())
}
pub struct CacluateConfig {
/// 开始的 id
pub start: u64,
/// 结束的 id
pub end: u64,
/// 线程数
pub thread_count: u32,
/// 八围预期值
pub prop_expect: u32,
/// 八围允许范围
pub prop_allow: u32,
/// 队伍名称
pub team: String,
/// 预期状态输出时间间隔 (秒)
pub report_interval: u64,
}
#[inline(always)]
pub fn cacl(config: CacluateConfig, id: u64, outfile: &PathBuf) {
// 初始猜测的时间间隔
let mut report_interval = 10000; // 第一次猜测测 1w 次, 获取初始数据
let mut run_speed = 0.0;
let mut start_time = std::time::Instant::now();
let mut k: u64 = 0;
let mut get_count: u32 = 0;
let xuping = crate::evaluate::xuping::XuPing1_3_1::new(5000.0);
// 提前准备好 team_namer
let team_namer = TeamNamer::new(&config.team).unwrap();
for i in (config.start + id..config.end).step_by(config.thread_count as usize) {
let name = gen_name(i as u64);
let namer = Namer::new_from_team_namer_unchecked(&team_namer, name.as_str());
let prop = namer.get_property();
if (prop + config.prop_allow as f32) > config.prop_expect as f32 {
let name = gen_name(i as u64);
let full_name = format!("{}@{}", name, config.team);
// 虚评
// if crate::evaluate::xuping::XuPing1_3_1::evaluate(&namer) {
// continue;
// }
let xu = crate::evaluate::xuping::XuPing1_3_1::evaluate(&namer);
debug!("Id:{:>15}|{:>5}|{}|{}", i, full_name, xu, show_name(&namer));
if xu < 5000.0 {
continue;
}
get_count += 1;
info!("Id:{:>15}|{}|{}", i, full_name, show_name(&namer));
// 写入 (写到最后一行)
match std::fs::OpenOptions::new()
.append(true)
.create(true)
.open(outfile)
.and_then(|mut file| file.write(format!("{}\n", full_name).as_bytes()))
{
Ok(_) => {}
Err(e) => {
warn!("写入文件<{:?}>失败: {}", outfile, e);
}
}
}
k += 1;
if k >= report_interval as u64 {
let now = std::time::Instant::now();
let d_t: std::time::Duration = now.duration_since(start_time);
let new_run_speed = k as f64 / d_t.as_secs_f64();
// 预估剩余时间
let wait_time = (config.end - i) / config.thread_count as u64 / new_run_speed as u64;
let wait_time = chrono::Duration::seconds(wait_time as i64);
// 转换成 时:分:秒
// 根据实际运行速率来调整 report_interval
report_interval = config.report_interval * new_run_speed as u64;
info!(
"|{:>2}|Id:{:>15}|{:6.2}/s {:>3.3}E/d {:>5.2}{}|{:<3}|预计:{}:{}:{}|",
id,
i,
new_run_speed,
new_run_speed * 8.64 / 1_0000.0,
d_t.as_secs_f64(),
// 根据对比上一段运行速度 输出 emoji
// ⬆️ ➡️ ⬇️
if new_run_speed > run_speed {
"⬆️".green()
} else if new_run_speed < run_speed {
// 橙色
"⬇️".red()
} else {
"➡️".blue()
},
get_count,
wait_time.num_hours(),
wait_time.num_minutes() % 60,
wait_time.num_seconds() % 60
);
run_speed = new_run_speed;
start_time = std::time::Instant::now();
k = 0;
}
}
}

View File

@ -1,330 +1,12 @@
pub mod base;
const MODULE: [f64; 989] = [ pub mod xuping;
1.950620413256, 0.686047371475, 37.078806981531, -56.350182111228,
-86.245538958342, -70.141561618677, -15.705012389623, 72.501018127843,
-33.702622017009, -10.578427274580, -41.918786497097, -14.319650283843,
-33.392078588817, -38.191147918006, -10.809076902675, -33.807124772749,
-21.116423022245, -20.733167567407, -36.166017959307, 17.686015055598,
-13.333844495773, -1.382769848072, -21.035024270961, -23.329182612127,
-5.601802089714, -4.089879184916, -32.623499273312, 5.412998926765,
-6.926216584115, 76.088938578011, 15.172664342720, 38.764104717252,
30.786058425809, 3.811095882771, 7.032399235986, -17.795957866920,
8.106663713431, -26.030257039986, -12.592402722820, 8.735178591009,
-8.282449611019, 9.435398534886, -35.962796961199, -0.017072080826,
0.092842987372, -0.125223181517, 0.117867823429, 0.069337828290,
0.110582912939, -0.098537752979, 0.041686156083, 0.025032874748,
-0.008033810105, 0.031921576069, 0.006499147544, 0.015651157911,
0.029422894750, 0.025319106237, 0.031610567410, 0.013576566758,
-0.001538744074, 0.033972672188, 0.007354506982, 0.006888857456,
0.002360490562, 0.012195464271, 0.014023599644, 0.021974196237,
0.024141285754, -0.042473314562, 0.008437345803, 0.040913404735,
-0.001477073691, 0.023277320259, 0.070273102847, 0.010411775062,
-0.030366668677, 0.053633760255, 0.000417457994, -0.036552196101,
-0.001827120822, 0.010624376666, 0.005374719146, 0.021572231497,
0.007695603454, -0.032051066673, 0.022163108422, 0.236922733675,
-0.090691069015, 0.130451908042, -0.284777001204, 0.281178340927,
-0.370189568015, -0.132256138312, -0.118325811628, -0.111037458148,
-0.149325311559, -0.018874760055, -0.103128068239, 0.184880267353,
0.167233497412, -0.025594729705, 0.087945487194, -0.111550780856,
-0.125867358856, -0.057154884198, -0.073419542395, -0.083728018013,
-0.029475459693, -0.036997271688, -0.130706147894, 0.251220876851,
-0.108034375915, -0.092592236193, -0.416150092511, -0.200030954323,
-0.335672099883, -0.166032644719, 0.061565184689, -0.143114252112,
0.117354414638, 0.077197217568, -0.005011675580, 0.147412423938,
-0.087680127423, -0.026221206178, 0.029798553374, 0.223770405298,
-0.258646161634, 0.328601917614, 0.138436437563, 0.143798560018,
-0.205842587608, 0.065962618070, 0.098415994416, 0.031884214640,
0.078796294448, 0.066447210364, -0.007842834092, 0.073540704438,
0.041048740278, 0.077513460327, -0.021192357484, -0.160291135892,
0.098243065220, 0.018918954681, 0.026108842874, -0.071786077568,
0.028933526504, 0.044701514728, 0.127608655804, 0.142934869247,
-0.272205511976, 0.055157822970, 0.186288794754, 0.197043041367,
0.218373232333, 0.174530702788, 0.070406880413, -0.058171052443,
0.195882743478, -0.107106470947, -0.083638055945, 0.050610606994,
-0.039237357934, 0.102356417358, 0.117101801530, -0.017312125815,
-0.195041016353, -0.060605215358, 0.110902812581, -0.006101685426,
0.414533038290, -0.092949938951, 0.004694096297, 0.054970318173,
0.030494956830, -0.062755810070, 0.066840872180, -0.007448548514,
-0.053161479236, -0.022380595889, -0.021870487779, 0.102964462871,
0.024399194551, 0.045011464481, 0.026959176620, 0.047768522943,
0.088833929337, -0.030391901480, -0.042344648612, -0.021700020685,
0.288526041304, -0.004928292352, -0.069596560216, -0.204870021567,
-0.219207768688, -0.345584402686, -0.063707006600, 0.020361077221,
-0.170847181719, 0.094028133319, 0.023539894888, 0.013409305715,
0.023856847248, -0.067876967153, -0.137727672560, -0.005541909944,
0.273277074386, 0.130327785323, 0.075705563013, 0.265801150948,
0.040811489949, 0.012086519491, 0.064685654879, 0.056547010781,
0.068382559504, 0.053972263401, 0.061533519745, 0.041652300204,
0.081098498803, -0.025366811878, 0.048168978340, 0.038088019968,
-0.090290776245, 0.015893631609, 0.003670368232, 0.089512073742,
-0.031128042122, -0.035675351967, -0.044942864507, 0.133486431326,
-0.013405091817, 0.001754281342, -0.199220214463, -0.093665806440,
-0.256760424456, -0.068088646739, 0.071100061793, -0.084022073730,
0.008296586660, 0.060611404482, 0.034391933692, 0.016280568232,
-0.006163274726, -0.008288146483, 0.021330713655, 0.100206899202,
0.098614154012, 0.274063679202, 0.148531450008, 0.277826193435,
0.153822345391, 0.192259450692, 0.254713028517, 0.250724360211,
0.255723580793, -0.131816302737, -0.093091061135, 0.330539674073,
0.124475381854, 0.189381964996, -0.032363814789, -0.011865772657,
0.073296703158, 0.163853541482, 0.075654991185, -0.057293610317,
0.111618096345, 0.274168963139, -0.045823459290, -0.160288340573,
-0.107296022844, -0.135831496334, -0.224615266600, -0.154340286526,
0.084224877232, -0.141072804518, 0.120833054294, 0.090974089020,
0.074649812082, 0.036490667754, -0.052933835759, -0.039421413124,
0.006135797482, 0.248750673897, -0.212029563376, 0.146591910640,
0.070442405144, 0.031836318606, 0.106784783589, 0.104753708909,
-0.012372317073, 0.088507508232, 0.054798106532, 0.085299294738,
0.016044969467, -0.112402954915, 0.111900251973, 0.013371724428,
0.034078840415, 0.042227867898, 0.030851903266, 0.127685870108,
0.076211910992, 0.029672933991, -0.240925299587, 0.165732848748,
0.203749251923, 0.210871626145, 0.287987603485, 0.207171081643,
0.121039088549, -0.044189113015, 0.231618529025, -0.023255941877,
-0.041856135446, 0.070405803829, -0.017319244110, 0.106434918183,
0.171343160663, -0.015075460490, -0.112775455174, -0.372670996695,
0.086704666131, 0.076496746557, 0.127526592877, -0.012260110098,
0.102565117459, 0.076270079702, 0.003371890099, 0.083478220541,
0.086270239561, 0.240755219878, 0.055716737997, 0.083974100250,
0.176529769692, 0.094940290530, 0.050874389917, 0.142108132900,
0.004139679133, 0.078178987014, 0.224829413216, -0.005670729553,
0.039605176446, -0.091278138630, -0.003883078689, 0.064533127177,
0.025282380290, -0.004705028142, -0.129132996259, 0.089989403828,
0.003366345478, 0.069543574410, 0.024091011112, -0.012003135849,
0.020826735487, -0.044259804423, 0.167984222568, 0.043792715810,
-0.080810496219, -0.086977347241, -0.107831346727, -0.099520588934,
-0.129528708604, 0.008095793219, -0.092163397529, -0.041638793132,
-0.007103760522, -0.067022046779, -0.086952285942, -0.077147633687,
-0.045730738100, -0.073942616695, -0.079935964809, 0.033310797636,
-0.096470960788, -0.054600767427, -0.036653425876, -0.023164598228,
-0.154826667725, -0.069999127373, -0.116473513882, -0.135592647105,
0.017475255709, 0.024126716370, -0.006620648295, -0.010342626640,
-0.048219570992, 0.028562691365, 0.002585969344, 0.036319735390,
-0.058642818260, 0.029467208856, 0.020938526296, -0.078122627603,
-0.116327962720, -0.043032082942, -0.067333347384, -0.046107429052,
-0.069539536139, -0.060080493114, -0.019356328396, -0.101305799377,
-0.042149854661, -0.069700501812, -0.023428614188, -0.053343066707,
-0.002695820213, 0.013519155186, -0.088431387441, -0.057766410383,
-0.122639219906, -0.066978402817, -0.161076714656, 0.002614383333,
0.031601492207, -0.055178630585, -0.015690512204, 0.023832482878,
-0.052418790287, -0.002011238366, 0.001505485029, 0.010242003951,
-0.010147518066, -0.033197882930, -0.019369071234, 0.017054414572,
0.034369944882, -0.055316037392, -0.059452531915, -0.111609536255,
-0.105959491664, -0.031894456199, -0.107358448129, 0.026093026587,
-0.023211922001, -0.037207763482, -0.057240989053, -0.007450363111,
-0.032940635320, -0.011011247851, 0.031688028283, -0.078487502245,
-0.043123723991, -0.001217863847, 0.022753832241, -0.156667554878,
-0.090410446171, 0.054812636778, -0.070289401278, 0.019307995665,
0.004169186054, -0.013867997717, -0.024734884025, -0.005801782214,
0.000126928741, 0.002262509579, -0.015851708319, 0.004113930494,
0.044421311025, 0.017748424708, -0.073534043660, -0.021131286276,
-0.083469623583, -0.084264022938, -0.057237584686, -0.068991208521,
-0.117663576133, -0.063884024830, -0.076097190446, -0.033535011829,
-0.081899353210, -0.031993336034, -0.001533735338, -0.120878957445,
0.002321414453, 0.008411560288, -0.001992214658, -0.177646843698,
0.000096160020, 0.032527391370, -0.104029732834, 0.017672107177,
-0.033825447055, 0.023152474904, 0.021848950289, -0.082615374631,
0.004229588893, -0.006252784956, 0.017804283859, 0.028831822603,
0.031516721560, 0.016148213510, -0.049360216968, -0.013066076204,
-0.064898201280, -0.078278264716, 0.016124765085, -0.053233851613,
-0.027059020039, -0.020218799933, -0.009050349394, -0.033569587196,
-0.042132015083, 0.000251197438, -0.053811865213, -0.039640214804,
0.023742972405, 0.023879197114, -0.118986800208, 0.039744853889,
-0.045265252571, 0.013168535188, -0.043820356299, -0.053525866676,
-0.010265946777, -0.011998203812, 0.036288912027, 0.002226328972,
0.038497478633, -0.018763787859, 0.018957051244, 0.047391681914,
0.033036730807, -0.082520390445, -0.074737248993, 0.012900421600,
0.028011611543, -0.041147517580, -0.094557012083, -0.070467310522,
-0.032350832458, -0.076083203264, 0.020344550900, -0.020073994561,
-0.105017114758, 0.005867652209, -0.048793158718, -0.045146293387,
-0.147806860705, -0.074039457679, -0.033949909024, -0.040118614411,
0.000770958192, 0.013855320722, -0.039607573304, 0.012498005512,
-0.006939340550, -0.007676876403, 0.017517467668, 0.025592362828,
-0.012876866768, 0.009012106697, -0.003325525307, -0.112945873134,
-0.096422462973, -0.016652526311, -0.027736961169, -0.097349792340,
-0.077344398908, -0.029444554003, -0.063144970299, -0.086112352963,
-0.037448279910, -0.081315033259, -0.056791429110, -0.010513051658,
-0.025575503893, -0.144508702026, -0.010663316073, -0.138925485323,
-0.085438889188, 0.021722897852, 0.035862835029, 0.027305567412,
0.015802250815, -0.084047102823, -0.036080683633, -0.072366115018,
-0.016489751149, 0.051195145070, 0.055596299374, 0.020721114696,
-0.074548858098, 0.015403465853, -0.028242572587, -0.061773150577,
0.008106071927, -0.045318487343, -0.072665986891, -0.039966131325,
0.046040594721, -0.048258013725, 0.018410098746, -0.011863940852,
0.004584252051, -0.174520547599, -0.046844101092, -0.126586175679,
-0.034129399731, -0.031862770863, 0.054300104094, -0.001207761279,
0.032582755464, 0.019720165339, 0.010909255480, -0.004294094553,
0.049161057941, -0.046629565228, 0.076675888506, -0.013905877106,
-0.068089983229, -0.034061588389, -0.030172648394, -0.045642555317,
-0.118287038999, -0.062835505789, -0.023000239293, 0.011670953926,
-0.114637955498, -0.049646458595, -0.031950203442, -0.100465627522,
-0.171144479310, -0.086456974325, 0.005187521028, -0.136724768858,
-0.006498474101, 0.104832433675, -0.013982731977, -0.009865169866,
-0.012308138596, -0.009259533193, -0.070090974300, -0.060135565555,
-0.008762920234, -0.017947562880, -0.008528248421, 0.016949338529,
-0.080045847612, -0.048199433852, 0.001151565315, -0.074554255431,
-0.003890588686, 0.180852777286, -0.033539407430, 0.030997566757,
0.031564605351, -0.036482591854, -0.080778175212, -0.149497735215,
0.201726261554, -0.051683467647, -0.010443240902, 0.049294071546,
-0.033631234141, 0.020930366639, 0.126257920978, -0.056636247562,
-0.008344450472, 0.093984023302, 0.060661781322, 0.001037366826,
0.025987019933, -0.104023239344, -0.030765776252, -0.066813748509,
-0.061760826686, -0.028151959372, 0.050643283828, -0.091476240751,
-0.021674289605, -0.012634923913, -0.057388008033, -0.127424095951,
-0.029311259297, -0.193633611365, -0.104603998849, 0.000392766036,
0.024054848967, -0.007730734800, -0.054411222446, -0.013372284452,
0.051652414019, -0.104272875526, -0.003170100981, 0.016385920170,
0.016157115952, 0.013401544933, -0.054558721496, -0.031782948351,
-0.097178250079, -0.040177337249, -0.006973538093, -0.064894000503,
-0.091341313860, -0.061170298368, -0.156608499653, -0.151261151107,
-0.064884240687, 0.178537508632, -0.108705687120, 0.003524304424,
-0.026938409322, 0.001751256110, 0.041003258290, -0.025367484612,
-0.005758421555, -0.087636153640, 0.003412004612, 0.014258788615,
-0.026574512015, 0.065100412835, 0.033114818387, -0.085128793699,
0.033834283989, -0.007307222382, -0.060262320907, -0.071021286830,
0.001553537663, -0.095208937254, -0.072717138812, -0.008095069994,
0.058992186260, 0.045300898293, 0.028111216733, 0.027733461346,
0.016883748700, 0.068534228905, 0.029051008074, 0.009568239785,
0.000951876245, -0.132517927694, -0.099951120813, 0.065130516865,
0.028701429533, -0.037605115499, 0.054201981662, 0.046251261300,
-0.054669824609, -0.041092087601, -0.161630656400, -0.103247311366,
-0.092132235763, 0.104494323063, 0.031369139118, -0.018441849253,
0.013159013263, 0.033017142162, -0.029751089274, -0.075874522084,
-0.018845381437, 0.013430361839, -0.067897165390, -0.073925924278,
-0.004501306631, 0.015306682849, -0.010098321739, -0.020321668764,
0.008407148473, -0.081682918831, -0.080692593418, -0.146994395110,
-0.082263977261, -0.168858893072, -0.064305106660, 0.005570719161,
-0.120565725934, 0.020801229776, 0.000952984479, -0.012695372644,
-0.040614948302, -0.019076926527, -0.000847676020, -0.023816721127,
-0.030737724221, -0.004551647167, 0.044721425895, 0.019894236634,
-0.031361530866, -0.005232302905, -0.041164745538, -0.077838095267,
0.026930086863, -0.086655099049, 0.047476787322, -0.012475036019,
-0.031821077418, 0.026801424962, -0.055203572301, 0.041224767276,
0.032241885267, -0.006881223703, 0.031465317805, 0.025327885583,
-0.107080718803, 0.032738798059, 0.041568036022, -0.018316787886,
0.034496648411, 0.093577775109, 0.012315336352, 0.012340133019,
-0.016037108414, -0.010201866245, 0.140630216760, 0.038073422711,
-0.045214015193, -0.012977453281, 0.027983694630, 0.009281741462,
0.070488137218, -0.054207442557, 0.029109486775, 0.054366064949,
-0.065254858837, 0.003205447585, -0.014330047914, -0.053989851192,
-0.100072479458, -0.057296669891, -0.169017710982, -0.075142982274,
-0.010992948401, -0.108967608514, 0.001595832047, 0.005204456245,
-0.006685476322, -0.014756992190, -0.009686263343, -0.004352954115,
-0.015522457066, 0.000179678964, -0.003989813028, 0.049785609216,
-0.036249107585, -0.003190580762, -0.067559995328, -0.113835906985,
-0.001649982396, 0.102498411295, -0.109275479710, -0.036655929029,
0.108810809138, -0.016820933613, -0.001625877159, 0.153036271967,
0.000271941090, 0.035327171961, 0.035980684636, 0.011238991165,
-0.019171168387, -0.021456961038, -0.087812945005, -0.100018592361,
-0.109065849603, 0.062029247441, -0.219136591898, -0.010692652949,
0.015056480429, -0.021507999684, 0.024755880313, -0.009440778801,
0.012423044125, -0.095945531533, 0.009020644349, -0.035355496473,
0.031827480685, -0.070860703486, -0.206637247393, -0.155403501830,
-0.179485839688, -0.187548612314, 0.003886995886, -0.013703150806,
0.000803974794, 0.002365524203, 0.080127679063, 0.030755526719,
0.048964118305, 0.026749257198, 0.016396989744, 0.088475720851,
-0.053913788203, -0.199728700757, -0.051725224519, -0.128257790360,
-0.028830383614, -0.159500962075, -0.013640779585, -0.016977746021,
0.007040711634, -0.035107408327, -0.029244230216, 0.005583554526,
-0.028170178519, -0.006038904525, -0.018647591281, -0.052244808004,
-0.015988862066, -0.016767711750, 0.047179147680, -0.031613465314,
0.082236758453, -0.010335508060, 0.008537534076, -0.031751024873,
-0.002069329496, 0.077650266221, 0.012608880222, 0.070251114609,
0.075002102822, -0.002995261915, -0.078942741615, 0.057856878787,
0.153430484567, 0.051558042113, -0.069189571793, -0.006914046025,
-0.215680623689, 0.025256394453, 0.043859782606, 0.001750740500,
0.029230558113, -0.046125890268, -0.025134970671, -0.020862016864,
0.010929066832, 0.007863683449, -0.083981330388, 0.041963402277,
-0.022412307272, 0.090580474781, 0.020051228823, 0.062968213032,
0.005707266912, 0.047467475139, 0.097563068857, 0.083167019386,
0.026752952531, 0.079635850095, -0.068390318576, -0.029565371105,
0.014255052975, 0.069262154841, 0.087730379014, 0.123778986279,
0.010099119378, -0.007654739242, -0.005542174957, 0.053077753355,
0.075026262765, -0.003774940341, -0.040023462142, 0.021045418641,
-0.026786136833, -0.013287394176, 0.040506083517, 0.013198475516,
-0.077731681385, -0.008523656573, -0.031691572766, -0.038457031052,
0.028666688385, 0.052397362325, 0.022568832943, -0.052426050966,
0.079952066788, 0.051294023843, -0.081081839206, 0.179119007880,
-0.018137760286, -0.007661618767, 0.002945755070, 0.048597405630,
0.031179691213, 0.030436816708, -0.042557440634, -0.003084028063,
-0.111980160770, -0.002839888114, 0.062186999524, -0.046313493804,
-0.036207354442, 0.058055631445, -0.051073587305, -0.021191938491,
-0.238232953617];
const INTERCEPT: f64 = 743.345708241252;
/// 虚评 1.3.1
#[cfg(feature = "simd")]
use std::simd::f64x64;
use crate::name::Namer; use crate::name::Namer;
pub fn predict(name: &Namer) -> f64 { /// 评价器
let mut sum = INTERCEPT; pub trait NamerEvaluater {
/* const NAME: &'static str;
memset(st + 8, 0, 35 * sizeof(int)); const VERSION: &'static str;
for (int i = 0; i < 16; i++) fn check(&self, name: &Namer) -> bool;
if (context::freq[i]) st[context::skill[i] + 8] = context::freq[i]; */ fn evaluate(name: &Namer) -> f64;
// 长度取 64, 方便simd填充
let mut st: [f64; 64] = [0.0; 64];
for i in 0..7 {
st[i] = name.name_prop[i] as f64;
} }
for i in 0..16 {
if name.skl_freq[i] != 0 {
st[name.skl_id[i] as usize + 8] = name.skl_freq[i] as f64;
}
}
/*
int cnt = 0;
for (int i = 0; i < 43; i++) {
pred += st[i] * model[cnt++];
}
for (int i = 0; i < 43; i++) {
for (int j = i; j < 43; j++) {
pred += st[i] * st[j] * model[cnt++];
}
} */
// use simd
#[cfg(feature = "simd")]
{
// 先准备数据
let mut target = [0_f64; 989];
target[0..43].copy_from_slice(&st[0..43]);
let mut k = 43;
// 43 * 43
for i in 0..43 {
for j in i..43 {
target[k] = st[i] * st[j];
k += 1;
}
}
// 准备模型数据
let mut simds = MODULE.clone();
let simd_module = simds.as_simd_mut::<64>();
let simd_target = target.as_simd_mut::<64>();
// 前面多出来的
for i in 0..simd_module.0.len() {
sum += simd_module.0[i] * simd_target.0[i];
}
// 主! 体!
}
#[cfg(not(feature = "simd"))]
{
let mut cnt = 0;
for i in 0..43 {
sum += st[i] * MODEL[cnt];
cnt += 1;
for j in i..43 {
sum += st[i] * st[j] * MODEL[cnt];
cnt += 1;
}
}
}
sum
}

1
src/evaluate/base.rs Normal file
View File

@ -0,0 +1 @@

30
src/evaluate/xuping.rs Normal file
View File

@ -0,0 +1,30 @@
mod eval;
mod model13;
mod model20;
use crate::evaluate::NamerEvaluater;
use crate::name::Namer;
pub struct XuPing1_3_1 {
pub limit: f64,
}
impl XuPing1_3_1 {
pub fn new(limit: f64) -> Self { Self { limit } }
}
impl NamerEvaluater for XuPing1_3_1 {
const NAME: &'static str = "虚评";
const VERSION: &'static str = "1.3.1";
fn evaluate(name: &Namer) -> f64 { eval::predict_13(name) }
fn check(&self, name: &Namer) -> bool { eval::predict_13(name) > self.limit }
}
pub struct XuPing2_0_1015;
impl NamerEvaluater for XuPing2_0_1015 {
const NAME: &'static str = "虚评";
const VERSION: &'static str = "2.0-10.15";
fn evaluate(name: &Namer) -> f64 { eval::predict_20(name) }
fn check(&self, name: &Namer) -> bool { eval::predict_20(name) > 0.0 }
}

143
src/evaluate/xuping/eval.rs Normal file
View File

@ -0,0 +1,143 @@
/// 虚评 1.3.1
#[cfg(feature = "simd")]
use std::simd::f64x64;
#[cfg(feature = "simd")]
use std::simd::num::SimdFloat;
use tracing::debug;
use crate::evaluate::xuping::model13 as xuping13;
use crate::name::Namer;
pub fn predict_13(name: &Namer) -> f64 {
let mut sum = xuping13::INTERCEPT;
/*
memset(st + 8, 0, 35 * sizeof(int));
for (int i = 0; i < 16; i++)
if (context::freq[i]) st[context::skill[i] + 8] = context::freq[i]; */
// use simd
// #[cfg(feature = "simd")]
#[cfg(not(feature = "simd"))]
{
let mut st: [f64; 64] = [0.0; 64];
// 长度取 64, 方便simd填充
for i in 0..7 {
st[i] = name.name_prop[i] as f64;
}
for i in 0..16 {
if name.skl_freq[i] != 0 {
st[name.skl_id[i] as usize + 8] = name.skl_freq[i] as f64;
}
}
// 先准备数据
let mut target = [0_f64; 989];
target[0..43].copy_from_slice(&st[0..43]);
let mut k = 43;
// 43 * 43
for i in 0..43 {
for j in i..43 {
target[k] = st[i] * st[j];
k += 1;
}
}
// 准备模型数据
let mut simds = xuping13::MODULE.clone();
let simd_module = simds.as_simd_mut::<64>();
let simd_target = target.as_simd_mut::<64>();
println!("module = {:?}", simd_module);
println!("target = {:?}", simd_target);
// 前面多出来的
for i in 0..simd_module.0.len() - 1 {
sum += simd_module.0[i] * simd_target.0[i];
}
debug!("sum = {}", sum);
// 主! 体!
let mut tmp = f64x64::splat(0.0);
for i in 0..simd_module.1.len() - 1 {
tmp += simd_module.1[i] * simd_target.1[i];
}
sum += tmp.reduce_sum();
debug!("sum = {}", sum);
// 后面多出来的
for i in 0..simd_module.2.len() - 1 {
sum += simd_module.2[i] * simd_target.2[i];
}
debug!("sum = {}", sum);
}
// #[cfg(not(feature = "simd"))]
#[cfg(feature = "simd")]
{
let mut st: [f64; 43] = [0.0; 43];
// 长度取 64, 方便simd填充
for i in 0..7 {
st[i] = name.name_prop[i] as f64;
}
for i in 0..16 {
if name.skl_freq[i] != 0 {
st[name.skl_id[i] as usize + 8] = name.skl_freq[i] as f64;
}
}
let mut cnt = 0;
for i in 0..43 {
sum += st[i] * xuping13::MODULE[cnt];
print!("{} ", sum);
cnt += 1;
}
for i in 0..43 {
for j in i..43 {
sum += st[i] * st[j] * xuping13::MODULE[cnt];
print!("{} ", sum);
cnt += 1;
}
}
}
sum
}
/*function Poly(x) {
var xp = new Array()
for (let y = 0; y < 1034; y++) {
var l = 44
var i = 0, p = 0, q = 0, r = 0
var j = y
for (let k = 0; k < 45; k++) {
i++;
if (i > 2) p++;
q = j;
j = j - l + p;
if (j < 0) break;
}
if (i == 1) r = x[q]
if (i > 1) {
r = x[p] * x[p + q]
}
xp[y] = r
}
return xp
} */
pub fn poly(name: &Namer) -> [f64; 1034] {
let mut result = [0.0; 1034];
result
}
pub fn predict_20(name: &Namer) -> f64 { 0.0 }
#[cfg(test)]
mod test {
use super::*;
use crate::name::Namer;
#[test]
fn xuping_13_test() {
let mut namer = Namer::new(&"x@x".to_string()).unwrap();
namer.update_skill();
println!("{:?}", predict_13(&namer));
panic!();
}
}

View File

@ -0,0 +1,993 @@
pub const MODULE: [f64; 989] = [
1.950620413256,
0.686047371475,
37.078806981531,
-56.350182111228,
-86.245538958342,
-70.141561618677,
-15.705012389623,
72.501018127843,
-33.702622017009,
-10.578427274580,
-41.918786497097,
-14.319650283843,
-33.392078588817,
-38.191147918006,
-10.809076902675,
-33.807124772749,
-21.116423022245,
-20.733167567407,
-36.166017959307,
17.686015055598,
-13.333844495773,
-1.382769848072,
-21.035024270961,
-23.329182612127,
-5.601802089714,
-4.089879184916,
-32.623499273312,
5.412998926765,
-6.926216584115,
76.088938578011,
15.172664342720,
38.764104717252,
30.786058425809,
3.811095882771,
7.032399235986,
-17.795957866920,
8.106663713431,
-26.030257039986,
-12.592402722820,
8.735178591009,
-8.282449611019,
9.435398534886,
-35.962796961199,
-0.017072080826,
0.092842987372,
-0.125223181517,
0.117867823429,
0.069337828290,
0.110582912939,
-0.098537752979,
0.041686156083,
0.025032874748,
-0.008033810105,
0.031921576069,
0.006499147544,
0.015651157911,
0.029422894750,
0.025319106237,
0.031610567410,
0.013576566758,
-0.001538744074,
0.033972672188,
0.007354506982,
0.006888857456,
0.002360490562,
0.012195464271,
0.014023599644,
0.021974196237,
0.024141285754,
-0.042473314562,
0.008437345803,
0.040913404735,
-0.001477073691,
0.023277320259,
0.070273102847,
0.010411775062,
-0.030366668677,
0.053633760255,
0.000417457994,
-0.036552196101,
-0.001827120822,
0.010624376666,
0.005374719146,
0.021572231497,
0.007695603454,
-0.032051066673,
0.022163108422,
0.236922733675,
-0.090691069015,
0.130451908042,
-0.284777001204,
0.281178340927,
-0.370189568015,
-0.132256138312,
-0.118325811628,
-0.111037458148,
-0.149325311559,
-0.018874760055,
-0.103128068239,
0.184880267353,
0.167233497412,
-0.025594729705,
0.087945487194,
-0.111550780856,
-0.125867358856,
-0.057154884198,
-0.073419542395,
-0.083728018013,
-0.029475459693,
-0.036997271688,
-0.130706147894,
0.251220876851,
-0.108034375915,
-0.092592236193,
-0.416150092511,
-0.200030954323,
-0.335672099883,
-0.166032644719,
0.061565184689,
-0.143114252112,
0.117354414638,
0.077197217568,
-0.005011675580,
0.147412423938,
-0.087680127423,
-0.026221206178,
0.029798553374,
0.223770405298,
-0.258646161634,
0.328601917614,
0.138436437563,
0.143798560018,
-0.205842587608,
0.065962618070,
0.098415994416,
0.031884214640,
0.078796294448,
0.066447210364,
-0.007842834092,
0.073540704438,
0.041048740278,
0.077513460327,
-0.021192357484,
-0.160291135892,
0.098243065220,
0.018918954681,
0.026108842874,
-0.071786077568,
0.028933526504,
0.044701514728,
0.127608655804,
0.142934869247,
-0.272205511976,
0.055157822970,
0.186288794754,
0.197043041367,
0.218373232333,
0.174530702788,
0.070406880413,
-0.058171052443,
0.195882743478,
-0.107106470947,
-0.083638055945,
0.050610606994,
-0.039237357934,
0.102356417358,
0.117101801530,
-0.017312125815,
-0.195041016353,
-0.060605215358,
0.110902812581,
-0.006101685426,
0.414533038290,
-0.092949938951,
0.004694096297,
0.054970318173,
0.030494956830,
-0.062755810070,
0.066840872180,
-0.007448548514,
-0.053161479236,
-0.022380595889,
-0.021870487779,
0.102964462871,
0.024399194551,
0.045011464481,
0.026959176620,
0.047768522943,
0.088833929337,
-0.030391901480,
-0.042344648612,
-0.021700020685,
0.288526041304,
-0.004928292352,
-0.069596560216,
-0.204870021567,
-0.219207768688,
-0.345584402686,
-0.063707006600,
0.020361077221,
-0.170847181719,
0.094028133319,
0.023539894888,
0.013409305715,
0.023856847248,
-0.067876967153,
-0.137727672560,
-0.005541909944,
0.273277074386,
0.130327785323,
0.075705563013,
0.265801150948,
0.040811489949,
0.012086519491,
0.064685654879,
0.056547010781,
0.068382559504,
0.053972263401,
0.061533519745,
0.041652300204,
0.081098498803,
-0.025366811878,
0.048168978340,
0.038088019968,
-0.090290776245,
0.015893631609,
0.003670368232,
0.089512073742,
-0.031128042122,
-0.035675351967,
-0.044942864507,
0.133486431326,
-0.013405091817,
0.001754281342,
-0.199220214463,
-0.093665806440,
-0.256760424456,
-0.068088646739,
0.071100061793,
-0.084022073730,
0.008296586660,
0.060611404482,
0.034391933692,
0.016280568232,
-0.006163274726,
-0.008288146483,
0.021330713655,
0.100206899202,
0.098614154012,
0.274063679202,
0.148531450008,
0.277826193435,
0.153822345391,
0.192259450692,
0.254713028517,
0.250724360211,
0.255723580793,
-0.131816302737,
-0.093091061135,
0.330539674073,
0.124475381854,
0.189381964996,
-0.032363814789,
-0.011865772657,
0.073296703158,
0.163853541482,
0.075654991185,
-0.057293610317,
0.111618096345,
0.274168963139,
-0.045823459290,
-0.160288340573,
-0.107296022844,
-0.135831496334,
-0.224615266600,
-0.154340286526,
0.084224877232,
-0.141072804518,
0.120833054294,
0.090974089020,
0.074649812082,
0.036490667754,
-0.052933835759,
-0.039421413124,
0.006135797482,
0.248750673897,
-0.212029563376,
0.146591910640,
0.070442405144,
0.031836318606,
0.106784783589,
0.104753708909,
-0.012372317073,
0.088507508232,
0.054798106532,
0.085299294738,
0.016044969467,
-0.112402954915,
0.111900251973,
0.013371724428,
0.034078840415,
0.042227867898,
0.030851903266,
0.127685870108,
0.076211910992,
0.029672933991,
-0.240925299587,
0.165732848748,
0.203749251923,
0.210871626145,
0.287987603485,
0.207171081643,
0.121039088549,
-0.044189113015,
0.231618529025,
-0.023255941877,
-0.041856135446,
0.070405803829,
-0.017319244110,
0.106434918183,
0.171343160663,
-0.015075460490,
-0.112775455174,
-0.372670996695,
0.086704666131,
0.076496746557,
0.127526592877,
-0.012260110098,
0.102565117459,
0.076270079702,
0.003371890099,
0.083478220541,
0.086270239561,
0.240755219878,
0.055716737997,
0.083974100250,
0.176529769692,
0.094940290530,
0.050874389917,
0.142108132900,
0.004139679133,
0.078178987014,
0.224829413216,
-0.005670729553,
0.039605176446,
-0.091278138630,
-0.003883078689,
0.064533127177,
0.025282380290,
-0.004705028142,
-0.129132996259,
0.089989403828,
0.003366345478,
0.069543574410,
0.024091011112,
-0.012003135849,
0.020826735487,
-0.044259804423,
0.167984222568,
0.043792715810,
-0.080810496219,
-0.086977347241,
-0.107831346727,
-0.099520588934,
-0.129528708604,
0.008095793219,
-0.092163397529,
-0.041638793132,
-0.007103760522,
-0.067022046779,
-0.086952285942,
-0.077147633687,
-0.045730738100,
-0.073942616695,
-0.079935964809,
0.033310797636,
-0.096470960788,
-0.054600767427,
-0.036653425876,
-0.023164598228,
-0.154826667725,
-0.069999127373,
-0.116473513882,
-0.135592647105,
0.017475255709,
0.024126716370,
-0.006620648295,
-0.010342626640,
-0.048219570992,
0.028562691365,
0.002585969344,
0.036319735390,
-0.058642818260,
0.029467208856,
0.020938526296,
-0.078122627603,
-0.116327962720,
-0.043032082942,
-0.067333347384,
-0.046107429052,
-0.069539536139,
-0.060080493114,
-0.019356328396,
-0.101305799377,
-0.042149854661,
-0.069700501812,
-0.023428614188,
-0.053343066707,
-0.002695820213,
0.013519155186,
-0.088431387441,
-0.057766410383,
-0.122639219906,
-0.066978402817,
-0.161076714656,
0.002614383333,
0.031601492207,
-0.055178630585,
-0.015690512204,
0.023832482878,
-0.052418790287,
-0.002011238366,
0.001505485029,
0.010242003951,
-0.010147518066,
-0.033197882930,
-0.019369071234,
0.017054414572,
0.034369944882,
-0.055316037392,
-0.059452531915,
-0.111609536255,
-0.105959491664,
-0.031894456199,
-0.107358448129,
0.026093026587,
-0.023211922001,
-0.037207763482,
-0.057240989053,
-0.007450363111,
-0.032940635320,
-0.011011247851,
0.031688028283,
-0.078487502245,
-0.043123723991,
-0.001217863847,
0.022753832241,
-0.156667554878,
-0.090410446171,
0.054812636778,
-0.070289401278,
0.019307995665,
0.004169186054,
-0.013867997717,
-0.024734884025,
-0.005801782214,
0.000126928741,
0.002262509579,
-0.015851708319,
0.004113930494,
0.044421311025,
0.017748424708,
-0.073534043660,
-0.021131286276,
-0.083469623583,
-0.084264022938,
-0.057237584686,
-0.068991208521,
-0.117663576133,
-0.063884024830,
-0.076097190446,
-0.033535011829,
-0.081899353210,
-0.031993336034,
-0.001533735338,
-0.120878957445,
0.002321414453,
0.008411560288,
-0.001992214658,
-0.177646843698,
0.000096160020,
0.032527391370,
-0.104029732834,
0.017672107177,
-0.033825447055,
0.023152474904,
0.021848950289,
-0.082615374631,
0.004229588893,
-0.006252784956,
0.017804283859,
0.028831822603,
0.031516721560,
0.016148213510,
-0.049360216968,
-0.013066076204,
-0.064898201280,
-0.078278264716,
0.016124765085,
-0.053233851613,
-0.027059020039,
-0.020218799933,
-0.009050349394,
-0.033569587196,
-0.042132015083,
0.000251197438,
-0.053811865213,
-0.039640214804,
0.023742972405,
0.023879197114,
-0.118986800208,
0.039744853889,
-0.045265252571,
0.013168535188,
-0.043820356299,
-0.053525866676,
-0.010265946777,
-0.011998203812,
0.036288912027,
0.002226328972,
0.038497478633,
-0.018763787859,
0.018957051244,
0.047391681914,
0.033036730807,
-0.082520390445,
-0.074737248993,
0.012900421600,
0.028011611543,
-0.041147517580,
-0.094557012083,
-0.070467310522,
-0.032350832458,
-0.076083203264,
0.020344550900,
-0.020073994561,
-0.105017114758,
0.005867652209,
-0.048793158718,
-0.045146293387,
-0.147806860705,
-0.074039457679,
-0.033949909024,
-0.040118614411,
0.000770958192,
0.013855320722,
-0.039607573304,
0.012498005512,
-0.006939340550,
-0.007676876403,
0.017517467668,
0.025592362828,
-0.012876866768,
0.009012106697,
-0.003325525307,
-0.112945873134,
-0.096422462973,
-0.016652526311,
-0.027736961169,
-0.097349792340,
-0.077344398908,
-0.029444554003,
-0.063144970299,
-0.086112352963,
-0.037448279910,
-0.081315033259,
-0.056791429110,
-0.010513051658,
-0.025575503893,
-0.144508702026,
-0.010663316073,
-0.138925485323,
-0.085438889188,
0.021722897852,
0.035862835029,
0.027305567412,
0.015802250815,
-0.084047102823,
-0.036080683633,
-0.072366115018,
-0.016489751149,
0.051195145070,
0.055596299374,
0.020721114696,
-0.074548858098,
0.015403465853,
-0.028242572587,
-0.061773150577,
0.008106071927,
-0.045318487343,
-0.072665986891,
-0.039966131325,
0.046040594721,
-0.048258013725,
0.018410098746,
-0.011863940852,
0.004584252051,
-0.174520547599,
-0.046844101092,
-0.126586175679,
-0.034129399731,
-0.031862770863,
0.054300104094,
-0.001207761279,
0.032582755464,
0.019720165339,
0.010909255480,
-0.004294094553,
0.049161057941,
-0.046629565228,
0.076675888506,
-0.013905877106,
-0.068089983229,
-0.034061588389,
-0.030172648394,
-0.045642555317,
-0.118287038999,
-0.062835505789,
-0.023000239293,
0.011670953926,
-0.114637955498,
-0.049646458595,
-0.031950203442,
-0.100465627522,
-0.171144479310,
-0.086456974325,
0.005187521028,
-0.136724768858,
-0.006498474101,
0.104832433675,
-0.013982731977,
-0.009865169866,
-0.012308138596,
-0.009259533193,
-0.070090974300,
-0.060135565555,
-0.008762920234,
-0.017947562880,
-0.008528248421,
0.016949338529,
-0.080045847612,
-0.048199433852,
0.001151565315,
-0.074554255431,
-0.003890588686,
0.180852777286,
-0.033539407430,
0.030997566757,
0.031564605351,
-0.036482591854,
-0.080778175212,
-0.149497735215,
0.201726261554,
-0.051683467647,
-0.010443240902,
0.049294071546,
-0.033631234141,
0.020930366639,
0.126257920978,
-0.056636247562,
-0.008344450472,
0.093984023302,
0.060661781322,
0.001037366826,
0.025987019933,
-0.104023239344,
-0.030765776252,
-0.066813748509,
-0.061760826686,
-0.028151959372,
0.050643283828,
-0.091476240751,
-0.021674289605,
-0.012634923913,
-0.057388008033,
-0.127424095951,
-0.029311259297,
-0.193633611365,
-0.104603998849,
0.000392766036,
0.024054848967,
-0.007730734800,
-0.054411222446,
-0.013372284452,
0.051652414019,
-0.104272875526,
-0.003170100981,
0.016385920170,
0.016157115952,
0.013401544933,
-0.054558721496,
-0.031782948351,
-0.097178250079,
-0.040177337249,
-0.006973538093,
-0.064894000503,
-0.091341313860,
-0.061170298368,
-0.156608499653,
-0.151261151107,
-0.064884240687,
0.178537508632,
-0.108705687120,
0.003524304424,
-0.026938409322,
0.001751256110,
0.041003258290,
-0.025367484612,
-0.005758421555,
-0.087636153640,
0.003412004612,
0.014258788615,
-0.026574512015,
0.065100412835,
0.033114818387,
-0.085128793699,
0.033834283989,
-0.007307222382,
-0.060262320907,
-0.071021286830,
0.001553537663,
-0.095208937254,
-0.072717138812,
-0.008095069994,
0.058992186260,
0.045300898293,
0.028111216733,
0.027733461346,
0.016883748700,
0.068534228905,
0.029051008074,
0.009568239785,
0.000951876245,
-0.132517927694,
-0.099951120813,
0.065130516865,
0.028701429533,
-0.037605115499,
0.054201981662,
0.046251261300,
-0.054669824609,
-0.041092087601,
-0.161630656400,
-0.103247311366,
-0.092132235763,
0.104494323063,
0.031369139118,
-0.018441849253,
0.013159013263,
0.033017142162,
-0.029751089274,
-0.075874522084,
-0.018845381437,
0.013430361839,
-0.067897165390,
-0.073925924278,
-0.004501306631,
0.015306682849,
-0.010098321739,
-0.020321668764,
0.008407148473,
-0.081682918831,
-0.080692593418,
-0.146994395110,
-0.082263977261,
-0.168858893072,
-0.064305106660,
0.005570719161,
-0.120565725934,
0.020801229776,
0.000952984479,
-0.012695372644,
-0.040614948302,
-0.019076926527,
-0.000847676020,
-0.023816721127,
-0.030737724221,
-0.004551647167,
0.044721425895,
0.019894236634,
-0.031361530866,
-0.005232302905,
-0.041164745538,
-0.077838095267,
0.026930086863,
-0.086655099049,
0.047476787322,
-0.012475036019,
-0.031821077418,
0.026801424962,
-0.055203572301,
0.041224767276,
0.032241885267,
-0.006881223703,
0.031465317805,
0.025327885583,
-0.107080718803,
0.032738798059,
0.041568036022,
-0.018316787886,
0.034496648411,
0.093577775109,
0.012315336352,
0.012340133019,
-0.016037108414,
-0.010201866245,
0.140630216760,
0.038073422711,
-0.045214015193,
-0.012977453281,
0.027983694630,
0.009281741462,
0.070488137218,
-0.054207442557,
0.029109486775,
0.054366064949,
-0.065254858837,
0.003205447585,
-0.014330047914,
-0.053989851192,
-0.100072479458,
-0.057296669891,
-0.169017710982,
-0.075142982274,
-0.010992948401,
-0.108967608514,
0.001595832047,
0.005204456245,
-0.006685476322,
-0.014756992190,
-0.009686263343,
-0.004352954115,
-0.015522457066,
0.000179678964,
-0.003989813028,
0.049785609216,
-0.036249107585,
-0.003190580762,
-0.067559995328,
-0.113835906985,
-0.001649982396,
0.102498411295,
-0.109275479710,
-0.036655929029,
0.108810809138,
-0.016820933613,
-0.001625877159,
0.153036271967,
0.000271941090,
0.035327171961,
0.035980684636,
0.011238991165,
-0.019171168387,
-0.021456961038,
-0.087812945005,
-0.100018592361,
-0.109065849603,
0.062029247441,
-0.219136591898,
-0.010692652949,
0.015056480429,
-0.021507999684,
0.024755880313,
-0.009440778801,
0.012423044125,
-0.095945531533,
0.009020644349,
-0.035355496473,
0.031827480685,
-0.070860703486,
-0.206637247393,
-0.155403501830,
-0.179485839688,
-0.187548612314,
0.003886995886,
-0.013703150806,
0.000803974794,
0.002365524203,
0.080127679063,
0.030755526719,
0.048964118305,
0.026749257198,
0.016396989744,
0.088475720851,
-0.053913788203,
-0.199728700757,
-0.051725224519,
-0.128257790360,
-0.028830383614,
-0.159500962075,
-0.013640779585,
-0.016977746021,
0.007040711634,
-0.035107408327,
-0.029244230216,
0.005583554526,
-0.028170178519,
-0.006038904525,
-0.018647591281,
-0.052244808004,
-0.015988862066,
-0.016767711750,
0.047179147680,
-0.031613465314,
0.082236758453,
-0.010335508060,
0.008537534076,
-0.031751024873,
-0.002069329496,
0.077650266221,
0.012608880222,
0.070251114609,
0.075002102822,
-0.002995261915,
-0.078942741615,
0.057856878787,
0.153430484567,
0.051558042113,
-0.069189571793,
-0.006914046025,
-0.215680623689,
0.025256394453,
0.043859782606,
0.001750740500,
0.029230558113,
-0.046125890268,
-0.025134970671,
-0.020862016864,
0.010929066832,
0.007863683449,
-0.083981330388,
0.041963402277,
-0.022412307272,
0.090580474781,
0.020051228823,
0.062968213032,
0.005707266912,
0.047467475139,
0.097563068857,
0.083167019386,
0.026752952531,
0.079635850095,
-0.068390318576,
-0.029565371105,
0.014255052975,
0.069262154841,
0.087730379014,
0.123778986279,
0.010099119378,
-0.007654739242,
-0.005542174957,
0.053077753355,
0.075026262765,
-0.003774940341,
-0.040023462142,
0.021045418641,
-0.026786136833,
-0.013287394176,
0.040506083517,
0.013198475516,
-0.077731681385,
-0.008523656573,
-0.031691572766,
-0.038457031052,
0.028666688385,
0.052397362325,
0.022568832943,
-0.052426050966,
0.079952066788,
0.051294023843,
-0.081081839206,
0.179119007880,
-0.018137760286,
-0.007661618767,
0.002945755070,
0.048597405630,
0.031179691213,
0.030436816708,
-0.042557440634,
-0.003084028063,
-0.111980160770,
-0.002839888114,
0.062186999524,
-0.046313493804,
-0.036207354442,
0.058055631445,
-0.051073587305,
-0.021191938491,
-0.238232953617,
];
pub const INTERCEPT: f64 = 743.345708241252;

File diff suppressed because it is too large Load Diff

1
src/generate.rs Normal file
View File

@ -0,0 +1 @@

View File

@ -1,42 +1,17 @@
#![feature(portable_simd)] #![feature(portable_simd)]
#![feature(slice_swap_unchecked)]
mod name; mod cacluate;
mod evaluate; mod evaluate;
mod generate;
mod name;
use std::{io::Write, path::PathBuf}; use std::path::PathBuf;
use base16384::Base16384Utf8;
use clap::Parser; use clap::Parser;
use colored::Colorize;
use tracing::{info, warn}; use tracing::{info, warn};
/// 根据 u64 生成对应的 name use crate::cacluate::CacluateConfig;
/// 转换成 base 16384
/// 禁用:
/// U00 ~ U1F ,换行,制表符 等
/// ? , 问号
/// U2000 - U202F , unicode特殊空格 等
/// 不可以空格开头
#[inline(always)]
pub fn gen_name(id: u64) -> String {
let id_bytes = id.to_be_bytes();
Base16384Utf8::encode(id_bytes.as_slice())
}
pub fn show_name(namer: &name::Namer) -> String {
format!(
"HP|{} 攻|{} 防|{} 速|{} 敏|{} 魔|{} 抗|{} 智|{} 八围:{}",
namer.name_prop[0],
namer.name_prop[1],
namer.name_prop[2],
namer.name_prop[3],
namer.name_prop[4],
namer.name_prop[5],
namer.name_prop[6],
namer.name_prop[7],
namer.get_property()
)
}
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
const allow_d: u32 = 10; const allow_d: u32 = 10;
@ -63,86 +38,22 @@ pub struct Command {
pub report_interval: u64, pub report_interval: u64,
} }
/// 大概的预计速度 impl Command {
/// 来自 5600X 的运行效率 pub fn as_cacl_config(&self) -> CacluateConfig {
pub const GUESS_SPEED: u64 = 623772; CacluateConfig {
start: self.start,
#[inline(always)] end: self.end,
fn cacl(config: Command, id: u64, outfile: &PathBuf) { thread_count: self.thread_count,
// 初始猜测的时间间隔 prop_expect: self.prop_expect,
let mut report_interval = config.report_interval * GUESS_SPEED; prop_allow: allow_d,
let mut run_speed = GUESS_SPEED as f64; team: self.team.clone(),
let mut start_time = std::time::Instant::now(); report_interval: self.report_interval,
let mut k: u64 = 0;
let mut get_count: u32 = 0;
// 提前准备好 team_namer
let team_namer = name::TeamNamer::new_unchecked(&config.team);
for i in (config.start + id..config.end).step_by(config.thread_count as usize) {
let name = gen_name(i as u64);
let namer = name::Namer::new_from_team_namer_unchecked(&team_namer, name.as_str());
let prop = namer.get_property();
if (prop + allow_d as f32) > config.prop_expect as f32 {
get_count += 1;
let name = gen_name(i as u64);
let full_name = format!("{}@{}", name, config.team);
info!("Id:{:>15}|{}|{}", i, full_name, show_name(&namer));
// 写入 (写到最后一行)
match std::fs::OpenOptions::new()
.append(true)
.create(true)
.open(outfile)
.and_then(|mut file| file.write(format!("{}\n", full_name).as_bytes()))
{
Ok(_) => {}
Err(e) => {
warn!("写入文件<{:?}>失败: {}", outfile, e);
}
}
}
k += 1;
if k >= report_interval as u64 {
let now = std::time::Instant::now();
let d_t: std::time::Duration = now.duration_since(start_time);
let new_run_speed = k as f64 / d_t.as_secs_f64();
// 预估剩余时间
let wait_time = (config.end - i) / config.thread_count as u64 / new_run_speed as u64;
let wait_time = chrono::Duration::seconds(wait_time as i64);
// 转换成 时:分:秒
// 根据实际运行速率来调整 report_interval
report_interval = config.report_interval * new_run_speed as u64;
info!(
"|{:>2}|Id:{:>15}|{:6.2}/s {:>3.3}E/d {:>5.2}{}|{:<3}|预计:{}:{}:{}|",
id,
i,
new_run_speed,
new_run_speed * 8.64 / 1_0000.0,
d_t.as_secs_f64(),
// 根据对比上一段运行速度 输出 emoji
// ⬆️ ➡️ ⬇️
if new_run_speed > run_speed {
"⬆️".green()
} else if new_run_speed < run_speed {
// 橙色
"⬇️".red()
} else {
"➡️".blue()
},
get_count,
wait_time.num_hours(),
wait_time.num_minutes() % 60,
wait_time.num_seconds() % 60
);
run_speed = new_run_speed;
start_time = std::time::Instant::now();
k = 0;
} }
} }
} }
fn main() { fn main() {
tracing_subscriber::fmt::init(); tracing_subscriber::fmt().with_max_level(tracing::Level::DEBUG).init();
let mut cli_arg = Command::parse(); let mut cli_arg = Command::parse();
// 将数据量处理成可被 thread_count 整除 // 将数据量处理成可被 thread_count 整除
@ -170,12 +81,12 @@ fn main() {
for i in 0..cli_arg.thread_count { for i in 0..cli_arg.thread_count {
n += 1; n += 1;
let cli = cli_arg.clone(); let config = cli_arg.as_cacl_config();
let out_path = out_path.clone(); let out_path = out_path.clone();
let thread_name = format!("thread_{}", i); let thread_name = format!("thread_{}", i);
threads.push(std::thread::spawn(move || { threads.push(std::thread::spawn(move || {
info!("线程 {} 开始计算", thread_name); info!("线程 {} 开始计算", thread_name);
cacl(cli, n, &out_path); cacluate::cacl(config, n, &out_path);
info!("线程 {} 结束计算", thread_name); info!("线程 {} 结束计算", thread_name);
})); }));
} }

View File

@ -52,9 +52,7 @@ impl TeamNamer {
} }
} }
#[inline(always)] #[inline(always)]
pub fn clone_vals(&self) -> [u8; 256] { pub fn clone_vals(&self) -> [u8; 256] { self.val.clone() }
self.val.clone()
}
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -139,18 +137,14 @@ impl Namer {
let name_len = name_bytes.len(); let name_len = name_bytes.len();
let b_name_len = name_len + 1; let b_name_len = name_len + 1;
for _ in 0..2 { for _ in 0..2 {
// 手动处理 0 的问题
// 手动swap
let mut s = 0_u8; let mut s = 0_u8;
val.swap(s as usize, 0); unsafe { val.swap_unchecked(s as usize, 0) };
let mut k = 0;
for i in 0..256 { for i in 0..256 {
// s = s.wrapping_add(name_bytes[i % name_len]); s = s.wrapping_add(if k == 0 { 0 } else { name_bytes[k - 1] });
s = s.wrapping_add(match i % b_name_len {
0 => 0,
k => name_bytes[k - 1],
});
s = s.wrapping_add(val[i]); s = s.wrapping_add(val[i]);
val.swap(i, s as usize); unsafe { val.swap_unchecked(i, s as usize) }
k = if k == b_name_len - 1 { 0 } else { k + 1 };
} }
} }
// simd 优化 // simd 优化
@ -158,12 +152,9 @@ impl Namer {
{ {
let mut simd_val = val.clone(); let mut simd_val = val.clone();
let mut simd_val_b = [0_u8; 256]; let mut simd_val_b = [0_u8; 256];
let mut simd_target = [false; 256];
let simd_181 = u8x64::splat(181); let simd_181 = u8x64::splat(181);
let simd_160 = u8x64::splat(160); let simd_160 = u8x64::splat(160);
let simd_63 = u8x64::splat(63); let simd_63 = u8x64::splat(63);
let simd_88 = u8x64::splat(88);
let simd_217 = u8x64::splat(217);
for i in (0..256).step_by(64) { for i in (0..256).step_by(64) {
// 一次性加载64个数字 // 一次性加载64个数字
@ -171,20 +162,20 @@ impl Namer {
x = x * simd_181 + simd_160; x = x * simd_181 + simd_160;
// 写入到 simd_val // 写入到 simd_val
x.copy_to_slice(&mut simd_val[i..]); x.copy_to_slice(&mut simd_val[i..]);
// 提前判断 > 88 && < 217
let mask = x.simd_ge(simd_88) & x.simd_lt(simd_217);
// 写入到 simd_target
let mask: [bool; 64] = mask.to_array();
simd_target[i..i + 64].copy_from_slice(&mask);
x = x & simd_63; let y = x & simd_63;
x.copy_to_slice(&mut simd_val_b[i..]); y.copy_to_slice(&mut simd_val_b[i..]);
} }
let mut mod_count = 0; let mut mod_count = 0;
for i in 0..96 { for i in 0..96 {
if simd_target[i] { if simd_val[i] > 88 && simd_val[i] < 217 {
name_base[mod_count as usize] = simd_val_b[i]; // name_base[mod_count as usize] = simd_val_b[i];
unsafe {
*name_base.get_unchecked_mut(mod_count as usize) =
*simd_val_b.get_unchecked(i);
}
mod_count += 1; mod_count += 1;
} }
if mod_count > 30 { if mod_count > 30 {
@ -193,8 +184,12 @@ impl Namer {
} }
if mod_count < 31 { if mod_count < 31 {
for i in 96..256 { for i in 96..256 {
if simd_target[i] { if simd_val[i] > 88 && simd_val[i] < 217 {
name_base[mod_count as usize] = simd_val_b[i]; // name_base[mod_count as usize] = simd_val_b[i];
unsafe {
*name_base.get_unchecked_mut(mod_count as usize) =
*simd_val_b.get_unchecked(i);
}
mod_count += 1; mod_count += 1;
} }
if mod_count > 30 { if mod_count > 30 {
@ -324,16 +319,12 @@ impl Namer {
// *= 2 // *= 2
} }
if (self.skl_freq[14] != 0) && (last != 14) { if (self.skl_freq[14] != 0) && (last != 14) {
self.skl_freq[14] += min( self.skl_freq[14] +=
min(self.name_base[60], self.name_base[61]), min(min(self.name_base[60], self.name_base[61]), self.skl_freq[14]);
self.skl_freq[14],
);
} }
if (self.skl_freq[15] != 0) && (last != 15) { if (self.skl_freq[15] != 0) && (last != 15) {
self.skl_freq[15] += min( self.skl_freq[15] +=
min(self.name_base[62], self.name_base[63]), min(min(self.name_base[62], self.name_base[63]), self.skl_freq[15]);
self.skl_freq[15],
);
} }
} }
@ -399,10 +390,6 @@ mod test {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]; ];
assert_eq!(namer.name_base.to_vec(), base_name_vec);
namer.update_skill();
// update skill 之后才会是完整的 name
let full_base_name_vec: Vec<u8> = vec![ let full_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, 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, 57, 34, 22, 37, 35, 6, 12, 25, 50, 49, 59, 23, 49, 27, 51, 58, 39, 28, 60, 20, 31, 36,
@ -411,6 +398,10 @@ mod test {
41, 55, 5, 34, 3, 7, 33, 33, 45, 16, 16, 32, 43, 18, 44, 22, 14, 17, 10, 11, 53, 18, 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, 44, 19, 52, 2, 32, 12, 8, 2, 54, 26, 48, 8, 3, 63, 54, 19, 25,
]; ];
assert_eq!(namer.name_base.to_vec(), base_name_vec);
namer.update_skill();
// update skill 之后才会是完整的 name
assert_eq!(namer.name_base.to_vec(), full_base_name_vec); assert_eq!(namer.name_base.to_vec(), full_base_name_vec);
} }
@ -427,6 +418,19 @@ mod test {
assert_eq!(namer.skl_freq.to_vec(), skill_prop_vec); assert_eq!(namer.skl_freq.to_vec(), skill_prop_vec);
} }
#[test]
fn skill_id_test() {
let team = TeamNamer::new_unchecked("x");
let mut namer = Namer::new_from_team_namer_unchecked(&team, "x");
namer.update_skill();
let skill_id_vec: Vec<u8> = vec![
9, 13, 12, 38, 4, 27, 26, 15, 16, 32, 24, 5, 7, 21, 18, 10, 37, 2, 6, 20, 39, 1, 14, 3,
11, 29, 22, 33, 19, 0, 30, 31, 17, 28, 34, 35, 23, 8, 25, 36,
];
assert_eq!(namer.skl_id.to_vec(), skill_id_vec);
}
#[test] #[test]
fn prop_test() { fn prop_test() {
let team = TeamNamer::new_unchecked("x"); let team = TeamNamer::new_unchecked("x");