test: slight taiko bf refactor
This commit is contained in:
@@ -7,3 +7,5 @@
|
|||||||
cc 1883e1e612026e7f7c8035803830ff21b6d98c946cfb92c5c144e682a5d72ad2 # shrinks to acc = 0.0, n300 = None, n100 = None, n_misses = None, best_case = false
|
cc 1883e1e612026e7f7c8035803830ff21b6d98c946cfb92c5c144e682a5d72ad2 # shrinks to acc = 0.0, n300 = None, n100 = None, n_misses = None, best_case = false
|
||||||
cc 84792fb0ec8971122d0eb2e61355a637e9326ac2b7469226bba06a2defdc44dd # shrinks to acc = 0.659020825478002, n300 = None, n100 = None, n_misses = Some(99), best_case = false
|
cc 84792fb0ec8971122d0eb2e61355a637e9326ac2b7469226bba06a2defdc44dd # shrinks to acc = 0.659020825478002, n300 = None, n100 = None, n_misses = Some(99), best_case = false
|
||||||
cc 94fb95e246e580e010115334e5fd7de6160b3a24a735e4cb4ab4341f5f7b769e # shrinks to acc = 0.0, n300 = Some(0), n100 = Some(1), n_misses = None, best_case = false
|
cc 94fb95e246e580e010115334e5fd7de6160b3a24a735e4cb4ab4341f5f7b769e # shrinks to acc = 0.0, n300 = Some(0), n100 = Some(1), n_misses = None, best_case = false
|
||||||
|
cc fcc52507f0304061f5b94a7aa8bb5cc40e7156effe1e2c3434161a5c152409d0 # shrinks to acc = 0.0, n300 = None, n100 = Some(1), n_misses = None, best_case = false
|
||||||
|
cc 8d6b15c9881ebf33b1b91bb9398264048b28a95cb902f747af6c8320063c21a6 # shrinks to acc = 0.0, n300 = Some(240), n100 = Some(50), n_misses = None, best_case = false
|
||||||
|
|||||||
+30
-46
@@ -557,64 +557,48 @@ mod test {
|
|||||||
n_misses: usize,
|
n_misses: usize,
|
||||||
best_case: bool,
|
best_case: bool,
|
||||||
) -> TaikoScoreState {
|
) -> TaikoScoreState {
|
||||||
let n_objects = MAX_COMBO;
|
|
||||||
let n_misses = n_misses.min(n_objects);
|
|
||||||
|
|
||||||
let mut best_dist = f64::MAX;
|
|
||||||
|
|
||||||
let mut best_state = TaikoScoreState {
|
let mut best_state = TaikoScoreState {
|
||||||
n_misses,
|
n_misses,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut bf_with_100 = |n300: usize, n100: usize| {
|
let mut best_dist = f64::INFINITY;
|
||||||
let dist = (acc - accuracy(n300, n100, n_misses)).abs();
|
|
||||||
|
|
||||||
if dist < best_dist {
|
let n_objects = MAX_COMBO;
|
||||||
best_dist = dist;
|
let n_remaining = n_objects - n_misses;
|
||||||
best_state.n300 = n300;
|
|
||||||
best_state.n100 = n100;
|
let (min_n300, max_n300) = match (n300, n100) {
|
||||||
}
|
(Some(n300), _) => (n_remaining.min(n300), n_remaining.min(n300)),
|
||||||
|
(None, Some(n100)) => (
|
||||||
|
n_remaining.saturating_sub(n100),
|
||||||
|
n_remaining.saturating_sub(n100),
|
||||||
|
),
|
||||||
|
(None, None) => (0, n_remaining),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut bf_with_300 = |n300: usize| match n100 {
|
for new300 in min_n300..=max_n300 {
|
||||||
Some(mut n100) => {
|
let new100 = match n100 {
|
||||||
n100 = n100
|
Some(n100) => n_remaining.min(n100),
|
||||||
.min(n_objects - n_misses)
|
None => n_remaining - new300,
|
||||||
.max(n_objects.saturating_sub(n300 + n_misses));
|
};
|
||||||
|
|
||||||
bf_with_100(n300, n100);
|
let curr_acc = accuracy(new300, new100, n_misses);
|
||||||
}
|
let curr_dist = (acc - curr_acc).abs();
|
||||||
None => {
|
|
||||||
let n100 = n_objects.saturating_sub(n300 + n_misses);
|
|
||||||
bf_with_100(n300, n100);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
match (n300, n100) {
|
if curr_dist < best_dist {
|
||||||
(Some(mut n300), Some(n100)) => {
|
best_dist = curr_dist;
|
||||||
n300 = n300.min(n_objects - n_misses);
|
best_state.n300 = new300;
|
||||||
|
best_state.n100 = new100;
|
||||||
if best_case {
|
|
||||||
n300 = n300.max(n_objects.saturating_sub(n100 + n_misses));
|
|
||||||
}
|
|
||||||
|
|
||||||
bf_with_300(n300);
|
|
||||||
}
|
}
|
||||||
(Some(mut n300), None) => {
|
}
|
||||||
n300 = n300.min(n_objects - n_misses);
|
|
||||||
bf_with_300(n300);
|
|
||||||
}
|
|
||||||
(None, Some(n100)) => {
|
|
||||||
let n300 = n_objects.saturating_sub(n100 + n_misses);
|
|
||||||
bf_with_300(n300);
|
|
||||||
}
|
|
||||||
(None, None) => {
|
|
||||||
let n_remaining = n_objects - n_misses;
|
|
||||||
|
|
||||||
for n300 in 0..=n_remaining {
|
if best_state.n300 + best_state.n100 < n_remaining {
|
||||||
bf_with_300(n300);
|
let remaining = n_remaining - (best_state.n300 + best_state.n100);
|
||||||
}
|
|
||||||
|
if best_case {
|
||||||
|
best_state.n300 += remaining;
|
||||||
|
} else {
|
||||||
|
best_state.n100 += remaining;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user