Added the tracks a car ist best for to the output plus the car's configuration
This commit is contained in:
parent
3a826e3903
commit
abda9a3313
2 changed files with 302 additions and 12 deletions
39
src/main.rs
39
src/main.rs
|
|
@ -1,6 +1,7 @@
|
||||||
use scraper::{Html, Selector};
|
use scraper::{Html, Selector};
|
||||||
use std::collections::HashSet;
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use std::fs::read_to_string;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use tokio;
|
use tokio;
|
||||||
|
|
||||||
|
|
@ -10,7 +11,7 @@ struct Car {
|
||||||
manufacturer: String,
|
manufacturer: String,
|
||||||
model: String,
|
model: String,
|
||||||
year: u16,
|
year: u16,
|
||||||
// upgrade: String,
|
upgrade: String,
|
||||||
}
|
}
|
||||||
async fn get_page(url: &str) -> String {
|
async fn get_page(url: &str) -> String {
|
||||||
match reqwest::Client::builder()
|
match reqwest::Client::builder()
|
||||||
|
|
@ -42,7 +43,7 @@ fn parse_best_car(text: String) -> Car {
|
||||||
manufacturer: String::from(""),
|
manufacturer: String::from(""),
|
||||||
model: String::from(""),
|
model: String::from(""),
|
||||||
year: 1900,
|
year: 1900,
|
||||||
// upgrade: String::from("000"),
|
upgrade: String::from("000"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let document = Html::parse_document(&text);
|
let document = Html::parse_document(&text);
|
||||||
|
|
@ -86,17 +87,28 @@ fn parse_best_car(text: String) -> Car {
|
||||||
Some(rq) => rq.text().collect::<Vec<_>>()[0],
|
Some(rq) => rq.text().collect::<Vec<_>>()[0],
|
||||||
};
|
};
|
||||||
car.rq = u8::from_str(rq).unwrap();
|
car.rq = u8::from_str(rq).unwrap();
|
||||||
/*
|
|
||||||
let upgrade_selector = Selector::parse(".carList__item-upgrade ").unwrap();
|
let upgrade_selector = Selector::parse(".carList__item-upgrade ").unwrap();
|
||||||
let upgrade_raw = match document.select(&upgrade_selector).next() {
|
let upgrade_raw = match document.select(&upgrade_selector).next() {
|
||||||
None => "",
|
None => "",
|
||||||
Some(model) => model.text().collect::<Vec<_>>()[0],
|
Some(model) => model.text().collect::<Vec<_>>()[0],
|
||||||
};
|
};
|
||||||
car.upgrade = String::from(upgrade_raw).trim().parse().unwrap();
|
car.upgrade = String::from(upgrade_raw).trim().parse().unwrap();
|
||||||
*/
|
|
||||||
car
|
car
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_tracks(file_name: &str) -> HashMap<u16, String> {
|
||||||
|
let mut result: HashMap<u16, String> = HashMap::new();
|
||||||
|
|
||||||
|
for line in read_to_string(file_name).unwrap().lines() {
|
||||||
|
let (index, track) = line.split_once(' ').unwrap();
|
||||||
|
result.insert(index.parse::<u16>().unwrap(), String::from(track));
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let args: Vec<_> = env::args().collect();
|
let args: Vec<_> = env::args().collect();
|
||||||
|
|
@ -128,15 +140,18 @@ async fn main() {
|
||||||
_ => panic!("Too many arguemnts."),
|
_ => panic!("Too many arguemnts."),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let tracks = parse_tracks("tracks.txt");
|
||||||
|
|
||||||
let mut keepers: HashSet<String> = HashSet::new();
|
let mut keepers: HashSet<String> = HashSet::new();
|
||||||
|
|
||||||
for track in min_track..max_track + 1 {
|
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 {
|
if best_car.len() > 10 {
|
||||||
for level in min_rq..max_rq + 1 {
|
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 {
|
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);
|
keepers.insert(best_car);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -167,7 +182,7 @@ fn parse_argument(args: &Vec<String>, 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",
|
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);
|
max_level, track);
|
||||||
// println!("Getting {}", url);
|
// println!("Getting {}", url);
|
||||||
|
|
@ -175,14 +190,14 @@ async fn get_best_car(track: u16, max_level: u16) -> String {
|
||||||
if text.len() > 10 {
|
if text.len() > 10 {
|
||||||
let best_car = parse_best_car(text);
|
let best_car = parse_best_car(text);
|
||||||
format!(
|
format!(
|
||||||
// "{}{} {} {} {} {}",
|
"{}{} {} {} {}: {} ({})",
|
||||||
"{}{} {} {} {}",
|
|
||||||
best_car.class,
|
best_car.class,
|
||||||
best_car.rq,
|
best_car.rq,
|
||||||
best_car.manufacturer,
|
best_car.manufacturer,
|
||||||
best_car.model,
|
best_car.model,
|
||||||
best_car.year,
|
best_car.year,
|
||||||
// best_car.upgrade,
|
track_name,
|
||||||
|
best_car.upgrade,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
String::from("")
|
String::from("")
|
||||||
|
|
|
||||||
275
tracks.txt
Normal file
275
tracks.txt
Normal file
|
|
@ -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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue