When making my VEX event/team information app I encountered a problem, vex event names would take up too much space on the title bar and with mostly redundant information too.
Here are some examples:
2017-2018 VEX Lakeside MSC In the Zone
2017 Compton Robotics Challenge
In the Zone in Vancouver
Harriton VRC Qualifier
AHS Eagle Nation Challenge - State Qualifier
Corona STEM Academy In the Zone
Branches Homeschool Skills Challenge
KIDS Inc In The Zone Blended Winter State Qualifier; Indianapolis, IN
District 204 MS Only VEX Tournament
Michigan East Regional at MCCC/Midway - Middle School Only
Michigan East Regional at MCCC/Midway - High School Only
Collins Hill High School Battle at The Hill
Pulaski County VEX State Qualifier
2017-18 Southern Maryland VEX League - Middle School
War Hawk Qualifier
2018 VEX In the Zone Inland Empire Challenge sponsored by iDesign Solutions
iDesign Central Toronto VRC Qualifying Event
***Syracuse City School District Intercity VEX Tournament***
Queensbury In the Zone
Wiregrass VEX VRC Tournament
Monticello Challenge: In the Zone
IDesign East Rockaway HS Southern NY Regional Qualifier - In The Zone
Northeast Oklahoma VEXU VEX Robotics Competition
Branches Homeschool Skills Challenge
Battle at the Border Vex Tournament
Hornet Robotics - 1st Annual VRC Cupid's Challenge
New Mexico State University In the Zone VRC State Championship
CSM VEX U Regional Qualifier
VRC In The Zone Lancashire Regional
West Michigan All Teams Spring Skills Only Event
Millburn High School VRC Event
Great Lakes Skills Only Event
Broken Arrow HS Only-"In The Zone" VEX Robotic Competition
Clarkston VRC Tournament - In The Zone
Broken Arrow MS Only-"In The Zone" VEX Robotics Competition
Golden West's 2nd Annual Robotics Tournament
McKamy Middle School VEX In The Zone Competition
Community High School
Brandywine School District VEX Robotics Competition In The Zone Tournament
Freeport Robotics Competition
Chamberlain VEX Robotics Competition
Absolute garbage! Most of them have VEX
, In The Zone
, Event
, 2018
, or 2017
and there is redundant spacing everywhere.
So how can we improve the user experience by removing redundant text in tournament names without making them ambiguous?
We'll start off by removing redundant space
o = o.trim().split(new RegExp(" +")).join(" ");
So that 2018 Ohio VRC Middle School State Championship
-> 2018 Ohio VRC Middle School State Championship
Now let's get rid of that annoying punctuation
o = o.replaceFirstMapped(new RegExp("^[\\*\\-!]*(.+?)[\\*\\-!]*\$"), (m) => m.group(1));
Now ********Bville In The Zone********
-> Bville In The Zone
Time to get rid of the year numbers
o = o.split(" ").where((word) {
var n = int.parse(word, onError: (s) => null);
return n == null || (n > 2025 && n < 2007);
}).join(" ");
Now 2018 VEX in the Valley Valentine Day
-> VEX in the Valley Valentine Day
But year ranges like in 2017-2018 VEX Lakeside MSC In the Zone
are still there, we are going to have to get more creative
o = o.split(" ").map((word) {
var w = word.split("-");
var n = int.parse(w.first.replaceAll(new RegExp(r"[:\*!]"), ""), onError: (s) => null);
if (w.length == 1) {
return n == null || (n > 2025 && n < 2007) ? w.first : "";
} else if (w.length == 2 && n != null && n <= 2025 && n >= 2007) {
var n2 = int.parse(w.elementAt(1).replaceAll(new RegExp(r"[:\*!]"), ""), onError: (s) => null);
if (n2 != null && ((n2 <= 2025 && n2 >= 2007) || (n2 <= 25 && n2 >= 7))) return "";
}
return word;
}).join(" ");
now 2017-2018 Asia Open VEX Robotics Competition - High School
-> Asia Open VEX Robotics Competition - High School
and 2017-18 Southern Maryland VEX League - Middle School
-> Southern Maryland VEX League - Middle School
Next filter some redundant words
[
"VEX Robotics",
"Event",
"Competition",
"Tournament",
].forEach((bad) => o = o.replaceAll(new RegExp(bad, caseSensitive: false), ""));
[
"VRC",
"VEX",
"In The Zone",
"Starstruck",
"Nothing But Net",
"Skyrise",
"Tossup",
"at",
].forEach((bad) => o = o.replaceFirst(new RegExp("^$bad", caseSensitive: false), ""));
[
"VRC",
"VEX",
"Challenge"
].forEach((bad) => o = o.replaceFirst(new RegExp("$bad\$", caseSensitive: false), ""));
Now 2018 VEX Robotics World Championship - VEX Robotics Competition High School Division
-> World Championship - High School Division