raceScore is a free, easy to use, "Google Sheets Extension" that scores a series of sailboat races using the High Point Average or Cox-Sprague Scoring Methods. Averaging a boat's finishes over a series allows competitors to miss races without being penalized. High Point and Cox-Sprague average scoring systems reward top finishes in larger fleets over top finishes in smaller fleets.
To try raceScore, open a blank Google Spreadsheet, get the raceScore Extension from the Google Marketplace, enter finish data into Sheet1, and run raceScore. A few seconds later, a “Results” sheet will be added to your spreadsheet containing all the scoring detail. More information including sample input data are provided below.
Race Number no longer required - this update applies to anyone using raceScore before August 2022 race number (e.g. the 1, 2, 3 etc. in Column B) can easily be deduced, so we decided to remove the requirement to enter it. Actually it's now invalid to include race number among the finishes on Sheet1. If you see race numbers being listed as competitors in the results then delete column B (containing race numbers) and re-run raceScore. raceScore will intuitively assume the first set of finish data for any date is the first race of the day and sequentially increase the race number for subsequent races entered on the same date (8/2/2022)
Boat numbers no longer have to be numeric - if your fleet uses text characters - e.g. country codes, boat names, skipper names for example, to identify a boat's finish in a race, then this improvement will be appreciated. In our local fleet, where members borrow different club boats, we use the skippers name instead of the boat number, for example. (7/14/2022)
Participation Credits - if your fleet wants to give competitors that serve on Race Committee, or maybe if they attend a travel event, credit for qualification purposes, use Participation Credits. Each credit increases a competitor's "races sailed" by 1. So, if a competitor has sailed in 10 races, for example, and receives 2 participation credits, it will appear that the competitor sailed in 12 races for qualification purposes and for throwout calculations. Since participation credits are identified using a scoring adjustment, you can provide as many or as few credits as desired. But, credits can only be awarded on a particular day if a race was run and scored on that day. (7/11/2022)
To install the raceScore Google extension open a blank Google Spreadsheet and click on the Extensions menu item. From there click on "Add-ons" and then "Get add-ons". Search for "raceScore" and complete the installation steps. You will be asked to Authorize raceScore's use of Google services on your behalf. raceScore does not keep any data that you enter and never requires any personal information.
In raceScore, race finishes are input horizontally across Sheet1 of your spreadsheet. raceScore recognizes that a row contains race finishes when there is a date (any valid spreadsheet date between January 2020 and December 2039) in Column A. When raceScore receives a valid date in Column A, it assumes successive columns are boat identifiers (bow number, sail number, boat name, etc.), in finish order.
In the example shown, in the first race recorded for June 4th, boat number 626 won, followed by 724 and 602… 566 finished in 6th.
In the 2nd race of the day, 626 won again followed by 547. 602 didn’t finish so is scored DNF.
Scoring adjustments of DNF, OCS, and DSQ, unless thrown out, result in zero being averaged into the overall score. Other scoring adjustments (e.g. DNS) are ignored for scoring purposes.
When the value in Column A for a row is left blank, raceScore assumes the previously entered date is carried over. So, for example, the implied entry on spreadsheet line 7 is:
Jun-11 644 602 789 547 626
Even though Jun-11 isn't specified on line 7, its carried over from line 6.
Lines that don’t have a date in Column A (between 1/1/2020 and 1/1/2040) are skipped. So, don’t hesitate to insert blank lines or add comments to document the day's racing. Line 1, in the example, is a comment and was added to help show what values go into each column. Since the value on line 1 in column A ("Race Date") isn't a valid date, the entire line is ignored by raceScore.
Unless otherwise specified, default values are used for scoring calculations. To override defaults enter values starting on line1 of Sheet1 (the sheet containing finishes).
The title printed at the top of the Results sheet is, by default, the Spreadsheet name. However, this name can be overridden using the "series" parameter.
boats need to sail in 50% of the races to qualify - to override, use the "qualification" parameter.
upon qualifying each boat’s lowest finish score will be discarded from their series average - to override use the "throwouts" parameter. For example, if the throwouts parameter is set to 4, qualifying boats will get 1 throwout upon qualifying plus one additional throwout for every 4 races sailed after qualifying. To specify no throw outs set the throwouts parameter to 0.
the High Point Average scoring method is used by default. The other option tells raceScore to use scores from the Cox-Sprague table to calculate race results. Cox-Sprague can be used to score races with up to 20 finishers.
Defaults can be overridden by specifying any or all of these parameters on the finishes sheet (Sheet1) starting on line 1, as follows:
series: <series name>
qualification %: <xx>
scoring method: Cox-Sprague
<series name> is the text that will be displayed at the top of the results
<xx> is a number set to the percentage of races a boat must sail to qualify for the series
<y> is the number of throwouts that can be awarded:
0 - none,
1 - discard a boat's lowest score upon qualifying (the default),
> 1 - the number of races needed to sail, after qualifying, to receive an additional throw out
Finish positions can be adjusted. Use common acronyms: DNF, DNS, OCS, DSQ, DNC. Just follow the boat number by a "-" and the scoring adjustment. Then re-run the script to generate new results reflecting the adjustment.
Other finish adjustments, e.g. -DNS or -DNC, are ignored in scoring. Boats that weren’t in the starting area, for example, don’t count for qualifying and it is not used in determining the number of participants in a race.
If your fleet awards participation credits for races missed, simply follow the boat number with a "-PAR" for the races in which credits are awarded. Participation credits are often used when a boat misses a race, for example, because the crew is running the races or participating in an outside event. Participation credits increase the number of races that a boat participates in for qualification purposes and for calculation of throw outs.
While any valid date can be entered, simply typing a month abbreviation (e.g. Jul, Aug, Sep, etc.) and day (e.g. Aug-4) will suffice (year defaults to the current year).
When the raceScore Extension runs a "Results" sheet is added (or replaced) in your spreadsheet.
Overall finish position in the series is followed by scoring details including qualifying specifics, the scoring method used, how ties (if present) are resolved, throwout calculations, and individual race finish positions.
Tips and Help
Here's a link to some sample raceScore input that you can copy and paste into your own Google Sheet where you have installed raceScore. Paste the sample data into your spreadsheet's Sheet1 and click on the raceScore app (under the Extensions menu item). In the sample, the Google Sheet (sometimes called a Tab) named "Sheet1" contains the finish input data used to generate the Google Sheet named "Results". Other Google Sheets in the sample contain examples of the different scoring parameters which can be used to override default values.
Occasionally sailScore may return duplicate results or fail to return a Results sheet. With any unexpected behavior try:
Deleting the Results sheet (if it exists),
Refresh (click: "Reload this page") Sheet1 (which contains the finishes you want to score),
wait 10 seconds, or so, for the raceScore app to reappear under Extensions and,
try running again.
Override parameters have a very specific syntax. Here are examples of parameter declarations that can be copied and pasted into your Sheet1 page - just modify the text to the right of the colon to meet your needs. The only option for "scoring method:" is Cox-Sprague. If this parameter is not present (or commented out e.g. "###scoring method: Cox-Sprague") the default High Point scoring method is used.
series: my series
qualification %: 50
scoring method: Cox-Sprague
When throwouts are specified in raceScore, regardless whether you are using High Point or Cox-Sprague, the worst finish position(s) in a series may not be the one(s) discarded. That's because finishing 2nd in a 2 boat fleet will generate a score that's lower (worse) than when finishing 4th in a 10 boat fleet. In a 2 boat fleet, a 2nd place finish generates a (High Point) score of .5 . In a 10 boat fleet getting a 4th generates a score of .7 . Since the .5 score is lower than a .7 score, raceScore will throwout the 2nd in a 2 boat fleet before throwing out the 4th in a 10 boat fleet. So, when it comes to throwouts, raceScore throws out the lowest calculated race score(s) across all races in a series - which is (are) not necessarily the worst finish position(s).
If you are still having trouble or if you have any questions please send an email to: firstname.lastname@example.org
raceScore is implemented through a Google Sheets extension that calls a web service. It is the web service that scores sailboat races using either the High Point Average or Cox-Sprague scoring systems. When the raceScore extension is run, finish data entered into Sheet1 is used as input to compute the scores, rank competitors, and return a .csv file containing results.
So, raceScore is actually composed of two technologies that work together. First, is the Google Sheets extension which is accessed through a menu item under Extensions on the main menu. Second, is the raceScore web service that runs in the Google Cloud. It's called a web service because the functionality built into raceScore is accessed using the https protocol. The service itself is written in python. As a true SaaS implementation, the raceScore service could be called by any application connected to the internet. Send it a .csv file of race finishes and it will return a .csv file containing results based on those finishes. If you would like to access raceScore functionality directly (e.g. not through the Google Extension) send a request to lm06820@gmail and I’ll provide the service address and details about required query parameters.
Interestingly, as a web service raceScore is physically run on a server in the Google Cloud. Since the computations are relatively simple and Cloud computers are relatively powerful, the cost to run raceScore in the Google Cloud is just a few pennies, absorbed fully by yours truly.
Using a Google Sheets extension to access the service makes generating results as easy as entering finish data into a spreadsheet and clicking the raceScore link. The raceScore extension is available through the Google marketplace. Once installed you will see the raceScore link under the Extensions menu. There are thousands of Google extensions. Some are used by other sports with complex scoring systems, see the Cross Country Scorer, for example. Importantly, although raceScore can be accessed through a Google spreadsheet, it does not use macros or cell functions coded in the spreadsheet that could be inadvertently deleted or modified.
We've been using raceScore in our local fleets for 2 years now. I created it because there wasn’t any other scoring program that was available to any computer that has access to the internet and a web browser. raceScore does not retain any data after the results are computed and does not collect any information. raceScore uses simple .csv files for both the input and returns a .csv file with the results.
Terms of Service
raceScore is free to use. Although we strive for perfection, the use of raceScore is offered without any warranties implied or otherwise. Please report problems to email@example.com
raceScore uses the dates, race numbers, and boat or sail numbers that you enter onto Sheet1 of the Google spreadsheet that you installed raceScore on. This data is used to compute the overall positions of participants in the series being scored. raceScore will not change the finish data you enter. The Results sheet inserted into your spreadsheet is generated by raceScore based on the finish data that you entered. No user data is stored or shared by this app.
raceScore results are computed in the Google Cloud. raceScore's use and transfer of race finish data that was received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.