58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
import json
|
|
from pathlib import Path
|
|
from island.match import Match
|
|
|
|
result = {}
|
|
|
|
# = game_end_at + 1
|
|
MAX_ROUND = 29
|
|
|
|
for f in Path('wos-data-2022-1').iterdir():
|
|
p = Path(f)
|
|
if p.suffix == '.json':
|
|
name = p.stem
|
|
m = Match.read_from_json(str(f))
|
|
info = m.query('game', 'created').select('info').first()['info']
|
|
conf = json.loads(info['config'])
|
|
game_end_at = int(info['game_end_at'])
|
|
survivals = {}
|
|
foods = {}
|
|
survivals[0] = []
|
|
for p in m.query('player', 'join').select('pid').raw_data:
|
|
foods[p['pid']] = conf['start_resource']
|
|
survivals[0].append(p['pid'])
|
|
|
|
for i in range(1, game_end_at+1):
|
|
survivals[i] = []
|
|
for a in m.query('action', 'done').where(lambda x: x['rno'] == i).raw_data:
|
|
foods[a['a']] += conf['payoffs']["%s%s"%(a['act_a'], a['act_b'])][0] * a['tr'] / 1440.0
|
|
foods[a['b']] += conf['payoffs']["%s%s"%(a['act_a'], a['act_b'])][1] * a['tr'] / 1440.0
|
|
for j in foods.keys():
|
|
foods[j] -= conf['rounds']['consumption']
|
|
if foods[j] > 0:
|
|
survivals[i].append(j)
|
|
|
|
result[name] = survivals
|
|
|
|
# print(json.dumps(result))
|
|
|
|
with open("outputs/survivals_new.json", 'w') as f:
|
|
json.dump(result, f)
|
|
|
|
average = [0]*MAX_ROUND
|
|
for k, v in result.items():
|
|
for r, l in v.items():
|
|
average[int(r)] += len(l)
|
|
|
|
for i in range(MAX_ROUND):
|
|
average[i] /= len(result)
|
|
|
|
idx=[]
|
|
s=[]
|
|
for i in range(1,MAX_ROUND):
|
|
idx.append(str(i))
|
|
s.append("%.1f"%average[i])
|
|
|
|
print(" & ".join(idx))
|
|
print(" & ".join(s))
|