I did the same search!! I have no idea! initially because of the flag and the way the name may be spelled I think is Hong Kong, but the Dan level doesn't match
Re: World Amateur Go Championship 2012
Posted: Sat May 12, 2012 8:30 pm
by dankenzon
In a game where Thailand offered strong resistence, Japan wins showing how to take and keep control of a game!
Ok, North Korea won against an ADDED Chinese player, probably somebody didn't arrive or cancelled at the last moment
Re: World Amateur Go Championship 2012
Posted: Sun May 13, 2012 2:03 am
by Javaness2
Sounds like this guy is going to be removed again, as Morocco didn't manage to make the event.
Re: World Amateur Go Championship 2012
Posted: Sun May 13, 2012 9:30 am
by Laman
South Korean 4d: i've heard that Koreans often declare their rank as 4d. and i can't think of a sane criterion that would choose a 'real' 4d from their rich supply of extremely strong amateurs.
North Korean: he must be pretty strong, in the second round he defeated Pal Balogh 6d from Hungaria. North Korea has no pros, so they can send their strongest player instead of just their strongest amateur (compared to CJK)
New Zealand - Czechia (*.sgf) Czechia - Germany (*.sgf)
So, because the official published results are, IMO, hard to read, I've converted them to a more traditional format, with players sorted by score and SOS, and results based on the opponents current place.
Here's the standings after round 4 (with the pairing for round 5 already in there)
from __future__ import print_function import sys import codecs
def convert_result(filename): """File should be tab separated as: Place Country Name Results... """ players = {} with codecs.open(filename, 'r', 'utf-8') as file: for line in file: values = [field.strip() for field in line.strip().split("\t")] player = { 'id' : int(values[0]), 'name' : values[2], 'country' : values[1], 'results' : map(None, (int(opponent) if opponent else 0 for opponent in values[3::2]), (int(totalpts) if totalpts else -1 for totalpts in values[4::2]) ), # opponent/cumulative score pairs # map(None) works like zip, but pads with None instead of truncating to shortest sequence 'score': 0 } players[player['id']] = player
# sanity check to see if the pairings are valid rounds = zip(*[p['results'] for p in players.values()]) for round, results in enumerate(rounds): opponents = [x[0] for x in results] if len(opponents) != len(set(opponents)): print("Duplicate opponents in round {}".format(round)) for player in set(opponents): if opponents.count(player) > 1: print("Player {} was paired {} times".format(player, opponents.count(player))) for player in set(range(1, len(players)+1)) - set(opponents): print("Player {} is unpaired".format(player)) exit()
# convert cumulative scores into results per round for player in players.values(): prevtotal = 0 for round, (opponent, totalpts) in enumerate(player['results']): if totalpts > -1: # this round has been played if totalpts > prevtotal: # the player won prevtotal = totalpts player['results'][round] = (opponent, '+') player['score'] += 1 elif totalpts == prevtotal: # the player lost player['results'][round] = (opponent, '-') else: exit() # error, the cumulative score got lower else: # this round has not been played yet player['results'][round] = (opponent,'?')
# calculate SOS, SODOS, SOSOS for player in players.values(): player['sos'] = sum(players[opponent]['score'] for opponent, result in player['results'] if opponent and result != '?') player['sodos'] = sum(players[opponent]['score'] for opponent, result in player['results'] if opponent and result == '+') for player in players.values(): player['sosos'] = sum(players[opponent]['sos'] for opponent, result in player['results'] if opponent and result != '?')
# sort players by Score, SOS, SOSOS, then add the position to their data sorted_players = sorted(players.values(), key=lambda player: (player['score'], player['sos'], player['sosos']), reverse=True) for pos, player in enumerate(sorted_players): player['pos'] = pos + 1
# print players print(u"Pl {:30s}{:20s} Pt SOS SOSOS ".format("Name", "Country")) for player in sorted_players: print(u"{pos:2d} {name:30s}{country:20s} {score:2d} {sos:3d} {sosos:5d} ".format(**player), end='') for opponent, result in player['results']: if opponent: print(" {:3d}{}".format(players[opponent]['pos'] if opponent in players else 0, result), end='') print() #EOL
if __name__ == "__main__": if len(sys.argv) < 2: print("Usage {} <resultfile>".format(sys.argv[0])) else: convert_result(sys.argv[1])
Works based on a tab separated text file with copy-pasted data from ranka's results page. Assumes UTF-8, if the editor you're using uses another encoding, change it in the codecs.open line.
This version also with SOSOS goodness
Re: World Amateur Go Championship 2012
Posted: Mon May 14, 2012 4:16 am
by hyperpape
Quite pleased to see Yuan Zhou win against Japan.
Re: World Amateur Go Championship 2012
Posted: Mon May 14, 2012 10:02 am
by snorri
HermanHiddema wrote:So, because the official published results are, IMO, hard to read, I've converted them to a more traditional format, with players sorted by score and SOS, and results based on the opponents current place.
I did something similar in Excel and my numbers match with yours, but your table is nicer to read. Thanks!