Computer Programs to solve Puzzles

  All solvers were written in Fortran 90

They were compiled and tested on a Macbook with the gfortran compiler.

To install gfortran yourself:

Look here or here for Mac OS X installation instructions.

For Linux, simply use your default installer, e.g. yum install gcc-gfortran or apt-get install gfortran-4.6, etc.

For Windows binaries, see this page.

To download all source and data files in a zip file: click here.

If you're new to Fortran: a short Fortran 90 tutorial, a list of Fortran resources, and the Wikipedia page on Fortran

New Free Will sudoku puzzles

I have  prepared 2 books on Will Sudoku puzzles. It is a new and very exciting variant of Sudoku. Feel free to download the books and start solving Will Sudoku puzzles. Please let me know  your thoughts.  Download both the books : Easy book here and tough book here.

I have written a JAVA program (with GUI) to solve different variants of Will-Sudoku. The program to solve the will-Sudoku can be downloaded here : will-Sudoku-solver. It contains a folder and some sample input files. There is also a README file on how to prepare the input file and run the program.

Please share the book links among your friends and colleagues.


NEW : I have updated my sudoku solver software with most of the advanced tricks that can solve most of the sudoku puzzles from pure logic. My sudoku solver software is at par or better than most of the sudoku solver software available in the internet. My software compares very well with the one that is widely used by most sudoku lovers, available online at : sudokuwiki.org. My sudoku solver software can solve the toughest sudoku puzzles that cannot be solved by most of the sudoku solvers available in the internet.

The source code and the data files for the software have been uploaded in my website (the folder is : sudoku-solver-logic). I have added a README file on how to compile and run the program.  

NEW : I have written a Kakuro Solver software that can solve Kakuro puzzles from logic. The source code to the Kakuro solver software can be freely downloaded from my website (the folder is Kakuro_solver_logic). I have included some sample input files and also a README file on how to compile the code and prepare the input files. Please contact me if you find a Kakuro puzzle for which my software cannot find solution.

1) A program to solve Sudoku (9X9). The Fortran 90 source code is : Sudoku_solver.f90 It takes a input file (named as 'initial'). It is supposed to be world's toughest sudoku (http://www.telegraph.co.uk/science/science-news/9359579/Worlds-hardest-sudoku-can-you-crack-it.html). There is a sample initial file in the site. Rename "initial-hardest-sudoku" to "initial".
To compile: gfortran Sudoku_solver.f90

2) A program to solve diagonal sudoku (a variant of sudoku). You can get diagonal sudoku puzzles at: http://www.boldts.net/Sudoku/D0/. The program to solve diagonal sudoku (9X9) is Sudoku_diagonal.f90. It takes an input file ("initial_diagonal"). A sample input file is attached in the website.
To compile diagonal sudoku program : gfortran Sudoku_diagonal.f90


3) A program to solve Irregular Sudoku (9X9). It is a different variant of Sudoku. You can find irregular sudoku puzzles at this website : http://krazydad.com/jigsawsudoku/ . The Fortran 90 source code is : Irregular_sudoku.f90. It takes a input file (named as "initial-irregular-sudoku"). A sample input file is attached in the website.
To compile: gfortran Irregular_sudoku.f90


4) A program to solve Calcudoku (4X4). You can get Calcudoku puzzles at this website : http://www.menneske.no/calcudoku/eng/ and at www.calcudoku.org . It is different than sudoku and killer sudoku in the sense that a digit may appear more than once in a cage. The program can be extended to solve calcudoku of higher grid size 5X5, 6X6 .. 9X9. You have to change the variable max_grid_size in global_variables to appropriate value. For example for 5X5 calcudoku puzzle make max_grid_size=5. Also change in the program where the code writes the results.  The code takes a long time for higher grid sizes. For example, for a cage size of 6, the code has to search for 6^6 numbers instead of 6!(factorial) numbers and so it takes a very long time. The Fortran 90 source code is : Calcudoku.f90. It takes a input file (named as "initial-calcudoku"). A sample input file is attached in the website.
To compile: gfortran Calcudoku.f90


5) A program to find solution to 8 queens in a chess board without crossing each other. It finds all the possible solutions. The program can be generalised to find solutions to N queens in a NXN board. Change the "max_cells" variable in module global_variables to appropriate number. For example, make max_cells = 10, if you want to find solutions to 10 queens in a 10X10 board. The source code is named : Queens_chess.f90.
To compile: gfortran Queens_chess.f90


