schafkopf-db/abrechnung.py
Balthasar Schachtner 06371aa8c2 add new abrechnung
2020-01-08 15:50:16 +01:00

256 lines
9 KiB
Python

#
# 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))