2022-04-29 18:09:54 +02:00
from random import randint , choices
2022-04-29 02:24:31 +02:00
# item
2022-04-28 18:37:36 +02:00
#collection
clltn = [ ]
2022-04-29 16:57:24 +02:00
# card = title, due, interval
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-04-29 16:57:24 +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
# USER
2022-04-29 16:57:24 +02:00
## config
2022-04-29 18:09:54 +02:00
max_due = 2
2022-04-29 16:57:24 +02:00
max_new = 1
2022-04-29 18:09:54 +02:00
max_deck_size = max_new + max_due
2022-04-29 16:57:24 +02:00
# setup
2022-04-28 18:37:36 +02:00
user_clltn = generate_clltn ( 100 )
2022-04-29 02:24:31 +02:00
# generate deck
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 , 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
2022-04-28 18:37:36 +02:00
2022-04-29 16:57:24 +02:00
#TODO
2022-04-29 18:09:54 +02:00
def generate_deck_prob ( user_clltn , max_deck_size , max_new ) :
2022-04-29 16:57:24 +02:00
deck = [ ]
2022-04-29 18:09:54 +02:00
for c in range ( max_deck_size ) :
2022-04-29 16:57:24 +02:00
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.
2022-04-29 18:09:54 +02:00
"""
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 )
"""
2022-04-29 16:57:24 +02:00
return deck
2022-04-28 18:37:36 +02:00
2022-04-29 02:24:31 +02:00
def prob_eval ( 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
2022-04-29 02:24:31 +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
2022-04-29 02:24:31 +02:00
if gumb == " y " :
due = 0.99
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 " :
2022-04-29 02:24:31 +02:00
due = abs ( due / 2 )
2022-04-29 16:57:24 +02:00
card_mod = id , title , due , interval , owned_by , shared
2022-04-29 02:24:31 +02:00
return card_mod
2022-04-28 18:37:36 +02:00
2022-04-29 16:57:24 +02:00
#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
2022-04-29 02:24:31 +02:00
# engine
2022-04-29 16:57:24 +02:00
# random python stuff
## kako najt tuple v listu in ga spremeniti?
2022-04-29 18:09:54 +02:00
## kako vzet weight iz tuple in ga assignat pri izbiranju?
print ( generate_weights ( user_clltn , max_deck_size ) )