Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
108
Task/Sudoku/FutureBasic/sudoku.futurebasic
Normal file
108
Task/Sudoku/FutureBasic/sudoku.futurebasic
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
include "ConsoleWindow"
|
||||
include "NSLog.incl"
|
||||
include "Util_Containers.incl"
|
||||
|
||||
begin globals
|
||||
dim as container gC
|
||||
end globals
|
||||
|
||||
BeginCDeclaration
|
||||
short solve_sudoku(short i);
|
||||
short check_sudoku(short r, short c);
|
||||
CFMutableStringRef print_sudoku();
|
||||
EndC
|
||||
|
||||
BeginCFunction
|
||||
short sudoku[9][9] = {
|
||||
{3,0,0,0,0,1,4,0,9},
|
||||
{7,0,0,0,0,4,2,0,0},
|
||||
{0,5,0,2,0,0,0,1,0},
|
||||
{5,7,0,0,4,3,0,6,0},
|
||||
{0,9,0,0,0,0,0,3,0},
|
||||
{0,6,0,7,9,0,0,8,5},
|
||||
{0,8,0,0,0,5,0,4,0},
|
||||
{0,0,6,4,0,0,0,0,7},
|
||||
{9,0,5,6,0,0,0,0,3},
|
||||
};
|
||||
|
||||
|
||||
short check_sudoku( short r, short c )
|
||||
{
|
||||
short i;
|
||||
short rr, cc;
|
||||
|
||||
for (i = 0; i < 9; i++)
|
||||
{
|
||||
if (i != c && sudoku[r][i] == sudoku[r][c]) return 0;
|
||||
if (i != r && sudoku[i][c] == sudoku[r][c]) return 0;
|
||||
rr = r/3 * 3 + i/3;
|
||||
cc = c/3 * 3 + i%3;
|
||||
if ((rr != r || cc != c) && sudoku[rr][cc] == sudoku[r][c]) return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
short solve_sudoku( short i )
|
||||
{
|
||||
short r, c;
|
||||
|
||||
if (i < 0) return 0;
|
||||
else if (i >= 81) return -1;
|
||||
|
||||
r = i / 9;
|
||||
c = i % 9;
|
||||
|
||||
if (sudoku[r][c])
|
||||
return check_sudoku(r, c) && solve_sudoku(i + 1);
|
||||
else
|
||||
for (sudoku[r][c] = 9; sudoku[r][c] > 0; sudoku[r][c]--)
|
||||
{
|
||||
if ( solve_sudoku(i) ) return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
CFMutableStringRef print_sudoku()
|
||||
{
|
||||
short i, j;
|
||||
CFMutableStringRef mutStr;
|
||||
|
||||
mutStr = CFStringCreateMutable( kCFAllocatorDefault, 0 );
|
||||
|
||||
for (i = 0; i < 9; i++)
|
||||
{
|
||||
for (j = 0; j < 9; j++)
|
||||
{
|
||||
CFStringAppendFormat( mutStr, NULL, (CFStringRef)@" %d", sudoku[i][j] );
|
||||
}
|
||||
CFStringAppendFormat( mutStr, NULL, (CFStringRef)@"\r" );
|
||||
}
|
||||
return( mutStr );
|
||||
}
|
||||
EndC
|
||||
|
||||
toolbox fn solve_sudoku( short i ) = short
|
||||
toolbox fn check_sudoku( short r, short c ) = short
|
||||
toolbox fn print_sudoku() = CFMutableStringRef
|
||||
|
||||
dim as short solution
|
||||
dim as CFMutableStringRef cfRef
|
||||
|
||||
gC = " "
|
||||
cfRef = fn print_sudoku()
|
||||
fn ContainerCreateWithCFString( cfRef, gC )
|
||||
print : print "Sudoku challenge:" : print : print gC
|
||||
|
||||
solution = fn solve_sudoku(0)
|
||||
|
||||
print : print "Sudoku solved:" : print
|
||||
if ( solution )
|
||||
gC = " "
|
||||
cfRef = fn print_sudoku()
|
||||
fn ContainerCreateWithCFString( cfRef, gC )
|
||||
print gC
|
||||
else
|
||||
print "No solution found"
|
||||
end if
|
||||
Loading…
Add table
Add a link
Reference in a new issue