From 35d6734d19148730174bcb04141aaaf08daeed42 Mon Sep 17 00:00:00 2001 From: Marek Baczynski Date: Sat, 7 Oct 2017 17:14:28 +0200 Subject: [PATCH] first commit !!!!!1!! --- MealHistory.json | 1 + kuk.py | 170 +++++++++++++++++++++++++++++++++++++++++++++++ kukconfig.json | 1 + 3 files changed, 172 insertions(+) create mode 100644 MealHistory.json create mode 100644 kuk.py create mode 100644 kukconfig.json diff --git a/MealHistory.json b/MealHistory.json new file mode 100644 index 0000000..3a03bc3 --- /dev/null +++ b/MealHistory.json @@ -0,0 +1 @@ +{"1": \ No newline at end of file diff --git a/kuk.py b/kuk.py new file mode 100644 index 0000000..a753af0 --- /dev/null +++ b/kuk.py @@ -0,0 +1,170 @@ +import random +import operator +import json + +configFileName = "kukconfig.json" + +people = {} +class Person(object): + global people + def __init__(self, name): + self.name = name + self.kukPoints = 0 + self.kukMealCount = 0 + self.kukServingCount = 0 + self.attendanceRate = 0.5 + self.eatenCount = 0 + people[name] = self + + @staticmethod + def get(name): + if name not in people: + people[name] = Person(name) + return people[name] + +mealHistory = {} +midTop = 0 + +class Meal(object): + global mealHistory + def __init__(self, kuk, date): + self.mid = self.getNextMID() + self.kuk = kuk + self.eaters = [] + self.date = date + self.meal = "food" + mealHistory[self.mid] = self + + @staticmethod + def getNextMID(): + global midTop + midTop += 1 + return midTop + +def save(): + with open(config['mealHistoryFile'], 'w') as outfile: + json.dump(mealHistory, outfile) + +if __name__ == '__main__': + + try: + with open (configFileName, 'r') as configFile: + config = json.load(configFile) + except IOError: + print "Config file not found! Loading defaults" + config = {} + config['ip'] = '127.0.0.1' + config['port'] = 5000 + config['debug'] = True + config['mealHistoryFile'] = "MealHistory.json" + + Person("Mark") + Person("Davide") + Person("Wille") + Person("Sven") + Person("David") + Person("Ahmed") + + for name, person in people.iteritems(): + person.attendanceRate = 0.2 + random.random() * 0.8 + + + points = {} + points[3] = 52 + points[4] = 69 + points[5] = 80 + points[6] = 90 + points[7] = 102 + points[8] = 112 + points[9] = 120 + points[10] = 135 + + important = ['delicious', 'fabulous', 'very tasty', 'good', 'very good', 'not bad at all', 'favorable', 'ok', 'nutritious', 'italian', 'mouth-watering', 'objectively pleasing', 'aromatic', 'something to write home about', 'probably digestible', 'edible', 'a complex blend of carbon-based chemistry','not sanitized"); DROP TABLE MEALS;--', 'not poisoned', 'of unknown origin', 'crunchy', 'finger-licking good', 'fantastic', 'the best one we had so far', 'fancy', 'extrordinary', 'pleasant'] + newcommers = ["Rick", "Morty", "Jerry", "Mr Poopy Buthole", "Karl Gustav VII", "Erik"] + + day = 1 + while True: + #somebody-joining module + if len(newcommers) > 0 and random.random() < 0.1: + newbe = Person(newcommers.pop()) + newbe.attendanceRate = 0.2 + random.random() * 0.8 + print "### NEW MEMBER ###" + print "!!! {} has joined the group !!!" + + n_people = 0 + while n_people < 3: + attendees = [] + for name, person in people.iteritems(): + if random.random() < person.attendanceRate: + attendees.append(name) + + n_people = len(attendees) + + print "\n\n===Day {}===".format(str(day)) + print "{} people comming: ".format(str(n_people)) + print " ", + for name in attendees: + print name + ",", + print "" + + #selecting the kuk + cookies = [v for k,v in people.iteritems() if k in attendees] + scookies = sorted(cookies, key=operator.attrgetter('kukPoints'), reverse=True) + tied = [] + for person in scookies: + if person.kukPoints < scookies[0].kukPoints: + break + tied.append(person) + + if len(tied)==1: + print "{} has the most points ({}) and is going to cook".format(tied[0].name, str(tied[0].kukPoints)) + kuk = tied[0] + else: + print "{} people are tied with {} points each".format(str(len(tied)), str(tied[0].kukPoints)) + print " ", + for person in tied: + print person.name + ",", + print "" + kuk = random.choice(tied) + print "{} was selected at random and is going to cook".format(kuk.name) + cookies.remove(kuk) + + #kuking and points + reward = points[n_people] + payment = points[n_people] / (n_people-1) + kuk.kukPoints -= reward + kuk.kukMealCount += 1 + kuk.kukServingCount += n_people + kuk.eatenCount += 1 + for cookie in cookies: + cookie.kukPoints += payment + cookie.eatenCount += 1 + + m = Meal(kuk.name, day); + m.eaters = "many people" + + + print "" + print "{} cooked for {} people and cleared {} KukPoints".format(kuk.name, n_people, reward) + print "{} people gained {} KukPoints each".format(n_people-1, payment) + print "The meal was {}!".format(random.choice(important[:day])) + + #loop and status + print "\nWhat now?" + r = raw_input("[C]ontinue | [B]reak | [S]how stats\n") + day += 1 + if r == 'b': + break + if(r=='s'): + print "STATUS:" + for name, person in people.iteritems(): + print "{} has {} kukPoints".format(name, str(person.kukPoints)) + print "\tcooked {} times, a total of {} servings, ate {} times".format(str(person.kukMealCount), str(person.kukServingCount), str(person.eatenCount)) + print "\nWhat now?" + r = raw_input("[C]ontinue | [B]reak | [S]ince I already showed the stats, this option does nothing\n") + if r == 'b': + break + + for mid, meal in mealHistory.iteritems(): + print "{} kuked for {} people".format(meal.kuk.name, str(len(meal.eaters))) + print "Thank you for using KUKCOUNTER" diff --git a/kukconfig.json b/kukconfig.json new file mode 100644 index 0000000..3c9a199 --- /dev/null +++ b/kukconfig.json @@ -0,0 +1 @@ +{"ip":"0.0.0.0", "port": 5000, "debug":"True", "mealHistoryFile":"MealHistory.json"} \ No newline at end of file