cgi sudokumatic; // -*-C-*-ish
import sudoku;
import CGI;
Void PreContent() {
content("
Sudokumatic");
content("Sudokumatic
");
}
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("");
}
Void showGrid(Sudoku s)
{
content(formHandler(OnRefine,s));
content("");
for row in [0..8] {
content("");
for col in [0..8] {
content("| ");
case getValue(s,col,row) of {
nothing -> text = "";
| just(val) -> text = String(val);
}
content(textBox(("x"+col)+row,text,3)+" | ");
}
content("
");
}
content("
");
content(submit("One step refinement"));
content(submit("Complete refinement"));
content(closeForm);
}
Void OnRefine(Sudoku 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("After "+n+" refinements:
");
showGrid(s);
}
catch(e) {
CGI::flushAll();
content("Invalid entry: "+exceptionMessage(e)+"
");
}
}