Top 3-person team for the Guildford challenge, found with Jakob's program and the suggested nemesis-filter:

Feliks Zemdegs: 6x6 Cube, 5x5 Cube, Rubik's Cube (178.18 seconds)
Bence Barát: 7x7 Cube, Pyraminx (178.14 seconds)
Yu Nakajima (中島悠): Megaminx, Rubik's Cube: With feet, 4x4 Cube, Square-1, 2x2 Cube, Rubik's Cube: One-handed, Rubik's Clock, Skewb (176.88 seconds)
Total: 178.18

Mini:

Louis Cormier: Megaminx, 3x3 one-handed, Pyraminx (64.87 seconds)
Yu Nakajima (中島悠): 4x4 Cube, Square-1, Rubik's Clock, Skewb (63.92 seconds)
Feliks Zemdegs: 5x5 Cube, 2x2 Cube, Rubik's Cube (63.61 seconds)
Total: 64.87
 
Last edited:
Nice! Though, you're using the nemesis-filter in an unsafe way. The "nemeses < team_size" is really only safe when number_of_top_teams is 1. Try this for example, it only produces seven teams instead of the ten it should and surely exist:
python guildford_challenge.py USA events="333 222" team_size=2
(The seven teams include five different people, so it should still find 5C2=10 teams, so looks like something else is fishy as well.)

A safe filter would be "nemeses < team_size * number_of_top_teams". Maybe less would be safe as well (but I must run to class right now).
 
Last edited:
Thanks for checking my code. The bug of 7 people instead of 5C2 was, that I disallowed branches, if the times are already worse than the worst entry in my TopTeams-Struct, but forgot to check, if TopTeams is full or not.

And for nemesis filtering:
"nemesis < team_size + number_of_top_teams - 1" is safe.

The proof is quite simple:
Let t=team_size and n=number_of_top_teams and the person P has >= t+n-1 nemesis. If A is part of a t-person-team TA, which is in the top n. Then I can replace A with the t+n-1 nemesis. In the worst case t-1 teams are not valid, because the replaced nemesis was already in the team. This leaves us with >= n valid teams. One of these n valid teams is different from the n-1 already in the list.
Therefore If A is in a team TA in the top n, we can find a better one, and the team TA slides at least position down. We can repeat this procedure until the team TA is out of the list. Therefore the premise was wrong, and A isn't part of any team in the top n.
 
Last edited:
And for nemesis filtering:
"nemesis < team_size + number_of_top_teams - 1" is safe.

The proof is quite simple:
Let t=team_size and n=number_of_top_teams and the person P has >= t+n-1 nemesis. If A is part of a t-person-team TA, which is in the top n. Then I can replace A with the t+n-1 nemesis. In the worst case t-1 teams are not valid, because the replaced nemesis was already in the team. This leaves us with >= n valid teams. One of these n valid teams is different from the n-1 already in the list.
Therefore If A is in a team TA in the top n, we can find a better one, and the team TA slides at least position down. We can repeat this procedure until the team TA is out of the list. Therefore the premise was wrong, and A isn't part of any team in the top n.

Correcting "P" to "A" and "nemesis" to "nemeses" was easy, but I still don't understand the proof. What does "worst" case mean, and why is it t-1? And how do you have n valid teams when t-1 of them are invalid? And what n-1 are already in the list? What list?
 
Ok I got it now. The problem was that you used "teams" for two different things (the original top teams as well as the possible replacement teams) and that the proof was unnecessarily complicated. I'll rephrase/shorten:

Let's say I have n+(t-1) nemeses, and consider the best team including me. That team can be improved by replacing me with one of my nemeses not already in the team. Of my n+(t-1) nemeses, up to t-1 might be on the team already, but at least n are not. Replacing me with (one of) these n nemeses results in n better teams. Thus I'm not in the top n teams.
 
Btw, that's also the best we can do with looking just at t and n, because there's a scenario where someone with n+t-2 nemeses is in team n.

Let's say we have t events (i.e., same as team size) and:
- Number the events 1 to t.
- Number the persons 1, 2, 3, ... according to their rank in event t.
- Person 1 is also the only one who can do event 1.
- Person 2 is also the only one who can do event 2.
...
- Person t-1 is also the only one who can do event t-1.

