|
|
- #!/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)
|