{"calculator":{"slug":"xc-team-score-calculator","math":{"href":"https://www.tracktoolspro.com/api/calculators/xc-team-score-calculator","jsonPointer":"/calculator/math","version":"2026-10-21.1","implementationVersion":"b5a8aca7b85361476e0321a08b7fa5f516fc9535","scope":"Canonical HTTP function and documented corresponding mounted-form math. This is public inspectable documentation, not access control or independent empirical validation.","unitNotation":"Input paths use [] and *; output paths are JSON Pointers with * (one segment) and ** (descendants). Empty output path denotes scalar result. Units apply to numeric quantities or explicitly described numeric strings; labels/statuses/booleans are dimensionless. More specific units, including count/index exceptions, override broad patterns.","interfaceNotes":["HTTP input is described by the adjacent inputSchema. The original handlers may accept numeric strings; this metadata adds no validation.","Mounted forms accept displayed clock/unit strings and enforce their own limits. Mounted tools limit strings to 200 characters and numeric parts to magnitude 1000000. Do not assume mounted/API input interchangeability.","Some legacy extreme/invalid tuples can produce null/empty results or nonfinite numbers serialized as null. Those are unavailable answers, not exact numerical predictions. Per-calculator domain describes the intended mathematical inputs."],"kind":"scoring-algorithm","implementationFiles":["lib/formulas/xc-scoring.ts"],"equations":["Validate distinct positive scoring places, skip completely blank rows, sort by adjusted place; first 5 score and rows 6/7 are listed displacers. teamScore=sum(first 5 places).","When all 5 scorer clocks exist: packTime=fifth-first; averageTime=sum(first 5 times)/5. Editorial pack thresholds <=30/60/90/120s, then Spread Out."],"inputUnits":{"runners[].place":"adjusted whole scoring place","runners[].time":"M:SS clock (s)"},"outputUnits":{"/teamScore":"points (place sum)","/scoringRunners/*/position":"dimensionless index/count","/scoringRunners/*/place":"scoring place","/scoringRunners/*/time":"s","/displacers/*/position":"dimensionless index/count","/displacers/*/place":"scoring place","/displacers/*/time":"s","/packTime":"s","/averageTime":"s"},"domain":["At least 5 distinct places, optional strict positive M:SS clocks, monotonic times by place and safe numeric totals; invalid collection returns null. Missing scorer clocks leave pack statistics null."],"rounding":["Raw IEEE-754 numbers; the mounted page formats clocks separately."],"assumptions":["Uses the entered values and the selected convention; this documentation does not strengthen existing validation."],"limitations":["One already-adjusted team, not complete meet scoring. Does not remove incomplete teams, resolve opponent displacement, dead heats or team ties. Pack labels are editorial."],"mountedPageNotes":[],"workedExamples":[{"input":{"runners":[{"place":"1","time":"15:10"},{"place":"5","time":"15:40"},{"place":"10","time":"16:05"},{"place":"16","time":"16:30"},{"place":"22","time":"16:50"}]},"expected":{"/teamScore":54,"/packTime":100},"absoluteTolerance":1e-8,"note":"Illustrative canonical-handler result; not independent validation of an empirical model."}],"constantsAndTables":{"scorers":5,"listedDisplacers":2,"packThresholdsSeconds":[30,60,90,120]},"sources":[{"title":"Canonical HTTP binding at the documented implementation revision","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/calculator-functions.ts","note":"Existing calculation handler; math metadata is additive."},{"title":"lib/formulas/xc-scoring.ts","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/formulas/xc-scoring.ts","note":"Primary implementation source for these equations/tables, not a claim of scientific calibration."}]},"annotations":{"readOnlyHint":true,"consequentialHint":false},"name":"XC Team Score Calculator","description":"Calculate one cross country team’s score from already-adjusted scoring places. Read the first-five time spread and mean, and list sixth and seventh runners. Full meet exclusions, opponent displacement, dead heats and team tiebreaks require the applicable meet rules and results.","category":"Cross Country","method":"POST","endpoint":"/api/calculators/xc-team-score-calculator","page":"/calculators/xc-team-score-calculator","inputSchema":{"type":"object","required":["runners"],"properties":{"runners":{"type":"array","description":"Runner rows with place and optional MM:SS time.","items":{"type":"object","description":"Runner input.","required":["place"],"properties":{"place":{"type":"string","description":"Finishing place."},"time":{"type":"string","description":"Optional race time as MM:SS.s."}}}}}},"example":{"runners":[{"place":"1","time":"15:10"},{"place":"5","time":"15:40"},{"place":"10","time":"16:05"},{"place":"16","time":"16:30"},{"place":"22","time":"16:50"}]}}}