mirror of
https://github.com/FAUSheppy/open-web-leaderboard.git
synced 2025-12-06 15:11:35 +01:00
change algorithm
This commit is contained in:
103
server.py
103
server.py
@@ -4,6 +4,7 @@ import requests
|
|||||||
import argparse
|
import argparse
|
||||||
import datetime
|
import datetime
|
||||||
import flask_caching as fcache
|
import flask_caching as fcache
|
||||||
|
import itertools
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import MapSummary
|
import MapSummary
|
||||||
@@ -133,92 +134,36 @@ def rounds():
|
|||||||
# display outcome
|
# display outcome
|
||||||
# display map
|
# display map
|
||||||
|
|
||||||
|
class Player:
|
||||||
|
def __init__(self, name, prio):
|
||||||
|
self.name = name
|
||||||
|
self.prio = prio
|
||||||
|
|
||||||
@app.route("/balance-tool", methods=['GET', 'POST'])
|
@app.route("/balance-tool", methods=['GET', 'POST'])
|
||||||
def balanceTool():
|
def balanceTool():
|
||||||
positions=["Top", "Jungle", "Mid", "Support", "Bottom"]
|
positions=["Top", "Jungle", "Mid", "Support", "Bottom"]
|
||||||
|
|
||||||
if flask.request.method == 'POST':
|
if flask.request.method == 'POST':
|
||||||
|
|
||||||
doneDict = dict()
|
permutations = itertools.permutations(players)
|
||||||
|
|
||||||
|
best = 100
|
||||||
|
bestOption = None
|
||||||
|
for option in permutations:
|
||||||
|
|
||||||
|
cur = 0
|
||||||
|
|
||||||
|
for i in range(len(option)):
|
||||||
|
cur += option[i].prio[i%5]
|
||||||
|
|
||||||
|
if cur < best:
|
||||||
|
best = cur
|
||||||
|
bestOption = option
|
||||||
|
|
||||||
retDict = { "left" : {}, "right" : {} }
|
retDict = { "left" : {}, "right" : {} }
|
||||||
recheckDict = {}
|
for i in range(len(positions)):
|
||||||
for p in positions:
|
retDict["left"].update( { positions[i] : option[i].name })
|
||||||
retDict["left"].update({ p : "" })
|
retDict["right"].update({ positions[i] : option[i%5].name })
|
||||||
retDict["right"].update({ p :"" })
|
|
||||||
|
|
||||||
# basic greedy #
|
|
||||||
for x in range(5):
|
|
||||||
for prio in range(1,6):
|
|
||||||
for k,v in flask.request.json.items():
|
|
||||||
if k in doneDict:
|
|
||||||
continue
|
|
||||||
if v[x] == str(prio):
|
|
||||||
if retDict["left"][positions[x]] == "":
|
|
||||||
retDict["left"][positions[x]] = k
|
|
||||||
doneDict.update({ k : True })
|
|
||||||
if prio == 5:
|
|
||||||
recheckDict.update({ k : x })
|
|
||||||
elif retDict["right"][positions[x]] == "":
|
|
||||||
retDict["right"][positions[x]] = k
|
|
||||||
doneDict.update({ k : True })
|
|
||||||
if prio == 5:
|
|
||||||
recheckDict.update({ k : x })
|
|
||||||
|
|
||||||
# try to improve the bad ones #
|
|
||||||
swapped = {}
|
|
||||||
print(recheckDict)
|
|
||||||
for k,v in recheckDict.items():
|
|
||||||
if k in swapped:
|
|
||||||
print("k in swapp")
|
|
||||||
continue
|
|
||||||
|
|
||||||
# determine own side for backswapping #
|
|
||||||
selfSide = None
|
|
||||||
if k in retDict["left"].values():
|
|
||||||
selfSide = "left"
|
|
||||||
else:
|
|
||||||
selfSide = "right"
|
|
||||||
|
|
||||||
|
|
||||||
# go through all positions look for better matches #
|
|
||||||
for posId in range(5):
|
|
||||||
|
|
||||||
currentHolderLeft = retDict["left"][positions[posId]]
|
|
||||||
currentHolderRight = retDict["right"][positions[posId]]
|
|
||||||
|
|
||||||
# right side swaps #
|
|
||||||
if (int(flask.request.json[currentHolderRight][v]) <=
|
|
||||||
int(flask.request.json[currentHolderRight][posId]) and
|
|
||||||
currentHolderRight != k and
|
|
||||||
not currentHolderRight in swapped):
|
|
||||||
|
|
||||||
print("(R) Swapping {} with {}".format(k, currentHolderRight))
|
|
||||||
|
|
||||||
retDict["right"][positions[posId]] = k
|
|
||||||
retDict[selfSide][positions[v]] = currentHolderRight
|
|
||||||
|
|
||||||
swapped.update({ k : True})
|
|
||||||
swapped.update({ currentHolderRight : True})
|
|
||||||
|
|
||||||
break
|
|
||||||
|
|
||||||
# left side swaps #
|
|
||||||
if (int(flask.request.json[currentHolderRight][v]) <=
|
|
||||||
int(flask.request.json[currentHolderLeft][posId]) and
|
|
||||||
currentHolderLeft != k and
|
|
||||||
not currentHolderRight in swapped):
|
|
||||||
|
|
||||||
print("(L) Swapping {} with {}".format(k, currentHolderLeft))
|
|
||||||
|
|
||||||
retDict["left"][positions[posId]] = k
|
|
||||||
retDict[selfSide][positions[v]] = currentHolderLeft
|
|
||||||
|
|
||||||
swapped.update({ k : True})
|
|
||||||
swapped.update({ currentHolderLeft : True})
|
|
||||||
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
renderContent = flask.render_template("balance_response_partial.html", d=retDict,
|
renderContent = flask.render_template("balance_response_partial.html", d=retDict,
|
||||||
requests=flask.request.json,
|
requests=flask.request.json,
|
||||||
|
|||||||
Reference in New Issue
Block a user