6) A program to find the solutions to Towers of Hanoi. The maximum number of disks and the maximum snapshots are hard coded in the program. Change the maximum number of disks and the maximum snapshots if you needed. There are 3 towers. Initially all the disks are in the tower 1. The program will transfer all the disks from tower 1 to tower 3.  You can play the Towers of Hanoi online at this site : http://www.mathsisfun.com/games/towerofhanoi.html and at http://hidefideas.com/hanoi.html.
To compile: gfortran Towers_of_Hanoi.f90


7) A program to solve Killer Sudoku (9X9). The information regarding Killer Sudoku can be found in : http://en.wikipedia.org/wiki/Killer_sudoku. The Fortran 90 source code is : Killer_Sudoku.f90. It takes a input file (named as "initial-killer-sudoku"). In the input file you specify the number of cages. Then we specify the cage-sum for each cage and the cells that are in the cage. There is a sample initial file in the site. You can get the killer sudoku puzzles at : http://krazydad.com/killersudoku/
The code runs fairly fast. Sometimes it takes a long time if the cage is big. For example, I am attaching a input file where we have 2 cages of 8 and 9. The initial file is : "initial-killer-sudoku-large-cell". It took 45 hours to run and give the result. It had to search through 8!(factorial) X 9!(factorial) permutations to find the right solution, for cage 8 and 9. So be patient if the code is taking long. It will give the result. To run this you have to change the name from "initial-killer-sudoku-large-cell" to "initial-killer-sudoku".
To compile: gfortran Killer_Sudoku.f90


8) A program to solve Samurai Sudoku (5 simultaneous sudoku puzzles). It is much tougher than sudoku as there are 5 consecutive sudoku puzzles. The fortran 90 source code is : Samurai_sudoku.f90. It takes a input file (named as "initial-samurai-sudoku"). You have to specify the puzzles (5 sudoku puzzles) in the way as is done in the input file. It finds solution to all the 5 sudoku puzzles. You can play samurai sudoku puzzles at these websites : http://www.samurai-sudoku.com/ and http://www.freesamuraisudoku.com/1001HardSamuraiSudokus.aspx .
To compile: gfortran Samurai_sudoku.f90


9) A program to solve the Kakuro Puzzle. You can find information about kakuro puzzle at (http://en.wikipedia.org/wiki/Kakuro). I have solved the kakuro puzzle for both square and rectangular grid. The fortran 90 source code is : Kakuro_square.f90 and Kakuro_rect.f90. You have to change the max_grid_size (for kakuro square grid) and max_grid_size1 and max_grid_size2 (for kakuro rectangular grid) in the module global_variables to accomodate kakuro puzzles of different grid size. You also have to change the write statement in the subroutine solve_puzzle to print out the kakuro puzzle of appropriate grid size. It takes a input file (named as "initial-kakuro") for square grid and ("initial-kakuro-rectangular") for rectangular grid. The code takes a few minutes to run. If there are cages of size 8 or 9 in the kakuro puzzle then it will take long time. I am attaching sample input files for the square and rectangular grid. You can get kakuro puzzles at this website : http://www.menneske.no/kakuro/5x5/eng .
To compile: gfortran Kakuro_square.f90 and gfortran Kakuro_rect.f90


10) A program to solve 8-puzzle problem and 15 puzzle problem (Number Puzzle problem). You can play the 8-puzzle game at : http://mypuzzle.org/sliding.
There are two variants of solving Number puzzles :
 (A) Using Best First Search (BFS)
 (B) Using Depth First Search (DFS)
  I have implemented both the techniques to solve the number puzzle problem. My program can solve number puzzles with both square and rectangular grids. Change the following parameters in the code to make it work for different board grid size : x_square and y_square depending on the board size you want.
 I have also developed a new cost function to solve the Number Puzzle problem. It is called the square cost function. BFS with Manhattan distane cost function is very fast as compared to other methods. I have a folder called Number-Puzzle in the source directory. It has all the codes to do BFS and DFS algorithms for Manhattan distance as well as square cost function.
I have to implement in the future to make the program intelligent enough to see if the puzzle has a solution or not.
The program takes a input file : number-intial in which you define the puzzle. A sample input file is attached.
To compile  : gfortran Number_Puzzle_Manhattan_BFS.f90

