Created
December 13, 2015 16:41
-
-
Save cat12079801/4ebf9ef3e81ce6df8168 to your computer and use it in GitHub Desktop.
CODE RUNNER 2015で最終的に動いてたコード。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'open-uri' | |
require 'json' | |
token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" | |
def query(url) | |
print "http waiting...." | |
begin | |
res = open(url) | |
begin | |
JSON.parse(res.string) | |
rescue | |
res.string | |
end | |
rescue | |
end | |
end | |
def worker_times(workers) | |
a = [] | |
workers.each do |w| | |
a.push(w["time"]) | |
end | |
a | |
end | |
def worker_check(workers) | |
i = 0 | |
workers.each do |w| | |
i += 1 if w["time"] == 0 | |
end | |
i | |
end | |
def get_best_workers(workers, pattern) | |
res = [] | |
ave = 0 | |
s = 0 | |
workers.each do |w| | |
if w["time"] == 0 | |
ave += w["speed"][pattern] | |
s += 1 | |
end | |
end | |
ave /= s | |
workers.each_with_index do |w, i| | |
if w["time"] == 0 | |
res.push(i) if w["speed"][pattern] > ave | |
end | |
end | |
res | |
end | |
def check_getout token | |
outtask = nil | |
taste = 0 | |
print "get out order " | |
getout = query("http://game.coderunner.jp/getoutJson?token=#{token}") | |
if getout.nil?.! | |
getout["outsources"].each do |o| | |
#print o["reward"]*1.0 / o["load"] | |
#print " " | |
if o["time"] > 120 and (o["reward"]*1.0 / o["load"]) > 0.15 | |
if taste < (o["reward"]*1.0 / o["load"]) | |
outtask = o | |
end | |
end | |
end | |
end | |
outtask | |
end | |
having_id = 0 | |
prev_id = 0 | |
having = 0 | |
loop do | |
print "get info " | |
info = query("http://game.coderunner.jp/getinfoJson?token=" + token) | |
puts | |
print "workers stats: " | |
p worker_times(info["workers"]) | |
if info["tasks"].empty?.! | |
print "having task(#{having}): " | |
p info["tasks"] | |
task = info["tasks"][0]["id"] | |
having_id = task | |
workers = get_best_workers(info["workers"], info["tasks"][0]["pattern"]) | |
end | |
if worker_check(info["workers"]) > 10 and info["tasks"].empty? | |
if (outtask = check_getout(token)).nil?.! | |
workers = get_best_workers(info["workers"], outtask["pattern"]) | |
print "get out task: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" | |
print "assign " | |
puts query("http://game.coderunner.jp/assign?task=#{outtask["id"]}&worker=#{workers.join(',')}&token=" + token) | |
else | |
print "new task: " | |
puts query("http://game.coderunner.jp/taketaskJson?token=" + token) | |
end | |
end | |
if having_id == prev_id and task.nil?.! | |
having += 1 | |
else | |
prev_id = having_id | |
having = 0 | |
end | |
if having > 15 and info["outsources"].length < 45 | |
orderReward = info["tasks"][0]["reward"] / 5 * 4 | |
print "out order: " | |
puts query("http://game.coderunner.jp/outsource?token=#{token}&task=#{task}&orderReward=#{orderReward}") | |
having = 0 | |
elsif task.nil?.! | |
print "assign " | |
assign = query("http://game.coderunner.jp/assign?task=#{task}&worker=#{workers.join(',')}&token=" + token) | |
end | |
puts assign | |
puts | |
puts "sleeping......" | |
sleep 1 | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment