Skip to content

Instantly share code, notes, and snippets.

@cat12079801
Created December 13, 2015 16:41
Show Gist options
  • Save cat12079801/4ebf9ef3e81ce6df8168 to your computer and use it in GitHub Desktop.
Save cat12079801/4ebf9ef3e81ce6df8168 to your computer and use it in GitHub Desktop.
CODE RUNNER 2015で最終的に動いてたコード。
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