From: Carl Worth Date: Sat, 28 Mar 2009 18:00:43 +0000 (-0700) Subject: Merge branch 'master' into image X-Git-Url: https://git.cworth.org/git?p=mnemon;a=commitdiff_plain;h=f8f80304015cb290a550fdb7624a2531d8a10b06;hp=f9d10dd0b3a4f0abf144fb0c1fbe758ad73faa90 Merge branch 'master' into image --- diff --git a/mnemon.c b/mnemon.c index d0a9609..74eb2c0 100644 --- a/mnemon.c +++ b/mnemon.c @@ -597,7 +597,7 @@ mnemon_load_category (mnemon_t *mnemon, /* An initial digit means we hit an item. Trigger the * spaghetti machine. */ - if (*line >= '0' && *line <= '9') + if ((*line >= '0' && *line <= '9') || *line == '-') goto PARSE_BIN; equal = strchr (line, '='); @@ -894,9 +894,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]; @@ -1206,9 +1217,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:");