https://codeiq.jp/ace/yuki_hiroshi/q411
https://codeiq.jp/achievement/34
・ Es war kein Problem, den kürzesten Weg zu finden ・ Aufgrund der Art des Problems, mit WebAPI nach dem nächsten Direktflug zu suchen, gehen wir davon aus, dass eine große Anzahl von Zweigen lauert, und führen den folgenden Schnitt durch.
Was ich getan habe war wirklich einfach.
star-flight.py
'''
Created on 2013/07/31
@author: nubilum
'''
import urllib2
import time
import os.path
limit = 5
start = 5426528869786
deep = 4363616111476
deeper = 5092488161056
deepest = 8838746292440
goal_points = [start, deep, deeper, deepest]
cache_path = 'cache.txt'
cache = {}
already = {}
def search(start, goal):
global cache
global already
load_cache()
now = start
queue = []
idx = 0
counter = 0
queue.append([[start]])
while True:
current = []
routes_list = queue[idx]
for routes in routes_list:
print routes
last = routes[-1]
if last in cache:
pathes = cache[last]
for path in pathes:
if path == 0:
break
if path in already:
continue
already[path] = 1
next = routes[:]
next.append(path)
current.append(next)
if path == goal:
return next
else:
next_pathes = []
for i in xrange(0, 100):
response = get_response(last, i)
counter += 1
if response == 0:
break
if response in already:
continue
already[response] = 1
next_pathes.append(response)
next = routes[:]
next.append(response)
current.append(next)
if response == goal:
return next
if counter % limit == 0:
time.sleep(0.1)
write_cache(last, next_pathes)
now = next
queue.append(current)
idx += 1
def write_cache(start, path):
global cache_path
f = open(cache_path, "a")
f.write(str(start) + ":" + ','.join([ str(p) for p in path ]) + "\n")
f.close()
def load_cache():
global cache
global cache_path
if os.path.exists(cache_path) ==False:
return
f = open(cache_path, "r")
data = f.read()
f.close()
for line in data.split('\n'):
if line == '': continue
start, path = line.split(':')
cache[int(start)] = [int(p) if len(p) > 0 else 0 for p in path.split(',')]
def get_response(id, nth):
response = urllib2.urlopen('http://133.242.134.37/deepest.cgi?id=%d&nth=%d' % (id, nth))
return int(response.read().rstrip('rn'))
def main():
global goal_points
result = []
for i in xrange(0, len(goal_points) - 1):
answer_routes = search(goal_points[i], goal_points[i + 1])
print "answer:", answer_routes
for point in answer_routes:
result.append(point)
print ",".join([str(p) for p in result])
print "ENV: Python"
if __name__ == '__main__':
main()
Recommended Posts