#!/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: if phrase != "\n" and phrase[0] != '#': phrase = phrase.lower()[:-1] found = False for serverResult in serverResults: if serverResult['solution'].encode('ascii','replace') == phrase : found = True if serverResult['powerScore'] > 0: print "Eureka! %s powerScore: %s score: %s"%(phrase , serverResult['powerScore'], serverResult['score']) powerPhrases.append(phrase ) break elif serverResult['powerScore'] is None: print " Evaluation pending on %s"%phrase 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 )], 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 ).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 else: print out print " %s unable to comunicate with server"%phrase else: print " %s return error"%phrase 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']