127 lines
3.2 KiB
Python
127 lines
3.2 KiB
Python
from random import randint, choices
|
|
# item
|
|
#collection
|
|
clltn = []
|
|
|
|
# card = title, due, interval
|
|
def generate_card (clltn=[], user="bob", shared=False):
|
|
id = len(clltn) + 1
|
|
title = "".join([chr(randint(ord('a'), ord('z'))) for i in range(5)])
|
|
due = -1 #means new
|
|
interval = 0
|
|
owned_by = user
|
|
card = id, title, due, interval, owned_by, shared
|
|
return card
|
|
|
|
def generate_clltn (n_of_cards):
|
|
clltn = [] #mogoče bi blo dobro met dictionary, sam žeštejemo len zgoraj...
|
|
for n in range(n_of_cards):
|
|
clltn.append(generate_card(clltn=clltn))
|
|
return clltn
|
|
|
|
# USER
|
|
## config
|
|
max_due = 2
|
|
max_new = 1
|
|
max_deck_size = max_new + max_due
|
|
# setup
|
|
user_clltn = generate_clltn(100)
|
|
|
|
# generate deck
|
|
##1 SR - super-memo style
|
|
|
|
def get_new(user_clltn, n_of_cards):
|
|
for card in user_clltn:
|
|
pass
|
|
|
|
|
|
def get_due(user_clltn, n_of_cards):
|
|
pass
|
|
|
|
|
|
def generate_deck_sr(user_clltn, max_new, max_deck_size):
|
|
pass
|
|
|
|
|
|
def run_sr():
|
|
pass
|
|
|
|
#2 Probabilistic
|
|
## 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, max_deck_size):
|
|
"""generiramo uteži za due in new cards posebej; vrne tuple dveh listov za weightse..."""
|
|
|
|
weights_due = []
|
|
weights_new = []
|
|
for card in user_clltn:
|
|
#problem je edgecase, ko ni populacije kar propade...
|
|
if len(user_clltn)<max_deck_size:
|
|
max_deck_size = len(user_clltn) # lame fast hack...
|
|
|
|
_, _, 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
|
|
|
|
#TODO
|
|
def generate_deck_prob(user_clltn, max_deck_size, max_new):
|
|
deck = []
|
|
for c in range(max_deck_size):
|
|
deck.append(user_clltn[c]) # tu vzame prvic ampak moralo bi random c brez ponavljanja obteženih z "due". rabimo tudi naključnih/najnovejših? max_new novih cardov.
|
|
|
|
"""
|
|
if sum(weights_due)>0:
|
|
#due
|
|
dck = choices(user_clltn, cum_weights=weights_new, k=max_due)
|
|
dck_new = choices(user_clltn, k=max)
|
|
#new
|
|
#??
|
|
else:
|
|
dck = choices(user_clltn, k=max_new)
|
|
"""
|
|
return deck
|
|
|
|
|
|
def prob_eval(card):
|
|
id, title, due, interval, owned_by, shared = card #due je tukaj interest rate
|
|
|
|
print("intrest rate je: ", due)
|
|
gumb = input("A te " + title + " zanima?") # predpostalvjmao y = yes, m = maybe, n = no
|
|
if gumb == "y":
|
|
due = 0.99
|
|
elif gumb == "m":
|
|
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)
|
|
|
|
card_mod = id, title, due, interval, owned_by, shared
|
|
return card_mod
|
|
|
|
#TODO
|
|
def run_prob(deck, user_clltn):
|
|
#tu more dejansko spremenit collection...
|
|
deck_mod = []
|
|
for c in deck:
|
|
c = prob_eval(c)
|
|
deck_mod.append(c)
|
|
return deck_mod
|
|
|
|
# engine
|
|
|
|
|
|
# random python stuff
|
|
## kako najt tuple v listu in ga spremeniti?
|
|
## kako vzet weight iz tuple in ga assignat pri izbiranju?
|
|
|
|
|
|
|
|
print(generate_weights(user_clltn, max_deck_size)) |