From abda9a3313420d7b5263bc7dcc0ac20c0b0d22ad Mon Sep 17 00:00:00 2001 From: Jan-Peter von Hunnius Date: Wed, 16 Oct 2024 16:24:39 +0200 Subject: [PATCH] Added the tracks a car ist best for to the output plus the car's configuration --- src/main.rs | 39 +++++--- tracks.txt | 275 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 302 insertions(+), 12 deletions(-) create mode 100644 tracks.txt diff --git a/src/main.rs b/src/main.rs index 6ba8f5f..7ddc55a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use scraper::{Html, Selector}; -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; use std::env; +use std::fs::read_to_string; use std::str::FromStr; use tokio; @@ -10,7 +11,7 @@ struct Car { manufacturer: String, model: String, year: u16, -// upgrade: String, + upgrade: String, } async fn get_page(url: &str) -> String { match reqwest::Client::builder() @@ -42,7 +43,7 @@ fn parse_best_car(text: String) -> Car { manufacturer: String::from(""), model: String::from(""), year: 1900, -// upgrade: String::from("000"), + upgrade: String::from("000"), }; let document = Html::parse_document(&text); @@ -86,17 +87,28 @@ fn parse_best_car(text: String) -> Car { Some(rq) => rq.text().collect::>()[0], }; car.rq = u8::from_str(rq).unwrap(); -/* + let upgrade_selector = Selector::parse(".carList__item-upgrade ").unwrap(); let upgrade_raw = match document.select(&upgrade_selector).next() { None => "", Some(model) => model.text().collect::>()[0], }; car.upgrade = String::from(upgrade_raw).trim().parse().unwrap(); -*/ + car } +fn parse_tracks(file_name: &str) -> HashMap { + let mut result: HashMap = HashMap::new(); + + for line in read_to_string(file_name).unwrap().lines() { + let (index, track) = line.split_once(' ').unwrap(); + result.insert(index.parse::().unwrap(), String::from(track)); + } + + result +} + #[tokio::main] async fn main() { let args: Vec<_> = env::args().collect(); @@ -128,15 +140,18 @@ async fn main() { _ => panic!("Too many arguemnts."), } + let tracks = parse_tracks("tracks.txt"); + let mut keepers: HashSet = HashSet::new(); for track in min_track..max_track + 1 { - let best_car = get_best_car(track, 10).await; + let track_name = tracks[&track].clone(); + let best_car = get_best_car(track, track_name.clone(), 10).await; if best_car.len() > 10 { for level in min_rq..max_rq + 1 { - let best_car = get_best_car(track, level).await; + let best_car = get_best_car(track, track_name.clone(), level).await; if best_car.len() > 10 { -// println!("Best Car under RQ {} for track {}: {}", level, track, best_car); +// println!("Best Car under RQ {} for track {} ({}): {}", level, track, track_name, best_car); keepers.insert(best_car); } } @@ -167,7 +182,7 @@ fn parse_argument(args: &Vec, index: usize, min: u16, max: u16) -> u16 { } } -async fn get_best_car(track: u16, max_level: u16) -> String { +async fn get_best_car(track: u16, track_name: String, max_level: u16) -> String { let url = format!("https://topdrives.club/ajax/load-best-vehicles?sort_by=level&sortorder=desc&prize=all&level=10%3B{}&acceleration=1%3B50&grip=40%3B110&year=1900%3B2030&seats_count=1%3B9&track={}&page=0", max_level, track); // println!("Getting {}", url); @@ -175,14 +190,14 @@ async fn get_best_car(track: u16, max_level: u16) -> String { if text.len() > 10 { let best_car = parse_best_car(text); format!( -// "{}{} {} {} {} {}", - "{}{} {} {} {}", + "{}{} {} {} {}: {} ({})", best_car.class, best_car.rq, best_car.manufacturer, best_car.model, best_car.year, -// best_car.upgrade, + track_name, + best_car.upgrade, ) } else { String::from("") diff --git a/tracks.txt b/tracks.txt new file mode 100644 index 0000000..5173924 --- /dev/null +++ b/tracks.txt @@ -0,0 +1,275 @@ +4 0-100-0 Dry +5 0-100-0 Wet +6 0-100-0 Dirt +7 0-100 Dry +8 0-100 Wet +9 0-100 Dirt +10 0-100 Gravel +11 0-120 Dry +12 0-120 Wet +13 0-150-0 Dry +14 0-150 Dry +15 0-150 Dirt +16 0-150 Wet +17 0-170 Dry +18 0-200 Dry +19 1 Mile Drag Dry +20 1 Mile Drag Wet +21 1 Mile Drag Dirt +22 1 Mile Drag Gravel +23 Mile Drag Sand +24 Mile Drag Snow +25 1 Mile Drag (R) Dry +26 1/2 Mile Drag Dry +27 1/2 Mile Drag Wet +28 1/2 Mile Drag Dirt, Wet +29 1/2 Mile Drag Gravel +30 1/2 Mile Drag Sand +31 1/2 Mile Drag Snow +32 1/4 Mile Drag Dry +33 1/4 Mile Drag Wet +34 1/4 Mile Drag Dirt, Wet +35 1/4 Mile Drag Gravel +36 1/4 Mile Drag Sand +37 1/4 Mile Drag Snow +38 1/4 Mile Drag Ice +39 1/4 Mile Drag (R) Dry +40 100-150 (R) Dry +41 30-130 (R) Dry +42 50-150 (R) Dry +43 75-125 (R) Dry +44 75-125 (R) Wet +45 Airplane Hangars Dry +46 Airplane Hangars Wet +47 Airplane Slalom Dirt +48 Back Road Asphalt, Dirt, Wet +49 Butte Asphalt, Dirt +50 Canyon Butte Asphalt, Dirt, Wet +51 Canyon Butte Sand, Dirt +52 Canyon Dirt Road Asphalt, Dirt, Wet +53 Canyon Dirt Road Sand, Dirt +54 Canyon Lookout Dirt, Wet +55 Canyon Lookout Sand +56 Canyon Tour Wet +57 Canyon Tour Dirt +58 Canyon Tour Sand +59 Canyon Tour Snow +60 Car Park Dry +61 Car Park Wet +62 City Slalom Dry +63 City Slalom Wet +64 City Slalom Snow +65 City Sprint Dry +66 City Sprint Wet +67 City Streets Medium Dry +68 City Streets Medium Wet +69 City Streets Medium Sand +70 City Streets Medium Snow +71 City Streets Small Dry +72 City Streets Small Wet +73 City Streets Small Sand +74 City Streets Small Snow +75 City Tour Dry +76 City Tour Wet +77 City Tour Snow +78 Cross Country Asphalt, Grass, Dirt +79 Desert Rally Big Asphalt, Dirt +80 Desert Rally Dirt Asphalt, Dirt +81 Desert Rally Hill Asphalt, Dirt +82 Desert Rally Small Asphalt, Dirt +83 Dirt Road Asphalt, Dirt +84 Fast Circuit Dry +85 Fast Circuit Wet +86 Fast Circuit (R) Dry +87 Field Slalom Asphalt, Grass, Dirt +88 Field Slalom Grass +89 Figure Of Eight Wet +90 Figure Of Eight Asphalt, Sand +91 Figure Of Eight Asphalt, Gravel +92 Figure Of Eight Asphalt, Snow +93 Forest River Crossing Asphalt, Dirt, Wet +94 Forest River Crossing Asphalt, Dirt +95 Forest River Crossing Asphalt, Gravel +96 Forest Road Dry +97 Forest Road Wet +98 Forest Road Snow +99 Forest Road Ice +100 Forest Slalom Dirt +101 Forest Slalom Dirt, Wet +102 Forest Slalom Gravel +103 Forest Slalom Snow +104 Forest Slalom Ice +105 Forest Slalom Grass +106 Forest Slalom Grass, Wet +107 Frozen Lake Asphalt, Snow +108 Frozen River Slalom Ice +109 G-Force Test Dry +110 G-Force Test Wet +111 G-Force Test Dirt +112 G-Force Test Dirt, Wet +113 G-Force Test Gravel +114 G-Force Test Sand +115 G-Force Test Snow +116 G-Force Test Ice +117 G-Force Test (R) Dry +118 Hairpin Road Dry +119 Hairpin Road Wet +120 Hairpin Road Dirt +121 Hairpin Road Gravel +122 Hairpin Road Sand +122 Hairpin Road Snow +124 Hill Climb Dry +125 Hill Climb Wet +126 Hill Climb Dirt +127 Hill Climb Dirt, Wet +128 Hill Climb Gravel +129 Hill Climb Sand +130 Hill Climb Snow +131 Hill Climb (R) Dirt +132 Indoor Karting Dry +133 Karting Circuit Dry +134 Karting Circuit Wet +135 L-Shape Drag Dry +136 L-Shape Drag Wet +137 Laguna Seca Dry +138 Laguna Seca Wet +139 Lookout Dirt +140 Lumber Mill Twisty Circuit Asphalt, Dirt +141 Monaco G-Force Test Dry +142 Monaco G-Force Test Wet +143 Monaco Hairpin Dry +144 Monaco Hairpin Wet +145 Monaco Hairpin Asphalt, Dirt, Wet +146 Monaco Hairpin Asphalt, Dirt +147 Monaco Narrow Streets Dry +148 Monaco Narrow Streets Wet +149 Monaco Streets Dry +150 Monaco Streets Wet +151 Monaco Streets Long Dry +152 Monaco Streets Long Wet +153 Motocross Track Dirt +154 Motocross Track Wet +155 Mountain Hairpin Dry +156 Mountain Hairpin Wet +157 Mountain Hairpin Dirt +158 Mountain Hairpin Dirt, Wet +159 Mountain Hairpin Snow +160 Mountain Hill Climb Dry +161 Mountain Hill Climb Wet +162 Mountain Hill Climb Dirt +163 Mountain Hill Climb Dirt, Wet +164 Mountain Hill Climb Snow +165 Mountain Incline Road Dry +166 Mountain Incline Road Wet +167 Mountain Incline Road Dirt +168 Mountain Incline Road Dirt, Wet +169 Mountain Incline Road Snow +170 Mountain Slalom Dry +171 Mountain Slalom Wet +172 Mountain Slalom Dirt +173 Mountain Slalom Dirt, Wet +174 Mountain Slalom Snow +175 Mountain Tour Dry +176 Mountain Tour Wet +177 Mountain Tour Dirt +178 Mountain Tour Dirt, Wet +179 Mountain Tour Snow +180 Mountain Twisty Road Dry +181 Mountain Twisty Road Wet +182 Mountain Twisty Road Dirt +183 Mountain Twisty Road Dirt, Wet +184 Mountain Twisty Road Snow +185 North Loop Dry +186 North Loop Wet +187 North Loop Relay 1 Dry +188 North Loop Relay 1 Snow +189 North Loop Relay 2 Dry +190 North Loop Relay 2 Snow +191 North Loop Relay 3 Dry +192 North Loop Relay 3 Wet +193 North Loop Relay 4 Dry +194 North Loop Relay 4 Wet +195 North Loop Relay 4 Snow +196 North Loop Relay 5 Dry +197 North Loop Relay 5 Wet +198 North Loop Relay 5 Snow +199 Ocean Beach Slalom Asphalt, Sand +200 Ocean Beach Slalom Asphalt, Sand, Wet +201 Ocean City Streets Dry +202 Ocean City Streets Wet +203 Ocean Highway Dry +204 Ocean Highway Wet +205 Ocean Long Drag Dry +206 Ocean Long Drag Wet +207 Ocean Parking Lot Dry +208 Ocean Parking Lot Wet +209 Ocean Short Drag Dry +210 Ocean Short Drag Wet +211 Rallycross Medium Asphalt, Dirt, Wet +212 Rallycross Medium Asphalt, Dirt +213 Rallycross Small Asphalt, Dirt, Wet +214 Rallycross Small Asphalt, Dirt +215 River Sprint Ice, Snow +216 Runway Drag Dry +217 Runway Drag Wet +218 Runway Drag & Slalom Dry +219 Runway Drag & Slalom Wet +220 Runway Loop Dry +221 Runway Loop Wet +222 Service Roads Dry +223 Service Roads Wet +224 Service Roads Dirt +225 Slalom Test Dry +226 Slalom Test Wet +227 Slalom Test Dirt +228 Slalom Test Dirt, Wet +229 Slalom Test Gravel +230 Slalom Test Sand +231 Slalom Test Snow +232 Slalom Test Ice +233 Slalom Test (R) Dry +234 Speedbump 1/2km Dry +235 Speedbump 1/2km Snow +236 Speedbump 1km Dry +237 Test Bowl Dry +238 Test Bowl Wet +239 Test Bowl Dirt +240 Test Bowl Snow +241 Test Bowl (R) Dry +242 Test Bowl (R) Wet +243 Test Bowl (R) Gravel +244 Test Bowl (R) Snow +245 Tokyo Bridge Dry +246 Tokyo Bridge Wet +247 Tokyo Drag Dry +248 Tokyo Drag Wet +249 Tokyo G-Force Test Dry +250 Tokyo G-Force Test Wet +251 Tokyo Loop (R) Dry +252 Tokyo Loop (R) Wet +253 Tokyo Off Ramp (R) Dry +254 Tokyo Off Ramp (R) Wet +255 Tokyo Overpass (R) Dry +256 Tokyo Overpass (R) Wet +257 Twisty Circuit Dry +258 Twisty Circuit Wet +259 Twisty Circuit Dirt +260 Twisty Circuit Sand +261 Twisty Circuit Snow +262 Twisty Circuit (R) Dry +263 Twisty Circuit (R) Wet +264 Twisty Road Dry +265 Twisty Road Wet +266 Twisty Road Dirt +267 Twisty Road Dirt, Wet +268 Twisty Road Gravel +269 Twisty Road Sand +270 Twisty Road Snow +271 Twisty Road Ice +272 Waterfront Drag Dry +273 Waterfront Drag Wet +274 0-60 Gravel +275 0-60-0 Wet +276 0-60-0 Sand +277 Lumber Mill Twisty Circuit Asphalt, Dirt, Wet +278 Lumber Mill Twisty Circuit Snow, Dirt, Wet \ No newline at end of file