90.0% ≤ sim ≤ 100%

HW5


convert_to_dict,get_medals_by_team,get_top_five,get_medals_trend,get_sports,get_common_sports: 3 clusters, 6 submissions


>> cluster #1(2)
# 6532150421 (point = 100.0%) sim = 99% def convert_to_dict(data): athletes_by_Year_NOC = {} a = data[0] for e in data[1::1]: year = e[9] NOC = e[7] if year not in athletes_by_Year_NOC: athletes_by_Year_NOC[year] = {} if NOC not in athletes_by_Year_NOC[year]: athletes_by_Year_NOC[year][NOC] = [{a[i]:e[i] for i in range(len(a))}] else: athletes_by_Year_NOC[year][NOC].append({a[i]:e[i] for i in range(len(a))}) return athletes_by_Year_NOC #====================================== def get_medals_by_team(athletes_by_Year_NOC, year): medals = {} for k,v in athletes_by_Year_NOC[year].items(): if k not in medals: medals[k] = [0, 0, 0] for e in v: if e["Medal"] == "Gold": medals[k][0] += 1 elif e["Medal"] == "Silver": medals[k][1] += 1 elif e["Medal"] == "Bronze": medals[k][2] += 1 for k,v in medals.items(): medals[k] = tuple(v) return medals #====================================== def get_top_five(medals): topfive = [] sm = [ ((-medals[e][0], -medals[e][1], -medals[e][2]), e) for e in medals.keys()] sm.sort() ans = sm[:5] for i in range(5,len(sm)): if (ans[-1][0] == sm[i][0]): ans.append(sm[i]) else: break topfive = [(e[1], -e[0][0], -e[0][1], -e[0][2]) for e in ans] return topfive #====================================== def get_medals_trend(athletes_by_Year_NOC, NOC, start, end): trend = [] for y in range(start,end+1): y = str(y) if y in athletes_by_Year_NOC: medals = get_medals_by_team(athletes_by_Year_NOC, y) if NOC in medals: t = medals[NOC] trend.append((y, t[0], t[1], t[2])) return trend #====================================== def get_sports(athletes_by_Year_NOC, NOC, year): sports = set() if year in athletes_by_Year_NOC and NOC in athletes_by_Year_NOC[year]: data = athletes_by_Year_NOC[year][NOC] for e in data: if not e["Medal"] == "NA": sports.add(e["Sport"]) return sports #====================================== def get_common_sports(athletes_by_Year_NOC, NOCs, year): sports = set() first = True for noc in NOCs: if first: sports = get_sports(athletes_by_Year_NOC, noc, year) first = False else: sports &= get_sports(athletes_by_Year_NOC, noc, year) return sports #====================================== # สามารถเขียนฟังก์ชันที่สร้างเองได้ในบริเวณด้านล่างของ cell นี้ เท่านั้น# 6530290221 (point = 100.0%) sim = 99% def convert_to_dict(data): athletes_by_Year_NOC = {} ListHead = data[0] for d in data[1:]: year = d[9] NOC = d[7] if year not in athletes_by_Year_NOC: athletes_by_Year_NOC[year] = {} if NOC not in athletes_by_Year_NOC[year]: athletes_by_Year_NOC[year][NOC] = [{ListHead[i]:d[i] for i in range(len(ListHead))}] else: athletes_by_Year_NOC[year][NOC].append({ListHead[i]:d[i] for i in range(len(ListHead))}) return athletes_by_Year_NOC #====================================== def get_medals_by_team(athletes_by_Year_NOC, year): medals = {} for key,value in athletes_by_Year_NOC[year].items(): if key not in medals: medals[key] = [0, 0, 0] for elem in value: if elem["Medal"] == "Gold": medals[key][0] += 1 elif elem["Medal"] == "Silver": medals[key][1] += 1 elif elem["Medal"] == "Bronze": medals[key][2] += 1 for key, value in medals.items(): medals[key] = tuple(value) return medals #====================================== def get_top_five(medals): topfive = [] sortedMedals = [ ((-medals[e][0], -medals[e][1], -medals[e][2]), e) for e in medals.keys()] sortedMedals.sort() ans = sortedMedals[:5] for i in range(5, len(sortedMedals)): if (ans[-1][0] == sortedMedals[i][0]): ans.append(sortedMedals[i]) else: break topfive = [(e[1], -e[0][0], -e[0][1], -e[0][2]) for e in ans] return topfive #====================================== def get_medals_trend(athletes_by_Year_NOC, NOC, start, end): trend = [] for year in range(start, end+1): year = str(year) if year in athletes_by_Year_NOC: medals = get_medals_by_team(athletes_by_Year_NOC, year) if NOC in medals: medalsOfTeam = medals[NOC] trend.append((year, medalsOfTeam[0], medalsOfTeam[1], medalsOfTeam[2])) return trend #====================================== def get_sports(athletes_by_Year_NOC, NOC, year): sports = set() if year in athletes_by_Year_NOC and NOC in athletes_by_Year_NOC[year]: data = athletes_by_Year_NOC[year][NOC] for d in data: if d["Medal"] != "NA": sports.add(d["Sport"]) return sports #====================================== def get_common_sports(athletes_by_Year_NOC, NOCs, year): sports = set() isFirst = True for noc in NOCs: if isFirst: sports = get_sports(athletes_by_Year_NOC, noc, year) isFirst = False else: sports &= get_sports(athletes_by_Year_NOC, noc, year) return sports #====================================== # สามารถเขียนฟังก์ชันที่สร้างเองได้ในบริเวณด้านล่างของ cell นี้ เท่านั้น # Part 1 # d = convert_to_dict(data) # print(len(d['2000']['THA'])) # for i in range(5): # print(d['2000']['THA'][i]) # Part 2 # d = convert_to_dict(data) # m = get_medals_by_team(d, '2000') # print(len(m)) # print(m) # # Part 3 # d = convert_to_dict(data) # m = get_medals_by_team(d, '2000') # print(get_top_five(m)) # d_mock = convert_to_dict(data_mock) # m_mock = get_medals_by_team(d_mock, '2010') # print(get_top_five(m_mock)) # # Part 4 # d = convert_to_dict(data) # print('USA') # print(get_medals_trend(d, 'USA', 2001, 2015)) # print('THA') # print(get_medals_trend(d, 'THA', 2000, 2016)) # # Part 5 # d = convert_to_dict(data) # print(get_sports(d, 'THA', '2000')) # print(get_sports(d, 'THA', '2010')) # print(get_sports(d, 'THA', '2020')) # print(get_sports(d, 'SOM', '2000')) # print(get_sports(d, 'THA', '2008')) # print(get_sports(d, 'VIE', '2008')) # print(get_sports(d, 'DEN', '2008')) # print(get_sports(d, 'XXX', '2000')) # # Part 6 # d = convert_to_dict(data) # print(get_common_sports(d, {'THA','VIE'}, '2008')) # print(get_common_sports(d, {'THA','VIE','DEN'}, '2008')) # print(get_common_sports(d, {'THA','XXX'}, '2008'))