11) Knight's Tour Problem in Chess : A Knight's tour is a sequence of moves of Knight on a chessboard such that the knight visits every square only once. More information can be found at : http://en.wikipedia.org/wiki/Knight's_Tour. I have solved the problem for a board of 8X8. It can be easily extended to board of size NXN or MXN. Just change the max_board_size_x and max_board size_y in the global_variable module. The program runs very fast. I have implemented the heuristic to populate the squares that have least neighbors first. This way the code gives results very fast even for bigger board size (e.g. for 50X50 board size it gives result instantly)The source code is : Knights_tour.f90. It takes an input file (initial-knight) that gives the initial position of the knight on the chess board. The source code and a sample file is attached.
To Compile : gfortran Knights_tour.f90

12) A program to solve Hidato(also known as Hidoku) puzzlesThe goal of Hidato is to fill the grid with consecutive numbers that connect horizontally, vertically, or diagonally. The information regarding Hidato puzzles can be found at : https://en.wikipedia.org/wiki/Hidato . Hidato puzzles are also known as Hidoku puzzles. The Fortran 90 source code is : Hidato.f90. It takes a input file (named as initial_hidato). Some sample input files for Hidato is in the directory input-files-hidato. You have to specify the values of x_grid and y_grid in the module global_variables in the file Hidato.f90 for the grid size of the puzzles. e.g. for a grid size of 10X10 we have :
  INTEGER,PARAMETER :: x_grid = 10
                                   INTEGER,PARAMETER :: y_grid = 10
change these 2 parameters for the grid size that you want. you can get Hidato puzzles at : http://www.mathinenglish.com/Hidato.php .
To compile : gfortran Hidato.f90

13) A program to solve Hitori Puzzles. Hitori is played with a grid of cells where each cell contains a number. The goal of Hitori is to eliminated numbers from the cells such that the remaining cells do not contain numbers that appear more than once in either a given row or column. Filled in cells (cells with numbers eliminated) cannot be horizontally or vertically adjacent, although they can be diagonally adjacent. The remaining un-filled cells (cells with numbers present) must form a single component connected horizontally and vertically. More information regarding Hitori puzzles can be found at : https://en.wikipedia.org/wiki/Hitori . The Fortran 90 source code is : Hitori.f90. It takes a input file (named initial-hitori). Some sample input files for Hitori are in the directory input-files-hitori. You have to specify the values of following two variables in the module global_variables in the file Hitori.f90 for the grid size of the puzzles. e.g. for a grid of size 8X8 we have :
  INTEGER,PARAMETER :: max_grid_size1 = 8
  INTEGER,PARAMETER :: max_grid_size2 = 8
change these 2 parameters for the grid size that you want. 
You can get Hitori puzzles at : http://www.menneske.no/hitori/eng/ .
To compile : gfortran Hitori.f90

I have written a program to solve Hitori puzzles from logic. The program is : Hitori_logic.f90.

14)
A program to solve Str8ts puzzles. Str8ts share some properties and rules of sudoku. The name is derived from the poker straight. In a Str8ts puzzle, the board is given a 9X9 grid, partially divided by black cells into compartments. The goal is to fill each horizontal and vertical compartment (unfilled white cells) into straight - a set of consecutive numbers, but in any order. For example : 4,7,5,6 is valid but 2,3,9,8 is not. The white cells are to be filled such that each  row and column contains unique digits. Some black cells have numbers in them. These numbers remove that digit as an option in the row and column. Such digits do not form part of any straight. More information and sample Str8ts puzzles can be found at : str8ts.com
To compile : gfortran str8ts.f90

15) A program to solve Suguru puzzles. The Suguru puzzle contains cages with different number of cells. Fill each cage with unique digits counting up from 1. So for example a 2-square cage contains the numbers 1 and 2; and a 5-square cage contains the numbers from 1 to 5. Adjacent (touching) squares, even ones that touch diagonally, may never contain the same number. You have to specify the value of following three variables in the module global_variables in the file suguru.f90 for the grid size of the puzzle. e.g. for a grid of size 8X8 we have :
                                              INTEGER,PARAMETER :: x_square = 8
                                              INTEGER,PARAMETER :: y_square = 8
For the max number in board (same as the no. of cells in the biggest cage) we have to specify the following parameter :
  INTEGER,PARAMETER :: max_number_in_board = 5
  INTEGER,PARAMETER :: max_cells_in_cage = max_number_in_board
