From 2a5050a21b5441e4e490519e97bb2a0d34ef728b Mon Sep 17 00:00:00 2001 From: john Date: Sun, 24 Aug 2025 19:34:21 +0300 Subject: [PATCH 1/4] Adding Sudoku Solver Dana Program --- dana/programs/sudoku.dana | 113 ++++++++++++++++++++++++++++++++++++ dana/programs/sudoku.input | 9 +++ dana/programs/sudoku.result | 9 +++ 3 files changed, 131 insertions(+) create mode 100644 dana/programs/sudoku.dana create mode 100644 dana/programs/sudoku.input create mode 100644 dana/programs/sudoku.result diff --git a/dana/programs/sudoku.dana b/dana/programs/sudoku.dana new file mode 100644 index 0000000..963933b --- /dev/null +++ b/dana/programs/sudoku.dana @@ -0,0 +1,113 @@ +def main + + var board is int[9][9] + + def printBoard: b as int[][9] + var i j is int + i := 0 + loop: + if i < 9: + j := 0 + loop: + if j < 9: + writeInteger: b[i][j] + if j < 8: writeString: " " + j := j + 1 + else: break + writeString: "\n" + i := i + 1 + else: break + + def isSafe is byte: b as int[][9], row col num as int + var i j boxStartRow boxStartCol is int + + # Row check + j := 0 + loop: + if j < 9: + if b[row][j] = num: return: false + j := j + 1 + else: break + + # Column check + i := 0 + loop: + if i < 9: + if b[i][col] = num: return: false + i := i + 1 + else: break + + # 3x3 box check + boxStartRow := (row / 3) * 3 + boxStartCol := (col / 3) * 3 + i := 0 + loop: + if i < 3: + j := 0 + loop: + if j < 3: + if b[boxStartRow + i][boxStartCol + j] = num: return: false + j := j + 1 + else: break + i := i + 1 + else: break + + return: true + + def findEmpty is byte: b as int[][9], rowRef colRef as ref int + var i j is int + i := 0 + loop: + if i < 9: + j := 0 + loop: + if j < 9: + if b[i][j] = 0: + rowRef := i + colRef := j + return: true + j := j + 1 + else: break + i := i + 1 + else: break + return: false + + def solve is byte: b as int[][9] + var row col num is int + var hasEmpty is byte + + hasEmpty := findEmpty(b, row, col) + if hasEmpty = false: + return: true + + num := 1 + loop: + if num <= 9: + if isSafe(b, row, col, num): + b[row][col] := num + if solve(b): + return: true + b[row][col] := 0 # backtrack + num := num + 1 + else: break + + return: false + + # Read 9x9 grid (0 = empty) + var i j is int + i := 0 + loop: + if i < 9: + j := 0 + loop: + if j < 9: + board[i][j] := readInteger() + j := j + 1 + else: break + i := i + 1 + else: break + + if solve(board): + printBoard: board + else: + writeString: "No solution\n" \ No newline at end of file diff --git a/dana/programs/sudoku.input b/dana/programs/sudoku.input new file mode 100644 index 0000000..76acaed --- /dev/null +++ b/dana/programs/sudoku.input @@ -0,0 +1,9 @@ +5 3 0 0 7 0 0 0 0 +6 0 0 1 9 5 0 0 0 +0 9 8 0 0 0 0 6 0 +8 0 0 0 6 0 0 0 3 +4 0 0 8 0 3 0 0 1 +7 0 0 0 2 0 0 0 6 +0 6 0 0 0 0 2 8 0 +0 0 0 4 1 9 0 0 5 +0 0 0 0 8 0 0 7 9 \ No newline at end of file diff --git a/dana/programs/sudoku.result b/dana/programs/sudoku.result new file mode 100644 index 0000000..f10ad45 --- /dev/null +++ b/dana/programs/sudoku.result @@ -0,0 +1,9 @@ +5 3 4 6 7 8 9 1 2 +6 7 2 1 9 5 3 4 8 +1 9 8 3 4 2 5 6 7 +8 5 9 7 6 1 4 2 3 +4 2 6 8 5 3 7 9 1 +7 1 3 9 2 4 8 5 6 +9 6 1 5 3 7 2 8 4 +2 8 7 4 1 9 6 3 5 +3 4 5 2 8 6 1 7 9 \ No newline at end of file From b7340023036c44fe022e997dd8e752de4899180a Mon Sep 17 00:00:00 2001 From: Kostis Sagonas Date: Sun, 24 Aug 2025 22:48:39 +0200 Subject: [PATCH 2/4] Update sudoku.input --- dana/programs/sudoku.input | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dana/programs/sudoku.input b/dana/programs/sudoku.input index 76acaed..d888b9d 100644 --- a/dana/programs/sudoku.input +++ b/dana/programs/sudoku.input @@ -6,4 +6,4 @@ 7 0 0 0 2 0 0 0 6 0 6 0 0 0 0 2 8 0 0 0 0 4 1 9 0 0 5 -0 0 0 0 8 0 0 7 9 \ No newline at end of file +0 0 0 0 8 0 0 7 9 From 43c565200fedf267e3b1a4f51c92324b2bc5d37c Mon Sep 17 00:00:00 2001 From: Kostis Sagonas Date: Sun, 24 Aug 2025 22:48:59 +0200 Subject: [PATCH 3/4] Update sudoku.result --- dana/programs/sudoku.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dana/programs/sudoku.result b/dana/programs/sudoku.result index f10ad45..04fca3a 100644 --- a/dana/programs/sudoku.result +++ b/dana/programs/sudoku.result @@ -6,4 +6,4 @@ 7 1 3 9 2 4 8 5 6 9 6 1 5 3 7 2 8 4 2 8 7 4 1 9 6 3 5 -3 4 5 2 8 6 1 7 9 \ No newline at end of file +3 4 5 2 8 6 1 7 9 From 28fc43c0a6c4040316547fe496b33f329e075379 Mon Sep 17 00:00:00 2001 From: Kostis Sagonas Date: Sun, 24 Aug 2025 22:49:27 +0200 Subject: [PATCH 4/4] Update sudoku.dana --- dana/programs/sudoku.dana | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dana/programs/sudoku.dana b/dana/programs/sudoku.dana index 963933b..c94635a 100644 --- a/dana/programs/sudoku.dana +++ b/dana/programs/sudoku.dana @@ -110,4 +110,4 @@ def main if solve(board): printBoard: board else: - writeString: "No solution\n" \ No newline at end of file + writeString: "No solution\n"