>> cluster #2(2)
# 6530418321 (point = 87.5%) sim = 96% def convert_to_dict(data): athletes_by_Year_NOC = {} data_collect = data[0] for i in range(1, len(data)) : f = {} for j in range(len(data_collect)) : f[data_collect[j]] = data[i][j] if data[i][9] not in athletes_by_Year_NOC : athletes_by_Year_NOC[data[i][9]] = {data[i][7] : []} else : if data[i][7] not in athletes_by_Year_NOC[data[i][9]] : athletes_by_Year_NOC[data[i][9]][data[i][7]] = [] athletes_by_Year_NOC[data[i][9]][data[i][7]].append(f) return athletes_by_Year_NOC #====================================== def get_medals_by_team(athletes_by_Year_NOC, year): medals = {} for data in athletes_by_Year_NOC[year] : if data not in medals : medals[data] = [0,0,0] for i in range(len(athletes_by_Year_NOC[year][data])) : if athletes_by_Year_NOC[year][data][i]["Medal"] == "Bronze" : medals[data][2] += 1 elif athletes_by_Year_NOC[year][data][i]["Medal"] == "Silver" : medals[data][1] += 1 elif athletes_by_Year_NOC[year][data][i]["Medal"] == "Gold" : medals[data][0] += 1 medals[data] = tuple(medals[data]) return medals #====================================== def get_top_five(medals): topfive = [] new_d = [] f = set() for k,v in medals.items() : if v not in f : new_d.append([v, [k]]) f.add(v) else : for i in range(len(new_d)) : if new_d[i][0] == v : new_d[i][1].append(k) new_d.sort(reverse = True) n = 5 for i in range(len(new_d)) : new_d[i][1].sort() for e in new_d[i][1] : topfive.append((e, new_d[i][0][0], new_d[i][0][1], new_d[i][0][2])) n -= 1 if n <= 0: break return topfive #====================================== def get_medals_trend(athletes_by_Year_NOC, NOC, start, end): trend = [] for i in range(start, end + 1) : if str(i) in athletes_by_Year_NOC : for e in get_medals_by_team(d, str(i)) : if e == NOC : g,s,b = get_medals_by_team(d, str(i))[e] trend.append((str(i), g, s, b)) return trend #====================================== def get_sports(athletes_by_Year_NOC, NOC, year): sports = set() if year in athletes_by_Year_NOC : if NOC in athletes_by_Year_NOC[year] : for e in athletes_by_Year_NOC[year][NOC] : if e["Medal"] != "NA" : sports.add(e["Sport"]) return sports #====================================== def get_common_sports(athletes_by_Year_NOC, NOCs, year): sports = set() i = True for NOC in NOCs : if i : sports = get_sports(athletes_by_Year_NOC, NOC, year) i = False sports &= get_sports(athletes_by_Year_NOC, NOC, year) return sports #====================================== # สามารถเขียนฟังก์ชันที่สร้างเองได้ในบริเวณด้านล่างของ cell นี้ เท่านั้น# 6530266221 (point = 100.0%) sim = 96% def convert_to_dict(data): athletes_by_Year_NOC = {} data_collect = data[0] for i in range(1, len(data)) : f = {} for j in range(len(data_collect)) : f[data_collect[j]] = data[i][j] if data[i][9] not in athletes_by_Year_NOC : athletes_by_Year_NOC[data[i][9]] = {data[i][7] : []} else : if data[i][7] not in athletes_by_Year_NOC[data[i][9]] : athletes_by_Year_NOC[data[i][9]][data[i][7]] = [] athletes_by_Year_NOC[data[i][9]][data[i][7]].append(f) return athletes_by_Year_NOC #====================================== def get_medals_by_team(athletes_by_Year_NOC, year): medals = {} for data in athletes_by_Year_NOC[year] : if data not in medals : medals[data] = [0,0,0] for i in range(len(athletes_by_Year_NOC[year][data])) : if athletes_by_Year_NOC[year][data][i]["Medal"] == "Bronze" : medals[data][2] += 1 elif athletes_by_Year_NOC[year][data][i]["Medal"] == "Silver" : medals[data][1] += 1 elif athletes_by_Year_NOC[year][data][i]["Medal"] == "Gold" : medals[data][0] += 1 medals[data] = tuple(medals[data]) return medals #====================================== def get_top_five(medals): topfive = [] new_d = [] f = set() for k,v in medals.items() : if v not in f : new_d.append([v, [k]]) f.add(v) else : for i in range(len(new_d)) : if new_d[i][0] == v : new_d[i][1].append(k) new_d.sort(reverse = True) n = 5 for i in range(len(new_d)) : new_d[i][1].sort() for e in new_d[i][1] : topfive.append((e, new_d[i][0][0], new_d[i][0][1], new_d[i][0][2])) n -= 1 if n <= 0: break return topfive #====================================== def get_medals_trend(athletes_by_Year_NOC, NOC, start, end): trend = [] for i in range(start, end + 1) : if str(i) in athletes_by_Year_NOC : for e in get_medals_by_team(athletes_by_Year_NOC, str(i)) : if e == NOC : g,s,b = get_medals_by_team(athletes_by_Year_NOC, str(i))[e] trend.append((str(i), g, s, b)) return trend #====================================== def get_sports(athletes_by_Year_NOC, NOC, year): sports = set() if year in athletes_by_Year_NOC : if NOC in athletes_by_Year_NOC[year] : for e in athletes_by_Year_NOC[year][NOC] : if e["Medal"] != "NA" : sports.add(e["Sport"]) return sports #====================================== def get_common_sports(athletes_by_Year_NOC, NOCs, year): sports = set() i = True for NOC in NOCs : if i : sports = get_sports(athletes_by_Year_NOC, NOC, year) i = False sports &= get_sports(athletes_by_Year_NOC, NOC, year) return sports #====================================== # สามารถเขียนฟังก์ชันที่สร้างเองได้ในบริเวณด้านล่างของ cell นี้ เท่านั้น

