Add feisresults, almost complete
This commit is contained in:
parent
ef7e4cb86f
commit
8e512e7f3f
|
@ -3,7 +3,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as FeisWorx from "./feisworx.mjs"
|
import * as FeisWorx from "./feisworx.mjs"
|
||||||
import * as Guidebook from "./guidebook.mjs"
|
import * as FeisResults from "./feisresults.mjs"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {import("./types.mjs").Results} Results
|
* @typedef {import("./types.mjs").Results} Results
|
||||||
|
@ -90,7 +90,7 @@ function parseRawData(rawData) {
|
||||||
return FeisWorx.parse(rawData)
|
return FeisWorx.parse(rawData)
|
||||||
}
|
}
|
||||||
if (firstRow[firstRow.length-1].trim().toLowerCase() == "total ip *") {
|
if (firstRow[firstRow.length-1].trim().toLowerCase() == "total ip *") {
|
||||||
return Guidebook.parse(rawData)
|
return FeisResults.parse(rawData)
|
||||||
}
|
}
|
||||||
console.error("First row doesn't resemble anything I can cope with", firstRow)
|
console.error("First row doesn't resemble anything I can cope with", firstRow)
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,6 @@ async function init() {
|
||||||
|
|
||||||
let table = newElement(div, "table")
|
let table = newElement(div, "table")
|
||||||
fillTable(table, results)
|
fillTable(table, results)
|
||||||
console.log(results)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
/**
|
/**
|
||||||
* Guidebook parser
|
* Feisresults.com parser
|
||||||
*
|
*
|
||||||
* We're not actually sure what generated these PDFs.
|
|
||||||
* But we got them from Guidebook, so there you go.
|
|
||||||
*
|
|
||||||
* This is the output of Adobe Reader saving the PDF as XML.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {awardPoints, guessPlacing} from "./awardPoints.mjs"
|
import {awardPoints, guessPlacing} from "./awardPoints.mjs"
|
||||||
|
@ -18,7 +14,7 @@ import {awardPoints, guessPlacing} from "./awardPoints.mjs"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse Guidebook data
|
* Parse feisresults data
|
||||||
*
|
*
|
||||||
* @param {Array.<Array.<String>>} rawData Raw data
|
* @param {Array.<Array.<String>>} rawData Raw data
|
||||||
* @returns {Results}
|
* @returns {Results}
|
||||||
|
@ -107,9 +103,36 @@ import {awardPoints, guessPlacing} from "./awardPoints.mjs"
|
||||||
}
|
}
|
||||||
results.push(row)
|
results.push(row)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disambiguatePlacings(results, numRounds, adjudicatorsPerRound)
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function disambiguatePlacings(results, numRounds, adjudicatorsPerRound) {
|
||||||
|
for (let roundNumber = 0; roundNumber < numRounds; roundNumber++) {
|
||||||
|
/**
|
||||||
|
* A list of raw score, award points, and placing
|
||||||
|
*
|
||||||
|
* @type {Array.<Adjudication>}
|
||||||
|
*/
|
||||||
|
for (let judgeNumber = 0; judgeNumber < adjudicatorsPerRound; judgeNumber++) {
|
||||||
|
let scores = []
|
||||||
|
for (let result of results) {
|
||||||
|
scores.push(result.rounds[roundNumber][judgeNumber])
|
||||||
|
}
|
||||||
|
scores.sort((a,b) => b.raw - a.raw)
|
||||||
|
|
||||||
|
let greatestPlacing = 0
|
||||||
|
for (let adjudication of scores) {
|
||||||
|
let possibilities = guessPlacing(adjudication.points)
|
||||||
|
possibilities.sort((a,b) => b-a)
|
||||||
|
// XXX: eliminate possibilities less than greatestPlacing, then pick the largest
|
||||||
|
}
|
||||||
|
console.log(scores)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
parse,
|
parse,
|
||||||
}
|
}
|
Loading…
Reference in New Issue