Add feisresults, almost complete

This commit is contained in:
Neale Pickett 2022-10-10 19:59:25 -06:00
parent ef7e4cb86f
commit 8e512e7f3f
2 changed files with 31 additions and 9 deletions

View File

@ -3,7 +3,7 @@
*/
import * as FeisWorx from "./feisworx.mjs"
import * as Guidebook from "./guidebook.mjs"
import * as FeisResults from "./feisresults.mjs"
/**
* @typedef {import("./types.mjs").Results} Results
@ -90,7 +90,7 @@ function parseRawData(rawData) {
return FeisWorx.parse(rawData)
}
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)
}
@ -163,7 +163,6 @@ async function init() {
let table = newElement(div, "table")
fillTable(table, results)
console.log(results)
}
}

View File

@ -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"
@ -18,7 +14,7 @@ import {awardPoints, guessPlacing} from "./awardPoints.mjs"
/**
* Parse Guidebook data
* Parse feisresults data
*
* @param {Array.<Array.<String>>} rawData Raw data
* @returns {Results}
@ -107,9 +103,36 @@ import {awardPoints, guessPlacing} from "./awardPoints.mjs"
}
results.push(row)
}
disambiguatePlacings(results, numRounds, adjudicatorsPerRound)
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 {
parse,
}