Add protect/storage lists, dynamic trash thresholds, tie resolution
Protect & storage lists: - protect.csv: unlocked garage cars (state != 0, locked == false) worth locking more copies of. Needed copies = best configs surviving the RQ-band thresholds (prize cars and RQ >= 80 always count); already locked copies (copy_count) are subtracted, surplus drops off the list. - storage.csv: Keep/Trash recommendation for storage cars (state == 0) using the same copy-count logic; surplus unlocked copies are fusion material. - user_data.rs now parses card state (garage vs storage), garage slots (user.garageSlots/garageSlotsUsed), and unlocked card maps. Dynamic trash thresholds: - TrashThresholds derive RQ 20-29/30-39 as half/a quarter of a base value (--trash-base-count, default 4); RQ 40+ never covered. - plan_trash_rules escalates the base automatically while projected free garage slots (capacity - used + unlocked non-best copies + new trash candidates, copies counted per card) stay below --garage-min-free (default 20), stopping when no further cars qualify. Effective thresholds and projection are printed. - Improve-based low-value cars (best target count at or below the band threshold) land in trash.csv; collect_improve_entries is shared with improve.csv and computed once per run. Same-car tie resolution: - resolve_tied_configs collapses tie-equivalent configs of the same car per track (compute_car_counts, write_details_csv), preferring the player's owned final-build config. Fixes phantom rows like the Mercedes 280 SL 332 entry tied at 61.31 by its owned 323, inflated per-config track counts, and pointless second-copy recommendations. Wishlist: - Prize cars are excluded from the ideal wishlist and surface in remove.csv via the ideal-set difference. CLI: new protect command; --trash-base-count/--garage-min-free on trash/protect/all; details command reuses counts for tie resolution. README updated for all new files, flags, and criteria.
This commit is contained in:
parent
ec8be9d138
commit
293a8d7707
12 changed files with 1684 additions and 120 deletions
51
README.md
51
README.md
|
|
@ -112,18 +112,48 @@ cargo run --bin records -- best --min-count 5
|
|||
```bash
|
||||
cargo run --bin records -- trash
|
||||
```
|
||||
Generates `trash.csv` — owned cars that are not best on any track, have RQ < 80, and are not prize cars. Sorted by RQ.
|
||||
Generates `trash.csv` — owned cars that are not best on any track, have RQ < 80, and are not prize cars, plus low-value upgrade fodder: unfinished cars whose best config reaches at most a per-RQ-band track count (RQ 10-19: ≤4, RQ 20-29: ≤2, RQ 30-39: ≤1 by default). Sorted by RQ.
|
||||
|
||||
**Output File:**
|
||||
```
|
||||
trash.csv — Owned cars safe to remove
|
||||
trash.csv — Owned cars safe to remove or use as fusion material
|
||||
```
|
||||
|
||||
The band thresholds derive from a single base value (`--trash-base-count`, default 4); each higher band gets half of the previous one. The tool prints the effective thresholds and a garage-space projection (`user.garageSlots`/`garageSlotsUsed` from the export). When the projected free slots after clean-up fall below `--garage-min-free` (default 20), the base count is raised automatically — and printed — until the target is reached or no more cars qualify:
|
||||
|
||||
```bash
|
||||
cargo run --bin records -- trash --trash-base-count 5 --garage-min-free 30
|
||||
```
|
||||
|
||||
Pass `--trash-base-count 0` to disable the improve-based criteria entirely.
|
||||
|
||||
#### Protect & Storage Analysis
|
||||
```bash
|
||||
cargo run --bin records -- protect
|
||||
```
|
||||
Generates `protect.csv` — cars in the **garage** that are currently **not locked** and are worth locking more copies of — and `storage.csv`, a keep/trash recommendation for cars in the **storage** ("Lager", `state == 0` in the export). Both apply the same dynamic criteria (including garage-space escalation and its printed plan) as the trash command.
|
||||
|
||||
**Output Files:**
|
||||
```
|
||||
protect.csv — Unlocked garage cars worth locking
|
||||
storage.csv — Keep/Trash recommendation for storage cars
|
||||
```
|
||||
|
||||
`protect.csv` columns: `RQ,Brand,Model,Year,FinalBuild,Count,ToLock`. A car drops off the list once its locked copies cover every best config surviving the RQ-band thresholds; `ToLock` is the number of additional copies worth locking. Cars not best on any track never appear.
|
||||
|
||||
`storage.csv` columns: `RQ,Brand,Model,Year,FinalBuild,Count,Recommendation`. Cars not best on any track, best only in configs at or below their RQ-band threshold, or with enough locked copies already (surplus unlocked copies are fusion material), are `Trash`; prize cars and RQ ≥ 80 are always `Keep`.
|
||||
|
||||
The trash criteria flags apply here as well:
|
||||
|
||||
```bash
|
||||
cargo run --bin records -- protect --trash-base-count 5 --garage-min-free 30
|
||||
```
|
||||
|
||||
#### Wishlist Management
|
||||
```bash
|
||||
cargo run --bin records -- wishlist
|
||||
```
|
||||
Generates `wishlist.csv` (ideal wishlist: very_best unowned cars, capped at 300), `add.csv` (cars that should be on your wishlist but aren't), and `remove.csv` (cars on your wishlist that shouldn't be). All sorted by RQ.
|
||||
Generates `wishlist.csv` (ideal wishlist: very_best unowned cars, capped at 300), `add.csv` (cars that should be on your wishlist but aren't), and `remove.csv` (cars on your wishlist that shouldn't be). All sorted by RQ. Prize cars are excluded from the ideal wishlist; prize cars still on your actual wishlist appear in `remove.csv`.
|
||||
|
||||
**Output Files:**
|
||||
```
|
||||
|
|
@ -146,7 +176,7 @@ cargo run --bin records -- wishlist --max-wishlist 500
|
|||
```bash
|
||||
cargo run --bin records -- all
|
||||
```
|
||||
Generates all 7 CSV files in a single parse pass. Equivalent to running `best`, `trash`, `wishlist`, and `improve` together, but more efficient.
|
||||
Generates all 10 CSV files in a single parse pass. Equivalent to running `best`, `trash`, `wishlist`, `improve`, and `protect` together, but more efficient.
|
||||
|
||||
**Output Files:**
|
||||
```
|
||||
|
|
@ -157,11 +187,13 @@ wishlist.csv — Ideal wishlist (very_best unowned, capped)
|
|||
add.csv — Cars to add to wishlist
|
||||
remove.csv — Cars to remove from wishlist
|
||||
improve.csv — Owned cars not yet at final build config
|
||||
protect.csv — Unlocked garage cars worth locking
|
||||
storage.csv — Keep/Trash recommendation for storage cars
|
||||
```
|
||||
|
||||
Supports both `--min-count N` (default 10) and `--max-wishlist M` (default 300):
|
||||
Supports `--min-count N` (default 10), `--max-wishlist M` (default 300), and the trash criteria flags:
|
||||
```bash
|
||||
cargo run --bin records -- all --min-count 5 --max-wishlist 500
|
||||
cargo run --bin records -- all --min-count 5 --max-wishlist 500 --trash-base-count 4 --garage-min-free 20
|
||||
```
|
||||
|
||||
#### Detailed Performance Data
|
||||
|
|
@ -202,9 +234,10 @@ The analyzer supports multiple track conditions:
|
|||
|---------|-------------|-----------|
|
||||
| `fetch` | Download latest car and track data | None |
|
||||
| `best` | Generate `best.csv` and `very_best.csv` | `[--min-count N]` |
|
||||
| `trash` | Generate `trash.csv` (owned cars safe to remove) | None |
|
||||
| `trash` | Generate `trash.csv` (owned cars safe to remove) | `[--trash-base-count N] [--garage-min-free N]` |
|
||||
| `protect` | Generate `protect.csv` (unlocked garage cars) and `storage.csv` (storage keep/trash) | `[--trash-base-count N] [--garage-min-free N]` |
|
||||
| `wishlist` | Generate `wishlist.csv`, `add.csv`, `remove.csv` | `[--min-count N] [--max-wishlist M]` |
|
||||
| `all` | Generate all 7 CSV files in a single pass | `[--min-count N] [--max-wishlist M]` |
|
||||
| `all` | Generate all 10 CSV files in a single pass | `[--min-count N] [--max-wishlist M] [--trash-base-count N] [--garage-min-free N]` |
|
||||
| `details` | Print detailed timing data for all tracks (stdout) | None |
|
||||
| `track` | Print best car for specific track (stdout) | `<track_name> <condition> <rq>` |
|
||||
| `improve` | Generate `improve.csv` (owned cars not at final build) | None |
|
||||
|
|
@ -215,6 +248,8 @@ The analyzer supports multiple track conditions:
|
|||
|------|---------|-------------|
|
||||
| `--min-count N` | `10` | Minimum number of tracks a car must be best on to qualify as "very best" |
|
||||
| `--max-wishlist M` | `300` | Maximum number of cars on the ideal wishlist |
|
||||
| `--trash-base-count N` | `4` | Maximum improve track count for RQ 10-19 to count as trash; RQ 20-29/30-39 get half/a quarter. `0` disables the criteria |
|
||||
| `--garage-min-free N` | `20` | Minimum projected free garage slots; the trash base count is raised automatically when the projection falls short |
|
||||
|
||||
## 📅 Daily Workflow
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue