made triple events go off of the highest score instead of the average

This commit is contained in:
2026-07-04 14:56:32 +01:00
parent 62af341a1e
commit bfa49cfa91
4 changed files with 35 additions and 21 deletions

View File

@@ -12,7 +12,6 @@ ledger view
inserting manually into ledger inserting manually into ledger
# Database - HIGH PRIORITY # Database - HIGH PRIORITY
make events score based off of highest score instead of avg
load results from the excel sheet i made load results from the excel sheet i made
export whole contest results to csv export whole contest results to csv

View File

@@ -1,4 +1,4 @@
presetName,numberOfResults,unit,lowerIsBetter,averageResults presetName,numberOfResults,unit,lowerIsBetter,averageResults
default,1,m,0,0 default,1,m,0,0
three,3,m,0,1 three,3,m,0,0
race,1,s,1,0 race,1,s,1,0
1 presetName numberOfResults unit lowerIsBetter averageResults
2 default 1 m 0 0
3 three 3 m 0 1 0
4 race 1 s 1 0

View File

@@ -57,6 +57,7 @@ export async function POST({ request }: any) {
for (let result in currentPlayer.scores) { for (let result in currentPlayer.scores) {
let currentResult = currentPlayer.scores[result]; let currentResult = currentPlayer.scores[result];
if (currentResult === null || currentResult === undefined) continue;
let newScoreEntry = await db let newScoreEntry = await db
.insert(schema.registeredResults) .insert(schema.registeredResults)
.values({ .values({

View File

@@ -75,10 +75,10 @@
return valid.reduce((a, b) => a + b, 0) / valid.length; return valid.reduce((a, b) => a + b, 0) / valid.length;
} }
function best(scores: (number | null)[], fallback = Infinity): number { function best(scores: (number | null)[], lowerIsBetter: boolean, fallback = Infinity): number {
const valid = scores.filter((s): s is number => s !== null); const valid = scores.filter((s): s is number => s !== null);
if (valid.length === 0) return fallback; if (valid.length === 0) return fallback;
return Math.min(...valid); return lowerIsBetter ? Math.min(...valid) : Math.max(...valid);
} }
function getPoints(placement: number): number { function getPoints(placement: number): number {
@@ -106,10 +106,10 @@
const fallback = lowerIsBetter ? Infinity : -Infinity; const fallback = lowerIsBetter ? Infinity : -Infinity;
const sa = useAverage const sa = useAverage
? average(committedScores[a.id] ?? [], fallback) ? average(committedScores[a.id] ?? [], fallback)
: best(committedScores[a.id] ?? [], fallback); : best(committedScores[a.id] ?? [], lowerIsBetter, fallback);
const sb = useAverage const sb = useAverage
? average(committedScores[b.id] ?? [], fallback) ? average(committedScores[b.id] ?? [], fallback)
: best(committedScores[b.id] ?? [], fallback); : best(committedScores[b.id] ?? [], lowerIsBetter, fallback);
return lowerIsBetter ? sa - sb : sb - sa; return lowerIsBetter ? sa - sb : sb - sa;
}) })
@@ -229,7 +229,9 @@
position: i + 1, position: i + 1,
points: getPoints(i + 1), points: getPoints(i + 1),
scores: committedScores[p.id] ?? [], scores: committedScores[p.id] ?? [],
average: average(committedScores[p.id] ?? []) summaryValue: useAverage
? average(committedScores[p.id] ?? [])
: best(committedScores[p.id] ?? [], lowerIsBetter)
})) }))
})) }))
}) })
@@ -309,6 +311,12 @@
validScores.length > 0 validScores.length > 0
? validScores.reduce((a, b) => a + b, 0) / validScores.length ? validScores.reduce((a, b) => a + b, 0) / validScores.length
: 0} : 0}
{@const bestScore =
validScores.length > 0
? lowerIsBetter
? Math.min(...validScores)
: Math.max(...validScores)
: 0}
<div <div
animate:flip={{ duration: 300 }} animate:flip={{ duration: 300 }}
class="scoring-player-card" class="scoring-player-card"
@@ -362,6 +370,10 @@
<div class="text-sm opacity-60"> <div class="text-sm opacity-60">
avg: {avgScore.toFixed(2)} avg: {avgScore.toFixed(2)}
</div> </div>
{:else if numResults > 1}
<div class="text-sm opacity-60">
best: {bestScore.toFixed(2)}
</div>
{/if} {/if}
{:else if player.playerScores.length > 0} {:else if player.playerScores.length > 0}
{#each player.playerScores as score} {#each player.playerScores as score}
@@ -378,6 +390,7 @@
{/each} {/each}
</div> </div>
{#if event.state == 1}
<button <button
class="mt-4 rounded px-6 py-2 text-white" class="mt-4 rounded px-6 py-2 text-white"
class:bg-green-600={submitStatus === 'idle'} class:bg-green-600={submitStatus === 'idle'}
@@ -392,6 +405,7 @@
{:else if submitStatus === 'done'}Submitted ✓ {:else if submitStatus === 'done'}Submitted ✓
{:else}Error — Retry{/if} {:else}Error — Retry{/if}
</button> </button>
{/if}
</div> </div>
</div> </div>
{/if} {/if}