>> cluster #3(2)
# 6530403921 (point = 100.0%) sim = 90% def convert_to_dict(data): athletes_by_Year_NOC = {} for i in data[1:]: if i[9] in athletes_by_Year_NOC: if i[7] in athletes_by_Year_NOC[i[9]]: athletes_by_Year_NOC[i[9]][i[7]].append(dict(zip(data[0], i))) else: athletes_by_Year_NOC[i[9]][i[7]] = [dict(zip(data[0], i))] else: athletes_by_Year_NOC[i[9]] = {i[7]:[dict(zip(data[0], i))]} return athletes_by_Year_NOC #====================================== def get_medals_by_team(athletes_by_Year_NOC, year): medals = {} for i in athletes_by_Year_NOC[year]: medals[i] = {'Gold': 0, 'Silver': 0, 'Bronze': 0} for j in athletes_by_Year_NOC[year][i]: if j['Medal'] == 'Gold': medals[i]['Gold'] += 1 elif j['Medal'] == 'Silver': medals[i]['Silver'] += 1 elif j['Medal'] == 'Bronze': medals[i]['Bronze'] += 1 medals[i] = (medals[i]['Gold'], medals[i]['Silver'], medals[i]['Bronze']) return medals #====================================== def get_top_five(medals): topfive = [] sortedmedals = [] for i in medals: sortedmedals.append([-medals[i][0],-medals[i][1],-medals[i][2],i]) sortedmedals.sort() prev = [sortedmedals[0][0], sortedmedals[0][1], sortedmedals[0][2]] topfive.append((sortedmedals[0][3],-sortedmedals[0][0], -sortedmedals[0][1], -sortedmedals[0][2])) count = 1 for i in sortedmedals[1:]: if count == 4: prev = [i[0],i[1],i[2]] if count >=5 and not (i[0] == prev[0] and i[1] == prev[1] and i[2] == prev[2]): break topfive.append((i[3],-i[0],-i[1],-i[2])) count += 1 return topfive #====================================== def get_medals_trend(athletes_by_Year_NOC, NOC, start, end): trend = [] for i in athletes_by_Year_NOC: if start<= int(i) <=end: x=get_medals_by_team(athletes_by_Year_NOC, i) if NOC in x: trend.append((i, x[NOC][0],x[NOC][1],x[NOC][2])) trend.sort() return trend #====================================== def get_sports(athletes_by_Year_NOC, NOC, year): sports = set() if year in athletes_by_Year_NOC: if NOC in athletes_by_Year_NOC[year]: for i in athletes_by_Year_NOC[year][NOC]: if i['Medal'] != 'NA': sports.add(i['Sport']) return sports #====================================== def get_common_sports(athletes_by_Year_NOC, NOCs, year): sports = set() if year in athletes_by_Year_NOC: x =0 for i in NOCs: if i in athletes_by_Year_NOC[year]: NOCSport = set() for i in athletes_by_Year_NOC[year][i]: if i['Medal'] != 'NA': NOCSport.add(i['Sport']) if x == 0: sports = sports.union(NOCSport) else: sports = sports.intersection(NOCSport) x+=1 return sports #====================================== # สามารถเขียนฟังก์ชันที่สร้างเองได้ในบริเวณด้านล่างของ cell นี้ เท่านั้น# 6530334221 (point = 100.0%) sim = 90% def convert_to_dict(data): athletes_by_Year_NOC = {} for i in data[1:]: if i[9] in athletes_by_Year_NOC: if i[7] in athletes_by_Year_NOC[i[9]]: athletes_by_Year_NOC[i[9]][i[7]].append(dict(zip(data[0], i))) else: athletes_by_Year_NOC[i[9]][i[7]] = [dict(zip(data[0], i))] else: athletes_by_Year_NOC[i[9]] = {i[7]: [dict(zip(data[0], i))]} return athletes_by_Year_NOC #====================================== def get_medals_by_team(athletes_by_Year_NOC, year): medals = {} for i in athletes_by_Year_NOC[year]: medals[i] = [0,0,0] for k in athletes_by_Year_NOC[year][i]: if k['Medal'] == 'Gold': medals[i][0] += 1 elif k['Medal'] == 'Silver': medals[i][1] += 1 elif k['Medal'] == 'Bronze': medals[i][2] += 1 medals[i]=tuple(medals[i]) return medals #====================================== def get_top_five(medals): topfive = [] sortedmedals = [] for i in medals: sortedmedals.append([-medals[i][0],-medals[i][1],-medals[i][2],i]) sortedmedals.sort() prev = [sortedmedals[0][0], sortedmedals[0][1], sortedmedals[0][2]] topfive.append((sortedmedals[0][3],-sortedmedals[0][0], -sortedmedals[0][1], -sortedmedals[0][2])) count = 1 for i in sortedmedals[1:]: if count == 4: prev = [i[0],i[1],i[2]] if count >=5 and not (i[0] == prev[0] and i[1] == prev[1] and i[2] == prev[2]): break topfive.append((i[3],-i[0],-i[1],-i[2])) count += 1 return topfive #====================================== def get_medals_trend(athletes_by_Year_NOC, NOC, start, end): trend = [] for i in athletes_by_Year_NOC: if int(i) >= start and int(i) <= end: g=get_medals_by_team(athletes_by_Year_NOC, i) if NOC in g: trend.append((i, g[NOC][0],g[NOC][1],g[NOC][2])) trend.sort() return trend #====================================== def get_sports(athletes_by_Year_NOC, NOC, year): sports = set() if year in athletes_by_Year_NOC: if NOC in athletes_by_Year_NOC[year]: for i in athletes_by_Year_NOC[year][NOC]: if i['Medal'] != 'NA': sports.add(i['Sport']) return sports #====================================== def get_common_sports(athletes_by_Year_NOC, NOCs, year): sports = set() j =0 if year in athletes_by_Year_NOC: for i in NOCs: if i in athletes_by_Year_NOC[year]: NOCSport = set() for i in athletes_by_Year_NOC[year][i]: if i['Medal'] != 'NA': NOCSport.add(i['Sport']) if j == 0: sports = NOCSport else: sports = sports.intersection(NOCSport) j+=1 return sports #====================================== # สามารถเขียนฟังก์ชันที่สร้างเองได้ในบริเวณด้านล่างของ cell นี้ เท่านั้น