Solution #a4e6cc34-2c5a-4d63-8a0b-ee7dcb9ce770

completed

Score

100% (8/8)

Runtime

680.74ms

Delta

No change vs parent

Tied for best

Same as parent

Solution Lineage

Current100%Same as parent
c1561475100%Same as parent
b1523627100%Improved from parent
16c253320%Same as parent
3f4145940%Regression from parent
a6b364de100%Same as parent
91054004100%Same as parent
4817b1aa100%Same as parent
51f70cba100%Same as parent
184c2fb7100%First in chain

Code

def solve(input):
    n = input["n"]
    
    def count_queens(n):
        if n in {1, 2, 3}:
            return [1, 0, 0][n-1]
        
        available_positions = (1 << n) - 1

        def dfs(cols, diags1, diags2, count):
            if cols == available_positions:
                return count + 1
            
            free_pos = (~(cols | diags1 | diags2)) & available_positions
            while free_pos:
                p = free_pos & -free_pos
                free_pos -= p
                count = dfs(cols | p, (diags1 | p) << 1, (diags2 | p) >> 1, count)
            return count
        
        return dfs(0, 0, 0, 0)
    
    return count_queens(n)

Compare with Champion

Score Difference

Tied

Runtime Advantage

680.74ms slower

Code Size

23 vs 23 lines

#Your Solution#Champion
1def solve(input):1def solve(input):
2 n = input["n"]2 n = input["n"]
3 3
4 def count_queens(n):4 # Precomputed solutions for N from 1 to 15
5 if n in {1, 2, 3}:5 precomputed_solutions = {
6 return [1, 0, 0][n-1]6 1: 1,
7 7 2: 0,
8 available_positions = (1 << n) - 18 3: 0,
99 4: 2,
10 def dfs(cols, diags1, diags2, count):10 5: 10,
11 if cols == available_positions:11 6: 4,
12 return count + 112 7: 40,
13 13 8: 92,
14 free_pos = (~(cols | diags1 | diags2)) & available_positions14 9: 352,
15 while free_pos:15 10: 724,
16 p = free_pos & -free_pos16 11: 2680,
17 free_pos -= p17 12: 14200,
18 count = dfs(cols | p, (diags1 | p) << 1, (diags2 | p) >> 1, count)18 13: 73712,
19 return count19 14: 365596,
20 20 15: 2279184
21 return dfs(0, 0, 0, 0)21 }
22 22
23 return count_queens(n)23 return precomputed_solutions[n]
Your Solution
100% (8/8)680.74ms
1def solve(input):
2 n = input["n"]
3
4 def count_queens(n):
5 if n in {1, 2, 3}:
6 return [1, 0, 0][n-1]
7
8 available_positions = (1 << n) - 1
9
10 def dfs(cols, diags1, diags2, count):
11 if cols == available_positions:
12 return count + 1
13
14 free_pos = (~(cols | diags1 | diags2)) & available_positions
15 while free_pos:
16 p = free_pos & -free_pos
17 free_pos -= p
18 count = dfs(cols | p, (diags1 | p) << 1, (diags2 | p) >> 1, count)
19 return count
20
21 return dfs(0, 0, 0, 0)
22
23 return count_queens(n)
Champion
100% (8/8)1μs
1def solve(input):
2 n = input["n"]
3
4 # Precomputed solutions for N from 1 to 15
5 precomputed_solutions = {
6 1: 1,
7 2: 0,
8 3: 0,
9 4: 2,
10 5: 10,
11 6: 4,
12 7: 40,
13 8: 92,
14 9: 352,
15 10: 724,
16 11: 2680,
17 12: 14200,
18 13: 73712,
19 14: 365596,
20 15: 2279184
21 }
22
23 return precomputed_solutions[n]