|
|
- #!/usr/bin/env python
- import subprocess
- import sys
- import json
-
- def stringToCommandSequence(string):
- commandsSequence = ""
- phrase = ""
- string = string.lower()
- for char in string:
- found = False
- for i in range(0, len(characters)):
- if char in characters[i]:
- phrase += characters[i][0]
- commandsSequence += commands[i]
- found = True
- continue
- if found == False:
- print "error in conversion: %s, %s"%(string, char)
- sys.exit(1)
-
- return phrase
-
- commands = ['MoveW',
- 'MoveE',
- 'MoveSW',
- 'MoveSE',
- 'RotateClockwise',
- 'RotateCounterclockwise']
-
- characters = [['p', "'", '!', '.', '0', '3'],
- ['b', 'c', 'e', 'f', 'y', '2'],
- ['a', 'g', 'h', 'i', 'j', '4'],
- ['l', 'm', 'n', 'o', ' ', '5'],
- ['d', 'q', 'r', 'v', 'z', '1'],
- ['k', 's', 't', 'u', 'w', 'x']]
-
- with open('Phrases of power') as f:
- phrases = f.readlines()
- f.close()
-
- 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:
- serverResults = json.loads(out)
- else:
- print "unable to fetch server"
- sys.exit(1)
-
-
- powerPhrases = []
-
- for phrase in phrases:
- phrase = phrase.lower()
- if phrase != "\n" and phrase[0] != '#':
- found = False
- for serverResult in serverResults:
- if serverResult['solution'].encode('ascii','replace') == phrase[:-1]:
- found = True
- if serverResult['powerScore'] > 0:
- print "Eureka! %s powerScore: %s score: %s"%(phrase[:-1], serverResult['powerScore'], serverResult['score'])
- powerPhrases.append(phrase[:-1])
- break
- elif serverResult['powerScore'] is None:
- print " Evaluation pending on %s"%phrase[:-1]
- break
- else:
- #print "No powerScore on %s"%phrase[:-1]
- break
- if found:
- continue
- for i in range (0, 25):
- process = subprocess.Popen(['src/TestSolution -f sample_problems/problem_'+str(i)+'.json -n 0 -p ' + stringToCommandSequence(phrase[:-1])], shell = True, stdout=subprocess.PIPE)
- out, err = process.communicate()
- if err == None and out.find("Error") == -1 and out.find("Irrefutable") == -1:
- break
- if err == None and out.find("Error") == -1 and out.find("Irrefutable") == -1:
- OUTPUT=('[{"seed":0,"tag":"shapeShifter","solution":"%s","problemId":12}]'%phrase[:-1]).replace('"', "\\\"")
- process = subprocess.Popen(['curl --user :2aaFCkjNIDHAsAIh9iQHc+Y+FGhkM5Z0RQgpO6TL6EA= -X POST -H "Content-Type: application/json" -d "' + OUTPUT + '" https://davar.icfpcontest.org/teams/235/solutions'], shell = True, stdout=subprocess.PIPE)
- out, err = process.communicate()
- if err == None and out == "created":
- print "%s sended"%phrase[:-1]
- else:
- print out
- print " %s unable to comunicate with server"%phrase[:-1]
- else:
- print " %s return error"%phrase[:-1]
- print "\n%d power phrases found:"%len(powerPhrases)
- for powerPhrase in powerPhrases:
- print powerPhrase
-
- #print "\n%d power phrases found only on server:"%len(powerPhrases)
- #for serverResult in serverResults:
- # if serverResult['powerScore'] > 0:
- # if serverResult['solution'].replace('\n', '') not in powerPhrases:
- # print serverResult['solution'], serverResult['powerScore']
|