The program takes a input file : "initial-suguru" . I have put some sample suguru puzzles in the directory input-files-suguru. I am attaching a sample input file with directions on how to make the input file. You can get Suguru puzzles at : http://krazydad.com/suguru/
To compile : gfortran suguru.f90 .

                                                            Easier Puzzles

16) Number to Words Problem : Write a program to convert numbers into words, with and without recursion. For example : 45000 into forty five thousand. 
The code to convert numbers into words without recursion is : Number_to_words.f90 and the code to convert numbers into words using recursion is : Number_to_words_recursion.f90. Both the codes will prompt for a number.
To compile : gfortran Number_to_words.f90 (for the code without using recursion) and 
                  gfortran Number_to_words_recursion.f90 (for the code with recursion) and
                  gfortran Number_to_words_recursion-1.f90 (for the code with recursion using a much simpler algorithm)
To run : ./a.out (It will prompt for a number)

17) Travelling Salesman Problem : I have solved the travelling salesman problem. You can find information about travelling salesman problem at : http://en.wikipedia.org/wiki/Travelling_salesman_problem.  It works for small number of cities. It finds the shortest path traversing between all the cities. If the number of cities becomes large, the code will take a long time. There are other methods available to solve travelling salesman problem for large number of cities using heuristics. There are two codes for the travelling salesman problem. One in which we specify the nabors for different cities. The code is Tsp.f90. It takes an input file initial-tsp. A sample input file is attached. The other code is in which each city is connected to each other cities. The code is Tsp_matrix.f90. It takes an input file initial-tsp-matrix. A sample input file is attached.
To compile: gfortran Tsp.f90 and gfortran Tsp_matrix.f90

18) Partition ProblemYou are given a set of positive integers. Your task is to solve partition problem.

Lets define the partition problem.

Partition problem is the task of deciding whether a given multiset of positive integers can be partitioned into two subsets S1 and S2 such that the sum of the elements in S1 equals the sum of the elements in S2.


Input Specification : 

Your input will be integer array of positive integers.

Output :

it can be divided into two subsets of equal sum 


Examples : 

1) array [] = {1,5,11,5}

output :

This array can be divided into two subsets {1,5,5} and {11} these two have equal sum. 


2) array [] = {1,5,3}

Output : 

This array cant be divided into two subsets of equal sum.


The program is Partition_problem_solver.f90. It takes an input file "initial-partition" in which we specify the number of integers and the actual digits.

To compile: gfortran Partition_problem_solver.f90


19) There is a weight of 40 grams. It has to divide into 4 different weights so that we can weigh from 1 to 30 grams with these 4 weights (that has been divided from the 40 grams). The program is Combination.f90.
To compile: gfortran Combination.f90

20) Disks in a Pile problem.

Rahul is playing a very interesting game. He has N disks (each of equal radius).

Every disk has a disntinct numbr out of 1 to N associated with it. Disks are placed one over other in a single pile.

Rahul wants to sort this pile of disk in increasing order from top to bottom. But he has a very very special method of doing this. In a single step he can only choose one disk out of the pile and he can only put it at the top.

Rahul wants to sort his pile of disks in minimum number of possible steps. So help Rahul in doing so. So dont have to show the actual steps. just answer the minumum number of possible steps to sort the pile so that Rahul can check whether he is doing his work right or wrong.


Input Specification :

Your input will be an integer type array of size N containing integers from 1 to N in any random order which shows the position of disk from top to bottom.


Output :

Your output will be an integer type value that returns. Minimum number of steps (as specified above) required to sort disk in a pile



The program is Disks.f90. It takes an input file "initial-disk" in which we specify the number of disks and the initial arrangement of disks.

To compile: gfortran Disks.f90


21) A number's persistence is the number of steps required to reduce it to a single digit by multiplying all its digits to obtain a second number, then multiplying all the digits of that number to obtain a third number, and so on until a one-digit number is obtained. For example, 77 has a persistence of four because it requires four steps to reduce it to one digit: 77-49-36-18-8. The smallest number of persistence one is 10, the smallest of persistence two is 25, the smallest of persistence three is 39, and the smaller of persistence four is 77. What is the smallest number of persistence five?


The program to solve the persistence problem is : Persistence.f90.

