From: Carl Worth Date: Fri, 27 Mar 2009 22:17:18 +0000 (-0700) Subject: Fix bug when there are no new items to introduce X-Git-Url: https://git.cworth.org/git?p=mnemon;a=commitdiff_plain;h=cb853e60989f34c4608ac3c521bf90a01d0387d9 Fix bug when there are no new items to introduce Previously, mnemon would keep challenging infinitely (waiting for 10 new items to be introduced). Instead, we now decrement the to_introduce counter every time an item is selected from the smallest-number bin. --- 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:");