HomeBlogMy WorksContact

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!
🧐 Tips
*bold* ```code``` h1.header h2.header h3.header h4.header h5.header h6.header rb(undefined) img(undefined) https://undefined