From a87400a51acefbecf78767d90387335973d0448d Mon Sep 17 00:00:00 2001
From: Saikat Nayek <88332980+Saikat2407@users.noreply.github.com>
Date: Tue, 4 Oct 2022 20:30:26 +0530
Subject: [PATCH 1/2] Pushed problem from Leetcode

Suduku solver
---
 Algorithms/Medium/SudokuSolver.java | 81 +++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
 create mode 100644 Algorithms/Medium/SudokuSolver.java

diff --git a/Algorithms/Medium/SudokuSolver.java b/Algorithms/Medium/SudokuSolver.java
new file mode 100644
index 0000000..bb4580f
--- /dev/null
+++ b/Algorithms/Medium/SudokuSolver.java
@@ -0,0 +1,81 @@
+// https://leetcode.com/problems/sudoku-solver/
+// Agniva
+public class SudokuSolver {
+    public static void main(String[] args) {
+        int[][] board = new int[][]{
+                {3, 0, 6, 5, 0, 8, 4, 0, 0},
+                {5, 2, 0, 0, 0, 0, 0, 0, 0},
+                {0, 8, 7, 0, 0, 0, 0, 3, 1},
+                {0, 0, 3, 0, 1, 0, 0, 8, 0},
+                {9, 0, 0, 8, 6, 3, 0, 0, 5},
+                {0, 5, 0, 0, 9, 0, 6, 0, 0},
+                {1, 3, 0, 0, 0, 0, 2, 5, 0},
+                {0, 0, 0, 0, 0, 0, 0, 7, 4},
+                {0, 0, 5, 2, 0, 6, 3, 0, 0}
+        };
+
+        solve(board, 0,0);
+    }
+
+    public static void solve(int[][] board, int row, int col){
+        if(row == board.length){
+            display(board);
+            return;
+        }
+        int nRow = 0;
+        int nCol = 0;
+        if(col == board[0].length-1){
+            nRow = row + 1;
+            nCol = 0;
+        }else{
+            nRow = row;
+            nCol = col + 1;
+        }
+
+        if(board[row][col] != 0){
+            solve(board, nRow, nCol);
+        }else {
+            for (int po = 1; po <= 9; po++) {
+                if(isValid(board, row, col, po)){
+                    board[row][col] = po;
+                    solve(board, nRow, nCol);
+                    board[row][col] = 0;
+                }
+            }
+        }
+
+    }
+
+    public static boolean isValid(int[][] board, int row, int col, int num){
+        for (int i = 0; i < board[0].length; i++) {
+            if(board[row][i] == num){
+                return false;
+            }
+        }
+        for (int i = 0; i < board.length; i++) {
+            if(board[i][col] == num){
+                return false;
+            }
+        }
+        int rowStart = row/3 * 3;
+        int colStart = col/3 * 3;
+
+        for (int i = 0; i < 3; i++) {
+            for (int j = 0; j < 3; j++) {
+                if(board[rowStart+i][colStart+j] == num){
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    public static void display(int[][] board){
+        for (int i = 0; i < board.length; i++) {
+            for (int j = 0; j < board[0].length; j++) {
+                System.out.print(board[i][j] + " ");
+            }
+            System.out.println();
+        }
+    }
+}

From d52afbed5980e1005052c34700629f1c1d7d318d Mon Sep 17 00:00:00 2001
From: Saikat Nayek <88332980+Saikat2407@users.noreply.github.com>
Date: Tue, 4 Oct 2022 20:53:08 +0530
Subject: [PATCH 2/2] Pushed Find Kth Bit problem

---
 Algorithms/Medium/FindKthBit.java | 35 +++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 Algorithms/Medium/FindKthBit.java

diff --git a/Algorithms/Medium/FindKthBit.java b/Algorithms/Medium/FindKthBit.java
new file mode 100644
index 0000000..d5064dd
--- /dev/null
+++ b/Algorithms/Medium/FindKthBit.java
@@ -0,0 +1,35 @@
+// https://leetcode.com/problems/find-kth-bit-in-nth-binary-string/
+public class KthBit {
+    public static void main(String[] args) {
+        System.out.println(findKthBit(4, 11));
+    }
+    public static char findKthBit(int n, int k) {
+        if(k==1){
+            return '0';
+        }
+
+        return findNthString("0", n).charAt(k-1);
+    }
+    public static String findNthString(String s, int n){
+        if(n==0){
+            return s;
+        }
+        s = s + "1" + reverseInverse(s);
+
+        return findNthString(s, n-1);
+    }
+
+    public static String reverseInverse(String s){
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < s.length(); i++) {
+            if (s.charAt(i) == '0') {
+                sb.append('1');
+            }
+            else{
+                sb.append('0');
+            }
+        }
+
+        return sb.reverse().toString();
+    }
+}
\ No newline at end of file