#include "sudoku.h"

//========================================================

FUNC find_all_pairs()
{
int num;

printf("old logic has failed, turned to looking for pairs.\n"); 
getchar();

for (num = 0; num < 9; num++)	// row, col or box
    {
    find_all_pairs_in_rowcolbox(ROW, num);
    find_all_pairs_in_rowcolbox(COL, num);
    find_all_pairs_in_rowcolbox(BOX, num);
    }
}

FUNC int get_2_valcodes_in_rowcolbox(int rowcol, int num, int val, char val_flag, 
		int *p_n1, int *p_n2)
{
char valcode;
int idx, ct;

ct = 0;
for (idx = 0; idx < 9; idx++)
    {
    valcode = get_cell_valcode(rowcol, num, idx, val);
    if (valcode != val_flag) 
        continue;
    ct++;
    if (ct == 1)
        *p_n1 = idx;
    else if (ct == 2)
        *p_n2 = idx;
    else 			// 3 or more maybes
        return 3;
    }
return ct;
}


FUNC find_all_pairs_in_rowcolbox(int rowcol, int num)
{
int ct, val, val1, val2, n1, n2, m1, m2;

for (val1 = 1; val1 <= 9; val1++)
    {
    ct = get_2_valcodes_in_rowcolbox(rowcol, num, val1, VAL_MAYBE, &m1, &m2);
    // printf("in %s %d, val %d appears as MAYBE %d times\n", 
//		(rowcol == ROW)? "row" : (rowcol == COL)? "col" : "box", num, val1, ct);
    if (ct != 2)
        continue;

    for (val2 = val1+1; val2 <= 9; val2++)
        {
        ct = get_2_valcodes_in_rowcolbox(rowcol, num, val2, VAL_MAYBE, &n1, &n2);
        if (ct != 2 || n1 != m1 || n2 != m2)
            continue;
              
        printf("Found 2 maybes in %s %d (idx %d and %d): values %d and %d\n", 
		(rowcol == ROW)? "row" : (rowcol == COL)? "col" : "box", 
		num, n1, n2, val1, val2);

        for (val = 1; val <= 9; val++) 
            if (val != val1 && val != val2)
               {
               set_cell_valcode(rowcol, num, n1, val, VAL_NO);
               set_cell_valcode(rowcol, num, n2, val, VAL_NO);
               }
        }
    }
}   