To compile: gfortran  Persistence.f90



22) Smallest Greatest Number

Consider a number 2345. If you multiply its digits then you get the number 120. Now if you again multiply digits of 120 then you will get number 0 which is a one digit number. If I add digits of 2345 then I will get 14. If I add digits of 14 then I will get 5 which is a one digit number.

Thus any number can be converted into two one digit numbers in some number of steps. You can see 2345 is converted to 0 by using multiplication of digits in 2 steps and it is converted to 5 by using addition of digits in 2 steps. Now consider any number N. Let us say that it can be converted by multiplying digits to a one digit number d1 in n1 steps and by adding digits to one digit number d2 in n2 steps.

Your task is to find smallest number greater than N and less than 1000000000 which can be converted by multiplying its digits to d1 in less than or equal to n1 steps and by adding its digits to d2 in less than or equal to n2 steps.


Input Specification:

Your input will be the number N. (Integer type)


Output :

Output will be the smallest number (integer type), greater than N and less than 1000000000 which satisfies the given conditions in the question. if no such number exists then output "There is no such number".


Examples 

1) If N = 2345 then the number 2354 is the smallest number greater than N and less than 1000000000 which satisfies the given conditions.

2) If N = 2895 then the number 2904 is the smallest number greater than N and less than 1000000000 which satisfies the given conditions.


The program is Smaller_largest_number.f90. It will prompt for a number. Give the number given in examples above as test.

To compile: gfortran Smaller_largest_number.f90


23) 12 disks problem : There are 12 disks. One disk is defective (less or more weight). The remaining 11 disks have equal weight.
    You have to tell in 3 weighing which disk is defective.
  
    SOLUTION :
 

 lets number the weights as : 1 2 3 4 5 6 7 8 9 10 11 12


1) Weigh 1234 and 5678

IF (equal weight) Defective is one of (9,10,11,12)

ii) weigh (1,9) and (2,10)

    IF (equal weight)

iii) weigh (1,9) and (2,11)

    IF (equal weight) Defective is 12

    OR Defective is 11

      ELSE IF (unequal weight)

Defective is 9 or 10

iii) weigh (1,9) and (2,3)

IF (equal weight) Defective is 10

OR Defective is 9


ELSE IF (unequal weight)

Defective is one of (1,2,3,4,5,6,7,8)

lets assume (1,2,3,4) is of less weight and (5,6,7,8) is of more weight

It is ok if it is reverse i.e. (1,2,3,4) is more weight and (5,6,7,8)

is of less weight

This means if (1,2,3,4) has a defective disk then the defective disk is

of less weight than other disks. Similarly, If (5,6,7,8) has a defective

disk, then the defective disk is of more weight.

ii) Weigh (1,2,3,5) and (4,10,11,12)

IF (unequal weight) THEN

IF (1,2,3,5) has more weight then defective is 5 or 4

                                        iii) weigh (5,9) and (10,11)

                                              IF (equal weight) then defective is 4

                                                IF (unequal weight) then (5,9) is more and defective is 5

IF (1,2,3,5) has less weight then defective is one of (1,2,3) 

iii) weigh (1,9) and (2,10)

IF (equal weight) defective is 3

IF (1,9) has less weight then defective is 1

IF (2,10) has less weight then defective is 2

IF (equal weight) THEN

Defective is one of (6,7,8) 

iii) weigh (6,9) and (7,10)

IF (equal weight) Defective is 8

IF (6,9) is of more weight, Defective is 6

IF (7,10) is of more weight, Defective is 7



24) Hats puzzle: there are 10 prisoners. the jailer puts a hat on each prisoner. the jailer asks each prisoner the color of his hat. the color of the hat can be white or black. if the prisoner correctly tells the color of the hat, the jailer frees him, otherwise the jailer kills him. all the prisoners can hear the answer of the prisoner. the prisoner can see the color of the hats of all the prisoners in front of him, but he cannot see the color of the hats of prisoners behind him. the prisoner also cannot see the color of his hat. the prisoners devise a strategy the night before to save maximum prisoners. what is the maximum number of prisoners that can be saved. the prisoners are selfless.

SOLUTION

9 prisoners can be saved with certainty. 

