From 3d479f1f606f3c6cece8b003cb76424a33dacb62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?tr=C3=A9meur?= Date: Sun, 30 Mar 2025 18:33:52 +0100 Subject: [PATCH] Add function to generate optimal portfolio --- README.org | 1 + colors.py | 332 ++++++++++++++++++++++++++++++++++++++++++ variables-template.py | 1 + 3 files changed, 334 insertions(+) diff --git a/README.org b/README.org index 49c9149..6539aa5 100644 --- a/README.org +++ b/README.org @@ -19,6 +19,7 @@ Python scripts to generate a mobile-friendly static site for tracking tcg cards - =servername=: name set for your remote in =rclone= - =serverpath=: path to the site root on the server (with leading slash, without trailing slash) - =subfolder=: subfolder under your (sub)domain in which the TCG pages will be located (leave as an empty string if they are at the top level) + - =url=: URL of your site index page including =https://= - =name=: the name you use in the game - =highpriority=: a list of high priority decks you’re collecting - =trademedium=: whether to allow trading medium-priority cards away in exchange for high-priority cards diff --git a/colors.py b/colors.py index fb0281c..df80d0d 100644 --- a/colors.py +++ b/colors.py @@ -1029,6 +1029,338 @@ def riku(): print("Characters") print(dupes(True,False,True,False)) +def nextportfolio(monochrome=False): + useddecks = {} + already = 0 + if monochrome: + for portfolio in portfolios: + if portfolio["type"] == "monochrome": + already += 1 + useddecks.update(portfolio["decks"]) + else: + for portfolio in portfolios: + if portfolio["type"] == "palette": + already += 1 + useddecks.update(portfolio["decks"]) + potentials = [] + for deck in decklist: + if deck["mastered"]: + if deck["colour"] != "special" and deck["colour"] != "limited": + potential = True + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + potential = False + if potential: + potentials.append(deck) + potentials = sorted(potentials, key=lambda d: d["mastered"]) + if monochrome: + reddecks = [] + orangedecks = [] + yellowdecks = [] + greendecks = [] + bluedecks = [] + purpledecks = [] + browndecks = [] + greydecks = [] + for deck in potentials: + if deck["colour"] == "red": + reddecks.append(deck) + elif deck["colour"] == "orange": + orangedecks.append(deck) + elif deck["colour"] == "yellow": + yellowdecks.append(deck) + elif deck["colour"] == "green": + greendecks.append(deck) + elif deck["colour"] == "blue": + bluedecks.append(deck) + elif deck["colour"] == "purple": + purpledecks.append(deck) + elif deck["colour"] == "brown": + browndecks.append(deck) + elif deck["colour"] == "gray": + greydecks.append(deck) + longestvalue = len(reddecks) + nextportcolour = "red" + if len(orangedecks) > longestvalue: + nextportcolour = "orange" + if len(yellowdecks) > longestvalue: + nextportcolour = "yellow" + if len(greendecks) > longestvalue: + nextportcolour = "green" + if len(bluedecks) > longestvalue: + nextportcolour = "blue" + if len(purpledecks) > longestvalue: + nextportcolour = "purple" + if len(browndecks) > longestvalue: + nextportcolour = "brown" + if len(greydecks) > longestvalue: + nextportcolour = "grey" + firstthree = [] + if nextportcolour == "red": + firstthree.append(reddecks[0]["name"]) + firstthree.append(reddecks[1]["name"]) + firstthree.append(reddecks[2]["name"]) + elif nextportcolour == "orange": + firstthree.append(orangedecks[0]["name"]) + firstthree.append(orangedecks[1]["name"]) + firstthree.append(orangedecks[2]["name"]) + elif nextportcolour == "yellow": + firstthree.append(yellowdecks[0]["name"]) + firstthree.append(yellowdecks[1]["name"]) + firstthree.append(yellowdecks[2]["name"]) + elif nextportcolour == "green": + firstthree.append(greendecks[0]["name"]) + firstthree.append(greendecks[1]["name"]) + firstthree.append(greendecks[2]["name"]) + elif nextportcolour == "blue": + firstthree.append(bluedecks[0]["name"]) + firstthree.append(bluedecks[1]["name"]) + firstthree.append(bluedecks[2]["name"]) + elif nextportcolour == "purple": + firstthree.append(purpledecks[0]["name"]) + firstthree.append(purpledecks[1]["name"]) + firstthree.append(purpledecks[2]["name"]) + elif nextportcolour == "brown": + firstthree.append(browndecks[0]["name"]) + firstthree.append(browndecks[1]["name"]) + firstthree.append(browndecks[2]["name"]) + elif nextportcolour == "grey": + firstthree.append(greydecks[0]["name"]) + firstthree.append(greydecks[1]["name"]) + firstthree.append(greydecks[2]["name"]) + secondfive = [] + nearingdecks = sorted(decklist, key=lambda d: d["count"],reverse=True) + slots = 5 + for deck in nearingdecks: + if slots > 0: + if not deck["mastered"]: + if nextportcolour == "grey": + if deck["colour"] == "gray": + secondfive.append(deck["name"]) + slots -= 1 + else: + if deck["colour"] == nextportcolour: + secondfive.append(deck["name"]) + slots -= 1 + alleight = sorted(firstthree + secondfive) + else: + thereddeck = False + redmastered = False + theorangedeck = False + orangemastered = False + theyellowdeck = False + yellowmastered = False + thegreendeck = False + greenmastered = False + thebluedeck = False + bluemastered = False + thepurpledeck = False + purplemastered = False + thebrowndeck = False + brownmastered = False + thegreydeck = False + greymastered = False + sorteddecks = 0 + for deck in potentials: + if sorteddecks < 3: + if deck["colour"] == "red" and thereddeck == False: + thereddeck = deck["name"] + redmastered = True + sorteddecks += 1 + elif deck["colour"] == "orange" and theorangedeck == False: + theorangedeck = deck["name"] + orangemastered = True + sorteddecks += 1 + elif deck["colour"] == "yellow" and theyellowdeck == False: + theyellowdeck = deck["name"] + yellowmastered = True + sorteddecks += 1 + elif deck["colour"] == "green" and thegreendeck == False: + thegreendeck = deck["name"] + greenmastered = True + sorteddecks += 1 + elif deck["colour"] == "blue" and thebluedeck == False: + thebluedeck = deck["name"] + bluemastered = True + sorteddecks += 1 + elif deck["colour"] == "purple" and thepurpledeck == False: + thepurpledeck = deck["name"] + purplemastered = True + sorteddecks += 1 + elif deck["colour"] == "brown" and thebrowndeck == False: + thebrowndeck = deck["name"] + brownmastered = True + sorteddecks += 1 + elif deck["colour"] == "gray" and thegreydeck == False: + thegreydeck = deck["name"] + greymastered = True + sorteddecks += 1 + nearingdecks = sorted(decklist, key=lambda d: d["count"],reverse=True) + if thereddeck == False: + for deck in nearingdecks: + if not deck["mastered"]: + if thereddeck == False: + if deck["colour"] == "red": + used = False + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + used = True + if used == False: + thereddeck = deck["name"] + if theorangedeck == False: + for deck in nearingdecks: + if not deck["mastered"]: + if theorangedeck == False: + if deck["colour"] == "orange": + used = False + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + used = True + if used == False: + theorangedeck = deck["name"] + if theyellowdeck == False: + for deck in nearingdecks: + if not deck["mastered"]: + if theyellowdeck == False: + if deck["colour"] == "yellow": + used = False + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + used = True + if used == False: + theyellowdeck = deck["name"] + if thegreendeck == False: + for deck in nearingdecks: + if not deck["mastered"]: + if thegreendeck == False: + if deck["colour"] == "green": + used = False + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + used = True + if used == False: + thegreendeck = deck["name"] + if thebluedeck == False: + for deck in nearingdecks: + if not deck["mastered"]: + if thebluedeck == False: + if deck["colour"] == "blue": + used = False + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + used = True + if used == False: + thebluedeck = deck["name"] + if thepurpledeck == False: + for deck in nearingdecks: + if not deck["mastered"]: + if thepurpledeck == False: + if deck["colour"] == "purple": + used = False + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + used = True + if used == False: + thepurpledeck = deck["name"] + if thebrowndeck == False: + for deck in nearingdecks: + if not deck["mastered"]: + if thebrowndeck == False: + if deck["colour"] == "brown": + used = False + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + used = True + if used == False: + thebrowndeck = deck["name"] + if thegreydeck == False: + for deck in nearingdecks: + if not deck["mastered"]: + if thegreydeck == False: + if deck["colour"] == "gray": + used = False + for key, value in useddecks.items(): + if deck["name"] == key.replace(" ",""): + used = True + if used == False: + thegreydeck = deck["name"] + alleight = [] + alleight.append(thereddeck) + alleight.append(theorangedeck) + alleight.append(theyellowdeck) + alleight.append(thegreendeck) + alleight.append(thebluedeck) + alleight.append(thepurpledeck) + alleight.append(thebrowndeck) + alleight.append(thegreydeck) + portcomment = "♥ Your Name: " + variables.name + "\n♥ Card post: " + variables.url + "\n♥ " + if monochrome: + portcomment += "Monochrome" + else: + portcomment += "Palette" + portcomment += " Portfolio #: " + str(already + 1) + "\n" + if monochrome: + portcomment += "♥ Monochrome Color: " + if nextportcolour == "grey": + if variables.british: + portcomment += "grey" + else: + portcomment += "gray" + else: + portcomment += nextportcolour + portcomment += "\n♥ 1st deck: " + alleight[0] + if alleight[0] in firstthree: + portcomment += " (mastered)" + portcomment += "\n♥ 2nd deck: " + alleight[1] + if alleight[1] in firstthree: + portcomment += " (mastered)" + portcomment += "\n♥ 3rd deck: " + alleight[2] + if alleight[2] in firstthree: + portcomment += " (mastered)" + portcomment += "\n♥ 4th deck: " + alleight[3] + if alleight[3] in firstthree: + portcomment += " (mastered)" + portcomment += "\n♥ 5th deck: " + alleight[4] + if alleight[4] in firstthree: + portcomment += " (mastered)" + portcomment += "\n♥ 6th deck: " + alleight[5] + if alleight[5] in firstthree: + portcomment += " (mastered)" + portcomment += "\n♥ 7th deck: " + alleight[6] + if alleight[6] in firstthree: + portcomment += " (mastered)" + portcomment += "\n♥ 8th deck: " + alleight[7] + if alleight[7] in firstthree: + portcomment += " (mastered)" + else: + portcomment += "♥ Red deck: " + thereddeck + if redmastered: + portcomment += " (mastered)" + portcomment += "\n♥ Orange deck: " + theorangedeck + if orangemastered: + portcomment += " (mastered)" + portcomment += "\n♥ Yellow deck: " + theyellowdeck + if yellowmastered: + portcomment += " (mastered)" + portcomment += "\n♥ Green deck: " + thegreendeck + if greenmastered: + portcomment += " (mastered)" + portcomment += "\n♥ Blue deck: " + thebluedeck + if bluemastered: + portcomment += " (mastered)" + portcomment += "\n♥ Purple deck: " + thepurpledeck + if purplemastered: + portcomment += " (mastered)" + portcomment += "\n♥ Brown deck: " + thebrowndeck + if brownmastered: + portcomment += " (mastered)" + portcomment += "\n♥ Gray deck: " + thegreydeck + if greymastered: + portcomment += " (mastered)" + print(portcomment) + porturl = input("\nPaste the comment URL here: ") + print("\n{\"event\":\"portfolio\",\"date\":datetime.datetime(" + datetime.datetime.today().strftime("%Y,%-m,%-d") + "),\"url\":\"" + porturl + "\",\"decks\":[\"" + alleight[0] + "\",\"" + alleight[1] + "\",\"" + alleight[2] + "\",\"" + alleight[3] + "\",\"" + alleight[4] + "\",\"" + alleight[5] + "\",\"" + alleight[6] + "\",\"" + alleight[7] + "\"]}") + if __name__ == "__main__": print("Building index page") diff --git a/variables-template.py b/variables-template.py index d3dd68d..4e0176c 100644 --- a/variables-template.py +++ b/variables-template.py @@ -1,6 +1,7 @@ servername = "" serverpath = "" subfolder = "" +url = "" name = "your name" highpriority = ["deckname","nameofadeck"] trademedium = True