# # Abrechnung v0.3 # import logging import sys logger = logging.getLogger(__name__) def addExtras(result, nExtras, extrasTarif): """takes result array and adds/subtracts the extras and return modified results""" newResult = [] for res in result: if res > 0: newResult.append(res+nExtras*extrasTarif) else: newResult.append(res-nExtras*extrasTarif) return newResult def spielwert(**kwargs): #print(kwargs) grundtarif = 20 extras = 10 solo = 50 result = [0,0,0,0] if not kwargs["endzeit"]: return { kwargs["spieler0"]: result[0], kwargs["spieler1"]: result[1], kwargs["spieler2"]: result[2], kwargs["spieler3"]: result[3], } if "manual_res0" in kwargs: return { kwargs["spieler0"]: kwargs["manual_res0"], kwargs["spieler1"]: kwargs["manual_res1"], kwargs["spieler2"]: kwargs["manual_res2"], kwargs["spieler3"]: kwargs["manual_res3"], } if kwargs["spieltyp"] == "Sauspiel": spieler = set([kwargs["spieler"],kwargs["mitspieler"]]) nichtspieler = list(set([0,1,2,3])-spieler) sauspiel_total = grundtarif + kwargs["schneider"]*extras+ kwargs["laufende"]*extras if kwargs["gewonnen"]: result[kwargs["spieler"]] = sauspiel_total result[kwargs["mitspieler"]] = sauspiel_total result[nichtspieler[0]] = -sauspiel_total result[nichtspieler[1]] = -sauspiel_total else: result[kwargs["spieler"]] = -sauspiel_total result[kwargs["mitspieler"]] = -sauspiel_total result[nichtspieler[0]] = sauspiel_total result[nichtspieler[1]] = sauspiel_total addExtras(result, kwargs["schneider"], extras) addExtras(result, kwargs["laufende"], extras) elif kwargs["spieltyp"] == "Wenz" or kwargs["spieltyp"] == "Solo": spieler = set([kwargs["spieler"]]) nichtspieler = list(set([0,1,2,3])-spieler) solo_total = solo + kwargs["schneider"]*extras+ kwargs["laufende"]*extras if kwargs["gewonnen"]: result[kwargs["spieler"]] = 3*solo_total result[nichtspieler[0]] = -solo_total result[nichtspieler[1]] = -solo_total result[nichtspieler[2]] = -solo_total else: result[kwargs["spieler"]] = -3*solo_total result[nichtspieler[0]] = solo_total result[nichtspieler[1]] = solo_total result[nichtspieler[2]] = solo_total elif kwargs["spieltyp"] == "Ramsch": if kwargs["durchmarsch_gewinner"] is not None: gewinner = set([kwargs["durchmarsch_gewinner"]]) nichtGewinner= list(set([0,1,2,3])-gewinner) result[kwargs["durchmarsch_gewinner"]] = 3*solo result[nichtGewinner[0]] = -solo result[nichtGewinner[1]] = -solo result[nichtGewinner[2]] = -solo else: verlierer = set([kwargs["verlierer"]]) nichtVerlierer = list(set([0,1,2,3])-verlierer) sum_verloren = 0 # result[nichtVerlierer[0]] = grundtarif + grundtarif* kwargs[f"jungfrau{nichtVerlierer[0]}"] # result[nichtVerlierer[1]] = grundtarif + grundtarif* kwargs[f"jungfrau{nichtVerlierer[1]}"] # result[nichtVerlierer[2]] = grundtarif + grundtarif* kwargs[f"jungfrau{nichtVerlierer[2]}"] nJungfrau = kwargs["jungfrau0"] + kwargs["jungfrau1"] + kwargs["jungfrau2"] + kwargs["jungfrau3"] result[nichtVerlierer[0]] = grundtarif * 2**nJungfrau result[nichtVerlierer[1]] = grundtarif * 2**nJungfrau result[nichtVerlierer[2]] = grundtarif * 2**nJungfrau result[kwargs["verlierer"]] = - result[nichtVerlierer[0]] - result[nichtVerlierer[1]] - result[nichtVerlierer[2]] nLeger = 0 if kwargs["leger0"]: nLeger += 1 if kwargs["leger1"]: nLeger += 1 if kwargs["leger2"]: nLeger += 1 if kwargs["leger3"]: nLeger += 1 result = [2**nLeger*i for i in result] nKontra = kwargs["kontra0"] + kwargs["kontra1"] + kwargs["kontra2"] + kwargs["kontra3"] result = [2**nKontra*i for i in result] if kwargs["tout"]: result = [2*i for i in result] if kwargs["sie"]: result = [4*i for i in result] # if kwargs["verspielt"] is not None: # print kwargs["verspielt"], result # if kwargs["verspielt"] < 0: return { kwargs["spieler0"]: result[0], kwargs["spieler1"]: result[1], kwargs["spieler2"]: result[2], kwargs["spieler3"]: result[3], } if __name__ == "__main__": g1 = { "spieler0": "Michi", "spieler1": "Moritz", "spieler2": "Philipp", "spieler3": "Andi", "geber": "Balthasar", "spieltyp": "Sauspiel", "leger0": False, "leger1": False, "leger2": False, "leger3": False, "spieler": 0, "mitspieler": 1, "kontra0": 0, "kontra1": 0, "kontra2": 0, "kontra3": 0, "tout": False, "sie": False, "schneider": 0, "laufende": 3, "gewonnen": True, "durchmarsch_gewinner": None, "verlierer": None, "jungfrau0": False, "jungfrau1": False, "jungfrau2": False, "jungfrau3": False, "vergeben": False, "verspielt": False, "farbe": "?", "startzeit": 1578346907, "endzeit": None, "kommentar": "?"} print(spielwert(**g1)) g2 = { "spieler0": "Michi", "spieler1": "Moritz", "spieler2": "Philipp", "spieler3": "Andi", "geber": "Balthasar", "spieltyp": "Wenz", "leger0": False, "leger1": False, "leger2": False, "leger3": True, "spieler": 3, "mitspieler": None, "kontra0": 0, "kontra1": 0, "kontra2": 0, "kontra3": 0, "tout": False, "sie": False, "schneider": 1, "laufende": 2, "gewonnen": True, "durchmarsch_gewinner": None, "verlierer": None, "jungfrau0": False, "jungfrau1": False, "jungfrau2": False, "jungfrau3": False, "vergeben": False, "verspielt": False, "farbe": "?", "startzeit": 1578346907, "endzeit": None, "kommentar": "?"} print(spielwert(**g2)) g3 = { "spieler0": "Michi", "spieler1": "Moritz", "spieler2": "Philipp", "spieler3": "Andi", "geber": "Balthasar", "spieltyp": "Ramsch", "leger0": False, "leger1": False, "leger2": False, "leger3": False, "spieler": 3, "mitspieler": None, "kontra0": 0, "kontra1": 0, "kontra2": 0, "kontra3": 0, "tout": False, "sie": False, "schneider": 1, "laufende": 2, "gewonnen": True, "durchmarsch_gewinner": None, "verlierer": 2, "jungfrau0": False, "jungfrau1": False, "jungfrau2": False, "jungfrau3": True, "vergeben": False, "verspielt": False, "farbe": "?", "startzeit": 1578346907, "endzeit": None, "kommentar": "?"} print(spielwert(**g3)) import json g4 = json.loads("""{"spieler0": "Michi", "spieler1": "Moritz", "spieler2": "Philipp", "spieler3": "Andi", "geber": "Balthasar", "aktuelleSpieler": ["Michi", "Moritz", "Philipp", "Andi"], "spieltyp": "Ramsch", "leger0": false, "leger1": false, "leger2": false, "leger3": false, "spieler": -1, "mitspieler": null, "kontra0": 0, "kontra1": 0, "kontra2": 0, "kontra3": 0, "tout": false, "sie": false, "schneider": 0, "laufende": 0, "gewonnen": null, "durchmarsch_gewinner": null, "verlierer": 0, "jungfrau0": false, "jungfrau1": false, "jungfrau2": false, "jungfrau3": false, "vergeben": false, "verspielt": null, "farbe": "?", "startzeit": 1578351992, "endzeit": 1578351997, "kommentar": ""}""") print(spielwert(**g4)) g4 = json.loads("""{"spieler0": "Michi", "spieler1": "Moritz", "spieler2": "Philipp", "spieler3": "Andi", "geber": "Balthasar", "aktuelleSpieler": ["Michi", "Moritz", "Philipp", "Andi"], "spieltyp": "Ramsch", "leger0": false, "leger1": false, "leger2": false, "leger3": false, "spieler": -1, "mitspieler": null, "kontra0": 0, "kontra1": 0, "kontra2": 0, "kontra3": 0, "tout": false, "sie": false, "schneider": 0, "laufende": 0, "gewonnen": null, "durchmarsch_gewinner": null, "verlierer": 0, "jungfrau0": true, "jungfrau1": true, "jungfrau2": false, "jungfrau3": false, "vergeben": false, "verspielt": null, "farbe": "?", "startzeit": 1578351992, "endzeit": 1578351997, "kommentar": ""}""") print(spielwert(**g4)) logging.basicConfig(level=logging.INFO) import argparse parser = argparse.ArgumentParser() parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) args = parser.parse_args() js = json.load(args.infile) print(spielwert(**js))