Skating for anything
31 May, 2020 - 3 min read
Ballroom dancing competition uses a unique algorithm to decide the ranking of competitors aggregating the votes of the multiple judges, which is called the "Skating System".
Normally the simple voting rule is just choosing a certain number of winners from all of the candidates.
This might be an easier way to aggregate the point of each judge, but it cannot fully collect the judges' evaluations as it will lose the information of the ranking between the winners.
Skating system that is used in the final round of ballroom dancing competition take the judges' evaluations more importantly.
They can vote how they evaluate the competitors in the form of ranking, and the skating system smartly aggregates their ranking and decide who is the winner.
For example, let's suppose there're 4 competitors. I name the teams as Team apple, Team Banana, Team Strawberry, and Team Orange.
And 3 judges evaluate their performance (although there are more judges actually..)
Judge A think the ranking is
1: Apple
2: Banana
3: Strawberry
4: Orange
Judge B think the ranking is
1: Banana
2: Apple
3: Strawberry
4: Orange
Judge C think the ranking is
1: Apple
2: Strawberry
3: Orange
4: Banana
Then we see each competitor got the evaluations from the judges as this way
Apple: 1st, 2nd, 1st
Banana: 2nd, 1st, 4th
Strawberry: 3rd, 3rd, 2nd
Orange: 4th, 4th, 3rd
Now we can see who is the winner more clearly. But the ranking is not decided perfectly yet. So, let's do some trick to the evaluations.
We will sort the evaluations for each candidate.
Apple: 1st, 1st, 2nd
Banana: 1st, 2nd, 4th
Strawberry: 2nd, 3rd, 3rd
Orange: 3rd, 4th, 4th
It looks better. Well, let's pick the middle one of each evaluation.
From the second evaluation, we can decide that Apple is 1st, Banana is 2nd, Strawberry is 3rd, and Orange is 4th.
As the algorithm itself was interesting to me, I thought I would like to implement it as a web application, and here is the output!
It uses server-side storage to accept the votes and returns the aggregated result.
To prevent the DoS attack I've decided to restrict voting activity only to the logged-in users via Google accounts, but anyone can watch the aggregated result without any user registration.
As it uses the online storage and I wanted to keep it secure, I don't disclose the source code, but feedback is welcome!