There are several situations where the score is not really
a count of anything, (and more are to come in the future).
typedef int bool_t;
typedef struct _item {
typedef int bool_t;
typedef struct _item {
char *challenge;
char *response;
} item_t;
typedef struct _bin {
char *challenge;
char *response;
} item_t;
typedef struct _bin {
int items_size;
int num_items;
item_t **items;
int items_size;
int num_items;
item_t **items;
static void
item_init (item_t *item,
static void
item_init (item_t *item,
const char *challenge,
const char *response)
{
const char *challenge,
const char *response)
{
item->challenge = xmalloc (strlen (challenge) + 1 +
strlen (response) + 1);
item->challenge = xmalloc (strlen (challenge) + 1 +
strlen (response) + 1);
static item_t *
category_add_item (category_t *category,
static item_t *
category_add_item (category_t *category,
const char *challenge,
const char *response)
{
const char *challenge,
const char *response)
{
item = &category->items[category->num_items++];
item = &category->items[category->num_items++];
- item_init (item, count, challenge, response);
+ item_init (item, score, challenge, response);
if (i != 0)
fprintf (file, "\n");
fprintf (file, "%d\n%s\n%s\n",
if (i != 0)
fprintf (file, "\n");
fprintf (file, "%d\n%s\n%s\n",
item->challenge,
item->response);
}
item->challenge,
item->response);
}
static void
bin_init (bin_t *bin,
static void
bin_init (bin_t *bin,
bin->items_size = 0;
bin->num_items = 0;
bin->items_size = 0;
bin->num_items = 0;
bin_add_item (bin_t *bin,
item_t *item)
{
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);
if (bin->num_items == bin->items_size)
bin_grow (bin);
static bin_t *
mnemon_get_bin (mnemon_t *mnemon,
static bin_t *
mnemon_get_bin (mnemon_t *mnemon,
{
int i;
bin_t *bin;
for (i = 0; i < mnemon->num_bins; i++)
{
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)
- else if (mnemon->bins[i].count > count)
+ else if (mnemon->bins[i].score > score)
break;
if (mnemon->num_bins == mnemon->bins_size)
break;
if (mnemon->num_bins == mnemon->bins_size)
memmove (bin + 1, bin, (mnemon->num_bins - i) * sizeof (bin_t));
mnemon->num_bins++;
memmove (bin + 1, bin, (mnemon->num_bins - i) * sizeof (bin_t));
mnemon->num_bins++;
category = mnemon_get_category (mnemon, name);
while (1) {
category = mnemon_get_category (mnemon, name);
while (1) {
char *challenge, *response;
/* Read bin number (ignoring blank separator lines) */
char *challenge, *response;
/* Read bin number (ignoring blank separator lines) */
chomp (line);
} while (*line == '\0');
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);
if (*end != '\0') {
fprintf (stderr, "Failed to parse bin number from \"%s\" at %s:%d\n",
line, path, line_count);
chomp (line);
response = line;
chomp (line);
response = line;
- category_add_item (category, count, challenge, response);
+ category_add_item (category, score, challenge, response);
* bin. */
for (i = 0; i < category->num_items; i++) {
item_t *item = &category->items[i];
* 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);
}
bin_add_item (bin, item);
}
- /* 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];
unlearned = 0;
for (i = 0; i < mnemon->num_bins; i++) {
bin = &mnemon->bins[i];
break;
unlearned += bin->num_items;
}
break;
unlearned += bin->num_items;
}
do {
mnemon_select_item (mnemon, &bin, &item_index);
do {
mnemon_select_item (mnemon, &bin, &item_index);
to_introduce--;
item = bin->items[item_index];
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
/* 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 ||
if (bin->num_items == 0 ||
- (bin->count == 0 && to_introduce == 0))
+ (bin->score == 0 && to_introduce == 0))
{
mnemon_remove_bin (mnemon, bin);
}
if (correct) {
{
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
- if (item->count == 0) {
- item->count = 1;
+ if (item->score == 0) {
+ item->score = 1;
unlearned--;
printf ("You got it!");
unlearned--;
printf ("You got it!");
- } else if (item->count < 0) {
+ } else if (item->score < 0) {
printf ("Yes---just give me %d more.",
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 ("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);
}
} else {
printf (" %s is the correct answer.",
item->response);
- item->count--;
- /* Penalize an incorrect response by forcing the count
+ item->score--;
+ /* Penalize an incorrect response by forcing the score
- if (item->count >= 0) {
- item->count = -1;
+ if (item->score >= 0) {
+ item->score = -1;
printf ( " Oops, you knew that, right?\n ");
}
}
printf ( " Oops, you knew that, right?\n ");
}
}
printf ("Great job!");
printf (")\n\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);
bin_add_item (bin, item);
} while (unlearned || to_introduce);