The prisoners decide that the 10th prisoner will shout white if there are odd number of white hats and black if there are even number of white hats. lets consider the 10th prisoner sees odd number of white hats (e.g. 7). Then he shouts white. he does not know the color of his hat. so if the color of his hat is white then he lives else he dies. this is pure chance (50% probability). All the prisoners hear the answer : white. All the prisoners know that there is odd number of white hats among the 9 prisoners. The 9th prisoner hears the answer "white" and knows that there are odd number of white hats including the color of his hat. If the 9th prisoner sees that there are odd number of white hats in front of him, then he has the black hat. If the 9th prisoner see there are even number of white hats in front him, then he has the white hat. thus the 9th prisoner shouts white or black depending on the answer of 10th prisoner and the number of white hats in front of him. Thus the 9th prisoner is saved. The answer of 9th prisoner is heard by all the 8 prisoners in front of him. The 8th prisoner knows that the 9th prisoner has black or white hat. He also knows that there was odd number of white hats initially among the 9 prisoners. If the 9th prisoner has white hat, then there will be even (7-1 = 6) number of white hats in the remaining 8 prisoners. If the 8th prisoner sees even number of white hats, then he has the black hat. If the 8th prisoner sees odd number of white hats, then he has the white hat. Similarly the 8th prisoner can deduce if the 9th prisoner has black hat. In the same way all the remaining prisoners can deduce if they have white or black hat and are saved.


25) Island with persons having spot on their forehead

There is an island in which there are some people with a spot on their forehead. The persons cannot see their own forehead. The persons can see other people's forehead. One day a fortune teller came and told to all the habitants of the island that all the people that have a spot on their forehead should leave the island else all persons will die.  The persons do not talk with each other and there is atleast one person who has a spot on his forehead. On 10th day all the persons having a spot on their forehead left the island. How many persons in the island had spot on their forehead.


SOLUTION

There are 10 people with spots in their forehead.

lets assume there was one person who has spot on his forehead. All the persons can see each other's forehead, but cannot see their own forehead. All the persons that do not have the spot on their forehead can see the person who has a spot on his forehead. The person who has a spot on his forehead sees that none of the persons have a spot on their forehead, so he concludes that he has the spot on his forehead (as atleast one person in the island has a spot on his head). Thus he leaves the island the first day. Similarly if 2 persons (A and B) have a spot on their forehead. Then on the first day all the persons see that A and B have spot on their forehead. A sees that B has spot on his forehead and B sees that A has a spot on his forehead. But, both A and B cannot see the spots on their forehead. On day 2, A sees that B is still there and concludes that he has a spot on his forehead. similarly B sees that A is still there and concludes that he has a spot on his forehead. Thus on day 2 both A and B leaves the island. Similarly we can see that on day 10 there will be 10 persons with spot on their forehead and will leave the island. Thus there are 10 persons with spot on their forehead and all 10 persons will leave on the 10th day.


2

6) Consider the set of 7-digit positive integers not containing digit 0 and such that one of the digits is the product of the other six digits (e.g. 1121163).

 

An element is selected at random from this set; what is the probability that this element contains digit 2 ? It is easy to solve the problem using programming. Solve it using math (permutation and combination)


SOLUTION

Number of digits : combination

1) For 1 - All 1 : 1

2) Two 2's, Rest 1 : C(n,2)

3) Two 3's, Rest 1 : C(n,2)

4)Two 2's, One 4, Rest 1 : C(n,2)*C(n-2,1)

   Two 4's, Rest 1 : C(n,2)

5) Two 5's and Rest 1 : C(n,2)

6) One 1, One 3, One 6 and Rest 1 : C(n,1)*C(n-1,1)*C(n-2,1)

    Two 6's and Rest 1 : C(n,2)

7) Two 7's and Rest 1 : C(n,2)

8)  Three 2, One 8 and Rest 1 : C(n,3)*C(n-3,1)

      One 4, One 2, One 8 and Rest 1 : C(n,1)*C(n-1,1)*C(n-2,1)

      Two 8's and Rest 1 : C(n,2)

9)   Two 3's, One 9 and Rest 1 : C(n,2)*C(n-2,1)

       Two 9's and Rest 1 : C(n,2)


Total : 1 + C(n,2) + C(n,2) + C(n,2)*C(n-2,1) + C(n,2) + C(n,2) + C(n,1)*C(n-1,1)*C(n-2,1) + C(n,2) + C(n,2) + C(n,3)*C(n-3,1) + C(n,1)*C(n-1,1)*C(n-2,1) + C(n,2) + C(n,2)*C(n-2,1) + C(n,2) = 

