Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > cd38b09e3cb8d6c675b02d30393e68af > files > 46

kaya-doc-0.5.2-8.fc14.noarch.rpm

cgi sudokumatic; // -*-C-*-ish

import sudoku;
import CGI;

Void PreContent() {
    content("<html><head><title>Sudokumatic</title></head>");
    content("<body><h1>Sudokumatic</h1>");
}

Void Default() {
    x = blank([1..9]);
    
    setValue(x,1,0,6);
    setValue(x,3,0,1);
    setValue(x,5,0,4);
    setValue(x,7,0,5);

    setValue(x,2,1,8);
    setValue(x,3,1,3);
    setValue(x,5,1,5);
    setValue(x,6,1,6);

    setValue(x,0,2,2);
    setValue(x,8,2,1);

    setValue(x,0,3,8);
    setValue(x,3,3,4);
    setValue(x,5,3,7);
    setValue(x,8,3,6);

    setValue(x,2,4,6);
    setValue(x,6,4,3);

    setValue(x,0,5,7);
    setValue(x,3,5,9);
    setValue(x,5,5,1);
    setValue(x,8,5,4);

    setValue(x,0,6,5);
    setValue(x,8,6,2);

    setValue(x,2,7,7);
    setValue(x,3,7,2);
    setValue(x,5,7,6);
    setValue(x,6,7,9);

    setValue(x,1,8,4);
    setValue(x,3,8,5);
    setValue(x,5,8,8);
    setValue(x,7,8,7);

    showGrid(x);
}

Void PostContent()
{
    content("</body>");
}

Void showGrid(Sudoku<Int> s)
{
    content(formHandler(OnRefine,s));
    content("<table>");
    for row in [0..8] {
	content("<tr>");
	for col in [0..8] {
	    content("<td>");
	    case getValue(s,col,row) of {
		nothing -> text = "";
		| just(val) -> text = String(val);
	    }
	    content(textBox(("x"+col)+row,text,3)+"</td>");
	}
	content("</tr>");
	
    }
    content("</table>");
    content(submit("One step refinement"));
    content(submit("Complete refinement"));

    content(closeForm);
}

Void OnRefine(Sudoku<Int> s)
{
    // Add the values in the form
    try {
	for row in [0..8] {
	    for col in [0..8] {
		varn = ("x"+row)+col;
		if (!equalStr(incomingValue(varn,DataPost),"")) {
		    val = httpInt(varn);
		    setValue(s,row,col,val);
		}
	    }
	}	

	onestep = submitUsed=="One step refinement";
	do {
	    mod = addSimple(s);
	    p = mkPossibles(s);
	    mod2 = refinePossibles(s,p);
	    if (onestep) break;
	} while(mod || mod2);

//	content("<p>After "+n+" refinements:</p>");

	showGrid(s);
    }
    catch(e) {
	CGI::flushAll();
	content("<p>Invalid entry: "+exceptionMessage(e)+"</p>");
    }

}