import random import sys def nqueensnr showminconflictslistr
import random
 import sys
 def nqueens(nr):
    show(min_conflicts(list(range(nr)), nr), nr)
#print the solution if it exists
 def show(soln, nr):
    for i in range(nr):
        row = [\'~\'] * nr
        for col in range(nr):
            if soln[col] == nr - 1 - i:
                row[col] = \'Q\'
        print(\'\'.join(row))
#passing in number of iterations to overcome situations where min-conflicts chokes
 #due to critical-ratio issues
 #this should not matter in most cases
 def min_conflicts(soln, nr, iters=1000000):
 #initialize queens to random positions
    def random_pos(li, filt):
        return random.choice([i for i in range(nr) if filt(li[i])])
   for k in range(iters):
 print (k)
 #REMOVE THE ABOVE PRINT STATEMENT WHEN YOU MAKE YOUR CHANGES#
 ## YOUR CODE HERE ##
 #AROUND 10-25 LINES OF CODE EXPECTED #
 #HINT: MAKE USE OF THE find_conflicts METHOD BELOW#
    raise Exception(\"Incomplete solution: try more iterations.\")
def find_conflicts(soln, nr):
    return [hits(soln, nr, col, soln[col]) for col in range(nr)]
def hits(soln, nr, col, row):
    total = 0
    for i in range(nr):
        if i == col:
            continue
        if soln[i] == row or abs(i - col) == abs(soln[i] - row):
            total += 1
    return total
#try running n-queens with n=64 etc.
 nqueens(64)
MUST BE IN PYTHON
Problem 2030 points): Constraint Satisfaction using min-conflicts In this problem, you will implement a solution to the n-queens problem using min- conflicts local search algorithm. A skeleton code file is provided for you. Take a look at the output function, show (soln, nr) This function will print the solution if your code finds one in the min conflicts method in the format shown below Here is output from running 4-queens. And here is 10-queens.Solution
//Min-Conflicts solves the N-Queens Problem by randomly selecting a column from the Chess board for queen //reassignment.
//Code
import random
def nqueens(nr):
    show(min_conflicts(list(range(nr)), nr), nr)
def show(soln, nr):
    for i in range(nr):
        row = [\'~\'] * nr
        for col in range(nr):
            if soln[col] == nr - 1 - i:
                row[col] = \'Q\'
        print(\'\'.join(row))
def min_conflicts(soln, nr, iters=1000):
    def random_pos(li, filt):
        return random.choice([i for i in range(nr) if filt(li[i])])
   for k in range(iters):
        confs = find_conflicts(soln, nr)
        if sum(confs) == 0:
            return soln
        col = random_pos(confs, lambda elt: elt > 0)
        vconfs = [hits(soln, nr, col, row) for row in range(nr)]
        soln[col] = random_pos(vconfs, lambda elt: elt == min(vconfs))
    raise Exception(\"Incomplete solution: try more iterations.\")
def find_conflicts(soln, nr):
    return [hits(soln, nr, col, soln[col]) for col in range(nr)]
def hits(soln, nr, col, row):
    total = 0
    for i in range(nr):
        if i == col:
            continue
        if soln[i] == row or abs(i - col) == abs(soln[i] - row):
            total += 1
    return total
nqueens(64)