(n^4 + 12n^3 -19n^2+ 6n + 6)/6
where n is the number of digits


Feel Free to download the programs and please email me at : jainsk.iitkgp@gmail.com  if there are any issues.

My name is Surendra Kumar Jain. I have completed my PhD in Chemical and Biomolecular Engineering from North Carolina State University (NCSU), USA. I did my BTech in Chemical Engineering from IIT Kharagpur, India.


RESEARCH WORK (Molecular simulation of nanoporous carbons and Computational biology)

Information about my PhD work can be found at this website: chumba.che.ncsu.edu; from there, click on "group members", then on "Surendra Kumar Jain" (you can also go to the direct link which doesn't have the NCSU frames).

  Here is a presentation about my research work (PDF).


Recent work on modelling microporous carbons using Hybrid Reverse Monte Carlo (HRMC) method

I have developed molecular models for disordered microporous carbons using the Hybrid Reverse Monte Carlo (HRMC) method. My models contain carbon, hydrogen and oxygen atoms. There are 2 movies depicting the formation of the HRMC models.

(1) In the first method, I start with random configuration of carbon, hydrogen and oxygen atoms. Then I do HRMC simulation and obtain the final configuration. The REBO force field  is used for carbon,hydrogen and oxygen interactions.
You can download the movie here : HRMC-1-movie.

(2) In the second method, I first develop the HRMC model using carbon and hydrogen atoms. I then add functional groups (-COOH and -OH) to the carbon atoms (depending on the number of neighbors each carbon atoms have). Then I relax the oxygen and hydrogen atoms using the NVT monte carlo method. The carbon atoms are held fixed during the relaxation simulation. Here also REBO potential is used for carbon, hydrogen and oxygen interactions. You can download the movie here : HRMC-2-movie.

Recent work on mesoporous carbon molecular models (CMK-5 materials obtained from SBA-15 silicatemplate)

I have been working on developing new advanced models of mesoporous carbons (namely molecular models for CMK-5 materials). Here is a presentation about the CMK-5 models (PDF). 

Recent work on Computational biology (Large scale conformational change in proteins)

I have been working to understand the global conformational changes in proteins as they go from one state (open or active) to another state (closed or inactive). You can download three movies, showing global conformational changes of 3 proteins.  I have developed a method using Normal mode analysis and Energy minimisation, to understand the global conformational change, as the proteins go from open state to closed state. The movies are : MALK-atp-transporter (MPG file), ADK-kinase (MPG file) and a subunit of GroEL (MPG file). These movies show the motion of  proteins as they go from an open state to closed state. The movies were made using the VMD software.


SELECTED PUBLICATIONS

1) S. K. Jain, R. J-M. Pellenq, J. Pikunic, K. E. Gubbins “Molecular  modeling of porous carbons using the Hybrid Reverse Monte Carlo method” Langmuir, 22(24), 9942 (2006).
2) B. Coasne, S. K. Jain, K. E. Gubbins “Freezing  of fluids confined in a disordered nanoporous structure” Physical Review Letters , 97(10) , 105702 (2006).
3) S. K. Jain, K. E. Gubbins, R. J-M. Pellenq, J. Pikunic, “Molecular  modeling and adsorption properties of porous carbons ” Carbon , 44 , 2445 (2007).
4) S. K. Jain, K. E. Gubbins “Ring connectvity : Measuring network connectivity in network covalent solids” Langmuir, 23(3), 1123 (2007).
5) B. Coasne, S. K. Jain,  L.  Naamar,  K.  E.  Gubbins  “Freezing of argon  in  ordered  and disordered  porous carbon” Physical Review B , 76 (8) , 085416 (2007).
6) Halder P,Maurya M, Jain SK and Singh JK "Understanding Adsorption of CO2, N2, CH4 and its Mixture in Functionalized Carbon Nanopipe Array" Phys. Chem. Chem. Phys. 18, 14007 (2016)

7) S. K. Jain, R. J-M. Pellenq, K. E. Gubbins, X. Peng "Molecular modeling and adsorption properties of ordered silica templated CMK mesoporous carbons", Langmuir, 33 (9), pp 2109–2121 (2017).


Contact me :

If you are more interested in my research, please email me at jainsk.iitkgp@gmail.com






Comments