contentmatcher/test.py

135 lines
3.7 KiB
Python
Raw Normal View History

2022-04-29 18:09:54 +02:00
from random import randint, choices
# item
2022-04-28 18:37:36 +02:00
#collection
clltn = []
2022-05-02 00:17:32 +02:00
# card = id, title, due, interval, owned_by, shared
2022-04-29 16:57:24 +02:00
def generate_card (clltn=[], user="bob", shared=False):
id = len(clltn) + 1
2022-04-28 18:37:36 +02:00
title = "".join([chr(randint(ord('a'), ord('z'))) for i in range(5)])
due = -1 #means new
interval = 0
2022-04-29 16:57:24 +02:00
owned_by = user
card = id, title, due, interval, owned_by, shared
2022-04-28 18:37:36 +02:00
return card
def generate_clltn (n_of_cards):
2022-05-02 00:17:32 +02:00
clltn = [] #mogoče bi blo dobro met dictionary, sam že štejemo len zgoraj...
2022-04-28 18:37:36 +02:00
for n in range(n_of_cards):
2022-04-29 16:57:24 +02:00
clltn.append(generate_card(clltn=clltn))
2022-04-28 18:37:36 +02:00
return clltn
2022-04-29 16:57:24 +02:00
##1 SR - super-memo style
2022-04-28 18:37:36 +02:00
def get_new(user_clltn, n_of_cards):
for card in user_clltn:
pass
2022-04-29 16:57:24 +02:00
2022-04-28 18:37:36 +02:00
def get_due(user_clltn, n_of_cards):
pass
2022-04-29 18:09:54 +02:00
def generate_deck_sr(user_clltn, max_new, max_deck_size):
2022-04-28 18:37:36 +02:00
pass
2022-04-29 16:57:24 +02:00
def run_sr():
pass
2022-04-28 18:37:36 +02:00
#2 Probabilistic
2022-04-29 18:09:54 +02:00
## problem je, da pri probabilističnem težko nardiš, da pač en dan ni nič v decku, ker pač vedno izbere glede določeno število pač glede na uteži
def generate_weights(user_clltn):
2022-04-29 18:09:54 +02:00
"""generiramo uteži za due in new cards posebej; vrne tuple dveh listov za weightse..."""
weights_due = []
weights_new = []
for card in user_clltn:
2022-04-29 18:09:54 +02:00
_, _, due, _, _, _ = card
if due > 0:
weights_due.append(due)
weights_new.append(0)
else:
weights_due.append(0)
weights_new.append(1)
return weights_new, weights_due
2022-04-28 18:37:36 +02:00
def generate_deck_prob(user_clltn, max_new, max_due):
deck, dck_due, dck_new, due_cards = [], [], [], 0
w_new, w_due = generate_weights(user_clltn)
#treba je sestet non zero weights
new_cards = sum(w_new)
for w in w_due:
if w > 0:
due_cards += 1
#preverimo, če imamo dovolj kartic
if new_cards<max_new:
max_new = new_cards
if due_cards<max_due:
max_due = due_cards
2022-05-01 16:56:28 +02:00
print("weigts new: ", w_new, "due: ", w_due)
if due_cards:
dck_due = choices(user_clltn, weights=w_due, k=max_due) #ni garancije, da ni ponovitev
if new_cards:
dck_new = choices(user_clltn, weights=w_new, k=max_new)
deck = dck_due + dck_new
2022-04-29 18:09:54 +02:00
2022-04-29 16:57:24 +02:00
return deck
2022-04-28 18:37:36 +02:00
2022-05-01 16:56:28 +02:00
def prob_eval_card(card):
2022-04-29 16:57:24 +02:00
id, title, due, interval, owned_by, shared = card #due je tukaj interest rate
2022-04-28 18:37:36 +02:00
print("intrest rate je: ", due)
2022-04-29 16:57:24 +02:00
gumb = input("A te " + title + " zanima?") # predpostalvjmao y = yes, m = maybe, n = no
if gumb == "y":
due = 1
elif gumb == "m":
2022-04-29 16:57:24 +02:00
due = abs(due / 1.3)
#abs je zato, ker "new" kodirano ko -1
# /1.3 in /2 sta na pamet izbrani funkciji
elif gumb=="n":
due = abs(due / 2)
2022-04-29 16:57:24 +02:00
card_mod = id, title, due, interval, owned_by, shared
return card_mod
2022-04-28 18:37:36 +02:00
2022-05-01 16:56:28 +02:00
def prob_eval_deck(deck, user_clltn):
2022-04-29 16:57:24 +02:00
for c in deck:
print("deck: ", deck)
2022-05-01 16:56:28 +02:00
id, _, _, _, _, _ = c
# tu dobimo karico, kjer se je nekaj spremenilo
card_mod = prob_eval_card(c)
# tu jo poiščemo v clltn in updejatmo
for index, card in enumerate(user_clltn):
if card[0] == id:
user_clltn[index] = card_mod
break
return user_clltn #TODO ta collection ima samo eno karto updejtano, ne pa celega decka
2022-04-29 16:57:24 +02:00
# engine
2022-05-01 16:56:28 +02:00
def run(user_clltn, n_of_days, max_new, max_due):
for day in range(n_of_days):
deck = generate_deck_prob(user_clltn, max_new, max_due) #to more bit global, da se ne generira skoz nov
user_clltn = prob_eval_deck(deck, user_clltn)
print("konec dneva: ", user_clltn)
2022-05-01 16:56:28 +02:00
# config
n_of_days = 10
max_due = 15
max_new = 5
max_deck_size = max_new + max_due
2022-04-29 16:57:24 +02:00
2022-05-01 16:56:28 +02:00
user_clltn = generate_clltn(20)
2022-04-29 16:57:24 +02:00
run(user_clltn, n_of_days, max_new, max_due)