X-Git-Url: https://git.cworth.org/git?p=mnemon;a=blobdiff_plain;f=mnemon.c;fp=mnemon.c;h=ac7c7652d5fd07c6c0dc8c32669eeede5a52947f;hp=5ce736433eed2cff4c931dde86a39c490f8f15f0;hb=cb853e60989f34c4608ac3c521bf90a01d0387d9;hpb=bc28e389a7758c1450a90bf5290ba216d5ea1abe diff --git a/mnemon.c b/mnemon.c index 5ce7364..ac7c765 100644 --- a/mnemon.c +++ b/mnemon.c @@ -865,9 +865,20 @@ mnemon_select_item (mnemon_t *mnemon, category_t *category; bin_index = rand_within_exponential (mnemon->num_bins); - bin = &mnemon->bins[bin_index]; + /* The most intuitive understanding of the to_introduce counter is + * that it's tracking never-before-learned items as they are + * pulled from the bin with score 0. But that bin can become + * empty. So the refined rule is that we decrement to_introduce + * whenever we pull from the lowest-indexed bin with a + * non-negative score. */ + if (mnemon->to_introduce && bin->score >=0 && + (bin_index == 0 || mnemon->bins[bin_index-1].score < 0)) + { + mnemon->to_introduce--; + } + item_index = rand_within (bin->num_items); item = bin->items[item_index]; @@ -1148,9 +1159,6 @@ mnemon_do_challenges (mnemon_t *mnemon) mnemon_select_item (mnemon, &bin, &item_index, &category); item = bin->items[item_index]; - if (bin->score == 0) - mnemon->to_introduce--; - while (1) { if (category->time_limit > 0.0) { response = readline ("The next one is timed. Press enter when ready:");