def encode(cards): counts = {} for card in cards.split(): if card in counts.keys(): counts[card] += 1 else: counts[card] = 1 cards_with_counts = [str(counts[card]) + ":" + card for card in counts.keys()] deck = LoRDeck(cards_with_counts) return deck.encode()
def test_buildFromCode(self): deck = get_dataframe() testDeck = deck['cardCode'].value_counts().to_dict() f = lambda key, value: str(value) + ':' + key cardList = [] for key, value in zip(testDeck.keys(), testDeck.values()): cardList.append(f(key, value)) testDeck = LoRDeck(cardList) code = testDeck.encode() testDataframe = buildFromCode(code) valid = deck['cardCode'].unique().tolist() test = testDataframe['cardCode'].unique().tolist() valid.sort() test.sort() for x, y in zip(valid, test): self.assertEqual(x, y)
keywordDict[card["region"]] |= set(card["keywords"]) masterDeck = [Card(c) for c in parsed] for i in range(len(masterDeck) + 1): card = random.choice(masterDeck) if basicCheck(card, myDeck, "Ionia"): myDeck.addCard(card, "Ionia") if basicCheck(card, myDeck, "Shadow Isles"): myDeck.addCard(card, "Shadow Isles") # for card in parsed: # keywordDict[card["region"]] = dict.fromkeys(keywordDict[card["region"]], 1) # for card in parsed: # for keyword in card["keywords"]: # keywordDict[card["region"]][keyword] += 1 # # rString = "" # for region, data in keywordDict.items(): # rString += f"{region}: " # for key, count in data.items(): # rString += f"{key}[{count}], " # rString = rString[:-2] # rString += "\n" # print(rString) print(myDeck) print(repr(myDeck)) print(len(myDeck)) print(myDeck.returnDeck()) deckCode = LoRDeck(myDeck.returnDeck()) print(deckCode.encode())
def exportCode(deck): col = deck['count'].apply(int).apply(str) + ':' + deck['cardCode'] deck = LoRDeck(col.to_list()) return deck.encode()
# successRate["Success"] += 1 # else: # successRate["Failure"] += 1 # del userDeck # print(f"\nTesting finished with a { (successRate['Success']/(successRate['Success']+successRate['Failure']))*100 }% Success rate.") # if ((successRate['Success']/(successRate['Success']+successRate['Failure']))*100) == 0 and numPulls >= 6: # print("\n\t This deck probably chose genres that are impossible to go together.") # userInput = input("\t Would you like to try again with the same genres? (y/n)\n") # except MemoryError: # print("Sorry that's too much.") with open("deckCodes.txt", "w") as outfile: successRate = defaultdict(int) genres = randomGenreList(GENRES) for i in range(10): print(f"\n DECK {i+1}\n") if basicCheck not in genres: genres.append(basicCheck) randomDeck = Deck(random.choice(REGIONS), random.choice(REGIONS), *genres) if randomDeck.fillDeck(): randomDeck.printDeckInfo() rCode = LoRDeck(randomDeck.returnDeck()) print(rCode.encode() + "\n") successRate["Success"] += 1 else: successRate["Failure"] += 1 del randomDeck print( f"\nTesting finished with a { (successRate['Success']/(successRate['Success']+successRate['Failure']))*100 }% Success rate." )
#o numero de cartas no deck não pode ser maior do que 40 e o numero de campeoes nao pode ser maior que 6 if contador > 41 or contadordeCampeos > 6: contador -= numeroDeCartas #esse laço continua ate completar o deck com 40 cartas elif contador <= 41: if listaCarta[pos][2] == 'Champion': imagemCampeoes[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) elif listaCarta[pos][2] != 'Champion' and listaCarta[pos][4] == 'Unit': imagemUnidades[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) elif listaCarta[pos][2] != 'Champion' and listaCarta[pos][4] == 'Spell': imagemFeiticos[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) listaDeck.append(listaCarta[pos][0]) cartaENumDeCartas = str(numeroDeCartas) + ':' + str(listaCarta[pos][3]) novodeck.append(cartaENumDeCartas) deck = LoRDeck(novodeck[:len(novodeck)]) result = str(deck.encode()) str_error = None except Exception: pass a = [] for key in sorted(imagemUnidades): a.append(imagemUnidades[key]) print(result)
def testingScript(printBool: bool): success, failure = 0, 0 if printBool: print( "\n\t\t/+/=====================================================[ Specific Test (Shadow Isles/ Ionia) ]=====================================================\+\ \n" ) # Test a deck with specifications genres = [basicCheck, KBM("Ephemeral", 3), firstRegionBias] myDeck = Deck("Shadow Isles", "Ionia", *genres) if myDeck.fillDeck(): if printBool: myDeck.printDeckInfo() success += 1 else: failure += 1 print() rCode = LoRDeck(myDeck.returnDeck()) print(rCode.encode()) del myDeck if printBool: print( "\n\t\t/+/=====================================================[ Mix Test (Demacia, Freljord) ]=====================================================\+\ \n" ) # Test the MIX genre genres = [basicCheck, MIX(CBM(4, 5), NKBM("Frostbite", 6))] myDeck = Deck("Freljord", "Freljord", *genres) myDeck.cardOverride("She Who Wanders", 2) myDeck.cardOverride("Tryndamere", 2) myDeck.cardOverride("Braum", 2) myDeck.cardOverride("Ashe", 2) if myDeck.fillDeck(): if printBool: myDeck.printDeckInfo() success += 1 else: failure += 1 print() rCode = LoRDeck(myDeck.returnDeck()) print(rCode.encode()) del myDeck if printBool: print( "\n\t\t/+/=====================================================[ Partial Import Test (Shadow Isles, Ionia) ]=====================================================\+\ \n" ) # Test a deck from an unfinished deck code genres = [basicCheck, CBM(4, 5)] myDeck = fromUnfinishedDeck("CEAQCAIFGUAQCAICBEAA", genres) if myDeck.fillDeck(): if printBool: myDeck.printDeckInfo() success += 1 else: failure += 1 print() rCode = LoRDeck(myDeck.returnDeck()) print(rCode.encode()) del myDeck if printBool: print( "\n\t\t/+/=====================================================[ All Random Test ]=====================================================\+\ \n" ) # Test a deck with no specifications, filled in by randomness genres = randomGenreList(GENRES) if basicCheck not in genres: genres.append(basicCheck) randomDeck = Deck(random.choice(REGIONS), random.choice(REGIONS), *genres) if randomDeck.fillDeck(): if printBool: randomDeck.printDeckInfo() success += 1 else: failure += 1 print() rCode = LoRDeck(randomDeck.returnDeck()) print(rCode.encode()) del randomDeck return success, failure
print(rCode.encode()) del randomDeck return success, failure # successRate = defaultdict(int) # for tests in range(10): # k,v = testingScript(True) # successRate["Success"] += k # successRate["Failure"] += v # print(f"\nTesting finished with a { (successRate['Success']/(successRate['Success']+successRate['Failure']))*100 }% Success rate.") savepath = Path(os.getcwd()[:-7] + "/src/main/resources/") / "deckCodes.txt" with open(os.path.join(os.path.expanduser('~'), savepath), "w") as outfile: successRate = defaultdict(int) genres = randomGenreList(GENRES) for i in range(10): if basicCheck not in genres: genres.append(basicCheck) randomDeck = Deck(random.choice(REGIONS), random.choice(REGIONS), *genres) if randomDeck.fillDeck(): rCode = LoRDeck(randomDeck.returnDeck()) outfile.write(rCode.encode() + "\n") successRate["Success"] += 1 else: successRate["Failure"] += 1 del randomDeck print( f"\nTesting finished with a { (successRate['Success']/(successRate['Success']+successRate['Failure']))*100 }% Success rate." )
def AllRandom(request): for x in range(8): try: with open('cartas.csv') as csv_file: listaCarta = list(csv.reader(csv_file)) #aqui está a lógica que vai criar um deck aleatorio com 40 cartas #iniciando listas e contadores listaDeck = [] novodeck = [] #imagem dos Campeoes a = {} #imagem dos Feiticos b = {} #imagem das Unidades c = {} copias = [] contador = 1 contadordeCampeos = 0 cor = [ 'Freljord', 'Demacia', 'Ionia', 'ShadowIsles', 'PiltoverZaun', 'Noxus', 'Targon', 'Shurima', 'Vazio' ] #escolhe 2 regiões aleatoriamentes, tem uma chance de escolher apenas uma região escolhaCor = random.choices(cor, k=2) #loop que escolhe uma carta aleatoria, há restrições nas escolhas while contador < 41: #escolhe uma carta aleatoria pos = random.randint(1, len(listaCarta)) #a carta deve pertencer à alguma das regiões escolhidas anteriormente e deve ser colecionável if listaCarta[pos][2] != 'None' and ( listaCarta[pos][1] == escolhaCor[0] or listaCarta[pos][1] == escolhaCor[1]): #escolhe um valor entre 1 e 3, esse valor vai ser a quantidade de cópias da carta escolhida numeroDeCartas = random.randint(1, 3) contador += numeroDeCartas #o numero maximo de campeoes é 6 if listaCarta[pos][ 2] == "Champion" and contadordeCampeos < 6: contadordeCampeos = numeroDeCartas #o numero de cartas no deck não pode ser maior do que 40 e o numero de campeoes nao pode ser maior que 6 if contador > 41 or contadordeCampeos > 6: contador -= numeroDeCartas #esse laço continua ate completar o deck com 40 cartas elif contador <= 41: if listaCarta[pos][2] == 'Champion': a[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) elif listaCarta[pos][2] != 'Champion' and listaCarta[ pos][4] == 'Unit': c[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) elif listaCarta[pos][2] != 'Champion' and listaCarta[ pos][4] == 'Spell': b[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) cartaENumDeCartas = str(numeroDeCartas) + ':' + str( listaCarta[pos][3]) for x in novodeck: if x == cartaENumDeCartas: novodeck.remove(x) novodeck.append(cartaENumDeCartas) deck = LoRDeck(novodeck[:len(novodeck)]) data = deck.encode() str_error = None except: pass # ordenar as cartas imagemCampeoes = [] for key in sorted(a): imagemCampeoes.append(a[key]) imagemFeiticos = [] for key in sorted(b): imagemFeiticos.append(b[key]) imagemUnidades = [] for key in sorted(c): imagemUnidades.append(c[key]) return render( request, 'AllRandom.html', { 'data': data, 'imagemCampeoes': imagemCampeoes, 'imagemFeiticos': imagemFeiticos, 'imagemUnidades': imagemUnidades, 'copias': copias })
def Singleton(request): for x in range(8): try: with open('cartas.csv') as csv_file: listaCarta = list(csv.reader(csv_file)) #aqui está a lógica que vai criar um deck aleatorio com 40 cartas #iniciando listas e contadores listaDeck = [] novodeck = [] #imagem dos Campeoes a = {} #imagem dos Feiticos b = {} #imagem das Unidades c = {} copias = [] contador = 1 contadordeCampeos = 0 cor = [ 'Freljord', 'Demacia', 'Ionia', 'ShadowIsles', 'PiltoverZaun', 'Noxus', 'Targon', 'Shurima', 'Vazio' ] #escolhe 2 regiões aleatoriamentes, tem uma chance de escolher apenas uma região escolhaCor = random.choices(cor, k=2) #loop que escolhe uma carta aleatoria, há restrições nas escolhas while contador < 41: #escolhe uma carta aleatoria pos = random.randint(1, len(listaCarta)) for x in listaDeck: if x == listaCarta[pos][0]: pos = random.randint(1, len(listaCarta)) #a carta deve pertencer à alguma das regiões escolhidas anteriormente e deve ser colecionável if listaCarta[pos][2] != 'None' and ( listaCarta[pos][1] == escolhaCor[0] or listaCarta[pos][1] == escolhaCor[1]): #escolhe 1 carta numeroDeCartas = 1 contador += numeroDeCartas #o numero maximo de campeoes é 6 if listaCarta[pos][ 2] == "Champion" and contadordeCampeos <= 5: contadordeCampeos = numeroDeCartas #o numero de cartas no deck não pode ser maior do que 40 e o numero de campeoes nao pode ser maior que 6 if contador > 41 or contadordeCampeos > 6: contador -= numeroDeCartas #esse laço continua ate completar o deck com 40 cartas elif contador <= 41: if listaCarta[pos][2] == 'Champion': a[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) elif listaCarta[pos][2] != 'Champion' and listaCarta[ pos][4] == 'Unit': c[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) elif listaCarta[pos][2] != 'Champion' and listaCarta[ pos][4] == 'Spell': b[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6]) listaDeck.append(listaCarta[pos][0]) cartaENumDeCartas = str(numeroDeCartas) + ':' + str( listaCarta[pos][3]) copias.append(str(numeroDeCartas)) novodeck.append(cartaENumDeCartas) #print(numeroDeCartas) if len(novodeck) == 40: deck = LoRDeck([ novodeck[0], novodeck[1], novodeck[2], novodeck[3], novodeck[4], novodeck[5], novodeck[6], novodeck[7], novodeck[8], novodeck[9], novodeck[10], novodeck[11], novodeck[12], novodeck[13], novodeck[14], novodeck[15], novodeck[16], novodeck[17], novodeck[18], novodeck[19], novodeck[20], novodeck[21], novodeck[22], novodeck[23], novodeck[24], novodeck[25], novodeck[26], novodeck[27], novodeck[28], novodeck[29], novodeck[30], novodeck[31], novodeck[32], novodeck[33], novodeck[34], novodeck[35], novodeck[36], novodeck[37], novodeck[38], novodeck[39] ]) #returns encoded string data = deck.encode() str_error = None except: pass # ordenar as cartas imagemCampeoes = [] for key in sorted(a): imagemCampeoes.append(a[key]) imagemFeiticos = [] for key in sorted(b): imagemFeiticos.append(b[key]) imagemUnidades = [] for key in sorted(c): imagemUnidades.append(c[key]) #print(contador) #print(novodeck) return render( request, 'Singleton.html', { 'data': data, 'imagemCampeoes': imagemCampeoes, 'imagemFeiticos': imagemFeiticos, 'imagemUnidades': imagemUnidades, 'copias': copias })