#!/usr/bin/env python import json import sys import glob from datetime import datetime solutionsDir = "solutions/" resultsScore = {} with open('scores') as f: for line in f: tmp = line.strip().split(' ') key = tmp[0]+"."+tmp[1] if not key in resultsScore: resultsScore[key] = int(tmp[2]) else: print "Bellandi dio merda, mi hai messo un doppione!!!" sys.exit(1) f.close() if len(sys.argv) < 2 or sys.argv[1] != "compare": results = json.loads(''.join(sys.stdin.readlines())) for i in range(0, len(results)): key = str(results[i]['problemId']) + "." + str(results[i]['seed']) if key in resultsScore: out_file = open(solutionsDir+str(results[i]['problemId'])+"."+str(results[i]['seed'])+"."+"%.110d"%resultsScore[key],"w") out_file.write(json.dumps(results[i])) out_file.close() else: print "Bellandi dio merda, ne manca uno!!!" sys.exit(1) else: results=[{'problemId':''}] solutionsToSend=[] scores = {} lastProblem = "" for solution in sorted(glob.glob(solutionsDir + str(results[0]['problemId']) + '*'), reverse=True): if lastProblem != solution[:solution.rfind(".")]: lastProblem = solution[:solution.rfind(".")] with open(solution) as json_data: partialSolution = json.load(json_data) json_data.close() solutionsToSend.append(partialSolution) scores[lastProblem.replace(solutionsDir, '')] = int(solution[solution.rfind(".") + 1:]) if len(sys.argv) < 2 or sys.argv[1] != "compare": print json.dumps(list(reversed(solutionsToSend))) else: import subprocess process = subprocess.Popen(['curl --user :2aaFCkjNIDHAsAIh9iQHc+Y+FGhkM5Z0RQgpO6TL6EA= -X GET https://davar.icfpcontest.org/teams/235/solutions'], shell = True, stdout=subprocess.PIPE) out, err = process.communicate() if err == None: print "Results:" serverResults = {} results = json.loads(out) for result in results: #2015-08-08T12:26:42.894Z date_object = datetime.strptime(result['createdAt'], '%Y-%m-%dT%H:%M:%S.%fZ') # print str(date_object) key = str(result['problemId'])+"."+str(result['seed']) if not key in serverResults or serverResults[key]['createdAt'] < result['createdAt']: serverResults[key] = result # print serverResults for solutionToSend in solutionsToSend: key = str(solutionToSend['problemId'])+"."+str(solutionToSend['seed']) if not key in serverResults: print str(solutionToSend['problemId'])+" "+str(solutionToSend['seed']) + " not present on server" else: if solutionToSend['solution'] != serverResults[key]['solution']: print str(solutionToSend['problemId'])+" "+str(solutionToSend['seed']) + " solution differ: " + solutionToSend['solution'] + " != " + serverResults[key]['solution'] + " (server)" elif serverResults[key]['score'] == None: print str(solutionToSend['problemId'])+" "+str(solutionToSend['seed']) + " solution evaluation pending" elif scores[key] != serverResults[key]['score']: print str(solutionToSend['problemId'])+" "+str(solutionToSend['seed']) + " score differ: " + str(scores[key]) + " != " + str(serverResults[key]['score']) + " (server)" # print scores # print type(out) # print json.dumps(serverResults) # print len(serverResults) else: print "error retriving results from server" sys.exit(1) sys.exit(0)