Now:
Team 1 is persons 1 to t-1 (because they're the only ones who can do events 1 to t-1) and person t (=t-1+1).
Team 2 is persons 1 to t-1 (because they're the only ones who can do events 1 to t-1) and person t-1+2.
...
Team n is persons 1 to t-1 (because they're the only ones who can do events 1 to t-1) and person t-1+n.

Thus person t-1+n, who has t+n-2 nemeses, is on team n.

(Geez, this took me way too long to write)
 
Last edited:
How many averages are there where the average of 5 = mean of 5?

How many averages of 5 are there where average = the 3rd worst/best solve?

How many means of 3 are there where mean of 3 = the 2nd best/worst solve? I suspect FMC may have a lot?
 
Hmm, interesting. Then it reaches a kind of critical mass, where being consistently great outweighs not doing much and being lucky. Yu Nakajima wins average, Antoine Cantin wins single and "both". Both have all 33 ranks.
 
Computing standard deviation of raw ranks just doesn't mean anything given the disparities in the numbers of competitors between events. What would be already more interesting to compute is the standard deviation of the percentages of competitors which are better ranked than you in every event.
 
I thought so at first as well, but once you're near the top in every event, like Antoine and Nakaji are, then the total number of competitors becomes rather irrelevant. And raw absolute ranks are more interesting (they're also the only ones shown on the WCA site).

Anyway, here are tables now, though I used 3 instead of 5 as minimum requirement, in order to show that "critical mass". You can see the top people have either a low or a high number of ranks, almost nobody with a "medium" number of ranks made it.

Using data from WCA_export510_20141113 and Stefan's WCA Statistics Tools.

[TABLE="class:grid,align:left"]
[TR][TD]Cuber[/TD][TD]Standard
Deviation
[/TD][TD]Ranks[/TD][TD]Mean[/TD][TD]Number[/TD][/TR]
[TR][TD]Jacques Chaumont[/TD][TD="align:right"]14.7[/TD][TD]4152,4168,4188[/TD][TD="align:right"]4169.3[/TD][TD="align:right"]3[/TD][/TR]
[TR][TD]Yu Nakajima (中島悠)[/TD][TD="align:right"]25.4[/TD][TD]4,8,13,23,23,25,28,36,41,41,43,58,60,72,103[/TD][TD="align:right"]38.5[/TD][TD="align:right"]15[/TD][/TR]
[TR][TD]Kun-Hung Pan (潘昆宏)[/TD][TD="align:right"]25.8[/TD][TD]4823,4828,4880[/TD][TD="align:right"]4843.7[/TD][TD="align:right"]3[/TD][/TR]
[TR][TD]Ruslan Garipov[/TD][TD="align:right"]37.5[/TD][TD]2411,2489,2492[/TD][TD="align:right"]2464.0[/TD][TD="align:right"]3[/TD][/TR]
[TR][TD]SeungBeom Cho (조승범)[/TD][TD="align:right"]43.0[/TD][TD]6,6,30,30,38,39,62,83,102,127,131[/TD][TD="align:right"]59.5[/TD][TD="align:right"]11[/TD][/TR]
[TR][TD]Antoine Cantin[/TD][TD="align:right"]44.8[/TD][TD]2,8,12,19,31,38,56,65,67,67,75,80,105,116,173[/TD][TD="align:right"]60.9[/TD][TD="align:right"]15[/TD][/TR]
[TR][TD]Mitchell Lane[/TD][TD="align:right"]45.5[/TD][TD]11,46,56,57,79,92,96,104,105,130,139,144,159,177[/TD][TD="align:right"]99.6[/TD][TD="align:right"]14[/TD][/TR]
[TR][TD]Andy Lau[/TD][TD="align:right"]56.8[/TD][TD]6589,6620,6722[/TD][TD="align:right"]6643.7[/TD][TD="align:right"]3[/TD][/TR]
[TR][TD]Sameer Mahmood[/TD][TD="align:right"]61.3[/TD][TD]11,36,60,74,78,86,119,192,201[/TD][TD="align:right"]95.2[/TD][TD="align:right"]9[/TD][/TR]
[TR][TD]John Brechon[/TD][TD="align:right"]62.2[/TD][TD]20,27,33,37,46,48,48,56,88,106,106,139,148,178,240[/TD][TD="align:right"]88.0[/TD][TD="align:right"]15[/TD][/TR]
[/TABLE]

Code:
[NOPARSE]SELECT
  personId Cuber,
  round(std(worldRank), 1) 'Standard\nDeviation',
  group_concat(worldRank order by worldRank) Ranks,
  round(avg(worldRank), 1) 'Mean',
  count(*) Number
FROM RanksAverage
GROUP BY personId
HAVING Number >= 3
ORDER BY 2, Number desc
LIMIT 10[/NOPARSE]
Using data from WCA_export510_20141113 and Stefan's WCA Statistics Tools.

[TABLE="class:grid,align:left"]
[TR][TD]Cuber[/TD][TD]Standard
Deviation
[/TD][TD]Ranks[/TD][TD]Mean[/TD][TD]Number[/TD][/TR]
[TR][TD]Antoine Cantin[/TD][TD="align:right"]47.4[/TD][TD]2,5,8,12,16,17,19,31,31,33,38,56,57,57,63,65,67,67,67,67,75,80,81,87,93,94,105,113,114,116,164,173,195[/TD][TD="align:right"]68.7[/TD][TD="align:right"]33[/TD][/TR]
[TR][TD]Yu Nakajima (中島悠)[/TD][TD="align:right"]49.0[/TD][TD]4,4,8,9,10,13,15,16,20,21,23,23,23,25,28,30,32,36,38,41,41,43,48,52,58,60,62,72,76,89,103,110,276[/TD][TD="align:right"]45.7[/TD][TD="align:right"]33[/TD][/TR]
[TR][TD]Mitchell Lane[/TD][TD="align:right"]56.9[/TD][TD]11,11,46,47,50,56,57,60,61,70,76,79,82,92,96,104,105,109,118,130,139,144,152,159,177,194,195,251[/TD][TD="align:right"]102.5[/TD][TD="align:right"]28[/TD][/TR]
[TR][TD]Jinghui Suo (索晶辉)[/TD][TD="align:right"]64.8[/TD][TD]81,91,144,183,258[/TD][TD="align:right"]151.4[/TD][TD="align:right"]5[/TD][/TR]
[TR][TD]Milán Baticz[/TD][TD="align:right"]65.2[/TD][TD]43,44,44,46,46,46,48,49,53,53,58,58,63,66,81,83,89,95,110,116,135,150,153,153,161,194,247,248,251[/TD][TD="align:right"]102.9[/TD][TD="align:right"]29[/TD][/TR]
[TR][TD]Christian Urrutia Elliott[/TD][TD="align:right"]71.6[/TD][TD]11260,11321,11423,11431[/TD][TD="align:right"]11358.8[/TD][TD="align:right"]4[/TD][/TR]
[TR][TD]John Brechon[/TD][TD="align:right"]72.3[/TD][TD]18,19,20,21,25,27,33,37,42,46,48,48,48,56,70,77,81,84,88,91,106,106,138,139,147,148,156,163,176,178,179,240,338[/TD][TD="align:right"]96.8[/TD][TD="align:right"]33[/TD][/TR]
[TR][TD]Evan Liu[/TD][TD="align:right"]82.5[/TD][TD]2,3,34,50,54,58,65,67,71,77,86,87,87,88,90,91,106,107,117,119,126,128,135,143,144,144,155,210,227,296,303,306,316[/TD][TD="align:right"]124.0[/TD][TD="align:right"]33[/TD][/TR]
[TR][TD]Zhizhe Liang (梁稚喆)[/TD][TD="align:right"]82.9[/TD][TD]22,34,179,206[/TD][TD="align:right"]110.3[/TD][TD="align:right"]4[/TD][/TR]
[TR][TD]SeungBeom Cho (조승범)[/TD][TD="align:right"]85.5[/TD][TD]4,6,6,27,30,30,38,39,46,62,74,78,83,92,102,123,126,127,131,152,210,232,298,314[/TD][TD="align:right"]101.3[/TD][TD="align:right"]24[/TD][/TR]
[/TABLE]

Code:
[NOPARSE]SELECT
  personId Cuber,
  round(std(worldRank), 1) 'Standard\nDeviation',
  group_concat(worldRank order by worldRank) Ranks,
  round(avg(worldRank), 1) 'Mean',
  count(*) Number
FROM (select * from RanksSingle union all select * from RanksAverage) tmp
GROUP BY personId
HAVING Number >= 3
ORDER BY 2, Number desc
LIMIT 10[/NOPARSE]
Using data from WCA_export510_20141113 and Stefan's WCA Statistics Tools.

[TABLE="class:grid,align:left"]
[TR][TD]Cuber[/TD][TD]Standard
Deviation
[/TD][TD]Ranks[/TD][TD]Mean[/TD][TD]Number[/TD][/TR]
[TR][TD]Eduard Ubasev[/TD][TD="align:right"]24.1[/TD][TD]7340,7359,7398[/TD][TD="align:right"]7365.7[/TD][TD="align:right"]3[/TD][/TR]
[TR][TD]Antoine Cantin[/TD][TD="align:right"]48.6[/TD][TD]5,16,17,31,33,57,57,63,67,67,81,87,93,94,113,114,164,195[/TD][TD="align:right"]75.2[/TD][TD="align:right"]18[/TD][/TR]
[TR][TD]Yu Nakajima (中島悠)[/TD][TD="align:right"]61.5[/TD][TD]4,9,10,15,16,20,21,23,30,32,38,48,52,62,76,89,110,276[/TD][TD="align:right"]51.7[/TD][TD="align:right"]18[/TD][/TR]
[TR][TD]Abhiraj Darbari[/TD][TD="align:right"]63.1[/TD][TD]9379,9411,9526[/TD][TD="align:right"]9438.7[/TD][TD="align:right"]3[/TD][/TR]
[TR][TD]Milán Baticz[/TD][TD="align:right"]65.9[/TD][TD]43,44,46,58,58,63,66,81,83,110,135,150,153,161,247,251[/TD][TD="align:right"]109.3[/TD][TD="align:right"]16[/TD][/TR]
[TR][TD]Mitchell Lane[/TD][TD="align:right"]66.3[/TD][TD]11,47,50,60,61,70,76,82,109,118,152,194,195,251[/TD][TD="align:right"]105.4[/TD][TD="align:right"]14[/TD][/TR]
[TR][TD]Michał Gaj[/TD][TD="align:right"]68.2[/TD][TD]5953,6039,6120[/TD][TD="align:right"]6037.3[/TD][TD="align:right"]3[/TD][/TR]
[TR][TD]Jinghui Suo (索晶辉)[/TD][TD="align:right"]72.4[/TD][TD]81,91,183,258[/TD][TD="align:right"]153.3[/TD][TD="align:right"]4[/TD][/TR]
[TR][TD]John Brechon[/TD][TD="align:right"]79.0[/TD][TD]18,19,21,25,42,48,70,77,81,84,91,138,147,156,163,176,179,338[/TD][TD="align:right"]104.1[/TD][TD="align:right"]18[/TD][/TR]
[TR][TD]Gaoxiang Shen (沈高翔)[/TD][TD="align:right"]80.5[/TD][TD]2918,3010,3106,3116[/TD][TD="align:right"]3037.5[/TD][TD="align:right"]4[/TD][/TR]
[/TABLE]

Code:
[NOPARSE]SELECT
  personId Cuber,
  round(std(worldRank), 1) 'Standard\nDeviation',
  group_concat(worldRank order by worldRank) Ranks,
  round(avg(worldRank), 1) 'Mean',
  count(*) Number
FROM RanksSingle
GROUP BY personId
HAVING Number >= 3
ORDER BY 2, Number desc
LIMIT 10[/NOPARSE]
 
Last edited:
Thanks for doing this! I wonder what it would look like if you calculated not having a rank as being last in that event (same way missing ranks are calculated in sum of ranks). I thought there would be mostly people who aim to have the lowest highest ranking, (practicing their worst event).
 
how about top 100 averae sum of ranks but instead of having a person who doesnt compete in a event the last place of the people who compete in the event you would have the last person out of all wca members.
example: 2x2 has 30 competitors worldwide and 300 competitors worldwide for any event, now if you dont compete in 2x2 you are not 30th but 300th.
 
Antonie: Why? I don't see a good reason for that. And it would be an ugly mix of standard and modified competition ranking (see here). Also, it would basically be the normal sum of ranks but only for people who completed all events.

Btw, you forgot to add 1. In your example, they'd share place 31, not 30.

Edit: Oh.... I see... you want Faz out of the top 10 sum of ranks, I guess? You're a bad fan.
 
Last edited:
Back
Top