typedef int bool_t;
typedef struct _item {
- int count;
+ int score;
char *challenge;
char *response;
} item_t;
typedef struct _bin {
- int count;
+ int score;
int items_size;
int num_items;
item_t **items;
static void
item_init (item_t *item,
- int count,
+ int score,
const char *challenge,
const char *response)
{
- item->count = count;
+ item->score = score;
item->challenge = xmalloc (strlen (challenge) + 1 +
strlen (response) + 1);
static item_t *
category_add_item (category_t *category,
- int count,
+ int score,
const char *challenge,
const char *response)
{
item = &category->items[category->num_items++];
- item_init (item, count, challenge, response);
+ item_init (item, score, challenge, response);
return item;
}
if (i != 0)
fprintf (file, "\n");
fprintf (file, "%d\n%s\n%s\n",
- item->count,
+ item->score,
item->challenge,
item->response);
}
static void
bin_init (bin_t *bin,
- int count)
+ int score)
{
- bin->count = count;
+ bin->score = score;
bin->items_size = 0;
bin->num_items = 0;
bin_add_item (bin_t *bin,
item_t *item)
{
- assert (item->count == bin->count);
+ assert (item->score == bin->score);
if (bin->num_items == bin->items_size)
bin_grow (bin);
static bin_t *
mnemon_get_bin (mnemon_t *mnemon,
- int count)
+ int score)
{
int i;
bin_t *bin;
for (i = 0; i < mnemon->num_bins; i++)
- if (mnemon->bins[i].count == count)
+ if (mnemon->bins[i].score == score)
return &mnemon->bins[i];
- else if (mnemon->bins[i].count > count)
+ else if (mnemon->bins[i].score > score)
break;
if (mnemon->num_bins == mnemon->bins_size)
memmove (bin + 1, bin, (mnemon->num_bins - i) * sizeof (bin_t));
mnemon->num_bins++;
- bin_init (bin, count);
+ bin_init (bin, score);
return bin;
}
category = mnemon_get_category (mnemon, name);
while (1) {
- int count;
+ int score;
char *challenge, *response;
/* Read bin number (ignoring blank separator lines) */
chomp (line);
} while (*line == '\0');
- count = strtol (line, &end, 10);
+ score = strtol (line, &end, 10);
if (*end != '\0') {
fprintf (stderr, "Failed to parse bin number from \"%s\" at %s:%d\n",
line, path, line_count);
chomp (line);
response = line;
- category_add_item (category, count, challenge, response);
+ category_add_item (category, score, challenge, response);
free (challenge);
}
* bin. */
for (i = 0; i < category->num_items; i++) {
item_t *item = &category->items[i];
- bin_t *bin = mnemon_get_bin (mnemon, item->count);
+ bin_t *bin = mnemon_get_bin (mnemon, item->score);
bin_add_item (bin, item);
}
int unlearned;
int i;
- /* Count the number of items with negative counts. */
+ /* Count the number of items with negative scores. */
unlearned = 0;
for (i = 0; i < mnemon->num_bins; i++) {
bin = &mnemon->bins[i];
- if (bin->count >= 0)
+ if (bin->score >= 0)
break;
unlearned += bin->num_items;
}
do {
mnemon_select_item (mnemon, &bin, &item_index);
- if (bin->count == 0)
+ if (bin->score == 0)
to_introduce--;
item = bin->items[item_index];
/* If the bin is now empty, we must remove it. Also if we just
* picked the last word we'll ever pick from the bin with
- * count 0, then we can remove that as well. */
+ * score 0, then we can remove that as well. */
if (bin->num_items == 0 ||
- (bin->count == 0 && to_introduce == 0))
+ (bin->score == 0 && to_introduce == 0))
{
mnemon_remove_bin (mnemon, bin);
}
if (correct) {
- item->count++;
- /* We reserve an item count of 0 for an item that has
+ item->score++;
+ /* We reserve an item score of 0 for an item that has
* never been asked. */
- if (item->count == 0) {
- item->count = 1;
+ if (item->score == 0) {
+ item->score = 1;
unlearned--;
printf ("You got it!");
- } else if (item->count < 0) {
+ } else if (item->score < 0) {
printf ("Yes---just give me %d more.",
- - item->count);
- } else if (item->count == 1) {
+ - item->score);
+ } else if (item->score == 1) {
printf ("On your first try, no less!");
} else {
- printf ("Masterful (%dx).", item->count);
+ printf ("Masterful (%dx).", item->score);
}
} else {
printf (" %s is the correct answer.",
item->response);
- if (item->count >= 0)
+ if (item->score >= 0)
unlearned++;
- item->count--;
- /* Penalize an incorrect response by forcing the count
+ item->score--;
+ /* Penalize an incorrect response by forcing the score
* negative. */
- if (item->count >= 0) {
- item->count = -1;
+ if (item->score >= 0) {
+ item->score = -1;
printf ( " Oops, you knew that, right?\n ");
}
}
printf ("Great job!");
printf (")\n\n");
- bin = mnemon_get_bin (mnemon, item->count);
+ bin = mnemon_get_bin (mnemon, item->score);
bin_add_item (bin, item);
} while (unlearned || to_introduce);