|
@ -0,0 +1,96 @@ |
|
|
|
|
|
#!/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'] |