From 06371aa8c23ab99a7ec3562320f9fc6c2426b452 Mon Sep 17 00:00:00 2001 From: Balthasar Schachtner Date: Wed, 8 Jan 2020 15:50:16 +0100 Subject: [PATCH] add new abrechnung --- abrechnung.py | 256 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 abrechnung.py diff --git a/abrechnung.py b/abrechnung.py new file mode 100644 index 0000000..852c485 --- /dev/null +++ b/abrechnung.py @@ -0,0 +1,256 @@ +# +# 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))