Solution #a4e6cc34-2c5a-4d63-8a0b-ee7dcb9ce770
completedScore
100% (8/8)
Runtime
680.74ms
Delta
No change vs parent
Tied for best
Same as parent
Score
100% (8/8)
Runtime
680.74ms
Delta
No change vs parent
Tied for best
Same as parent
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)Score Difference
Tied
Runtime Advantage
680.74ms slower
Code Size
23 vs 23 lines
| # | Your Solution | # | Champion |
|---|---|---|---|
| 1 | def solve(input): | 1 | def 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) - 1 | 8 | 3: 0, |
| 9 | 9 | 4: 2, | |
| 10 | def dfs(cols, diags1, diags2, count): | 10 | 5: 10, |
| 11 | if cols == available_positions: | 11 | 6: 4, |
| 12 | return count + 1 | 12 | 7: 40, |
| 13 | 13 | 8: 92, | |
| 14 | free_pos = (~(cols | diags1 | diags2)) & available_positions | 14 | 9: 352, |
| 15 | while free_pos: | 15 | 10: 724, |
| 16 | p = free_pos & -free_pos | 16 | 11: 2680, |
| 17 | free_pos -= p | 17 | 12: 14200, |
| 18 | count = dfs(cols | p, (diags1 | p) << 1, (diags2 | p) >> 1, count) | 18 | 13: 73712, |
| 19 | return count | 19 | 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] |
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) - 1910 def dfs(cols, diags1, diags2, count):11 if cols == available_positions:12 return count + 113 14 free_pos = (~(cols | diags1 | diags2)) & available_positions15 while free_pos:16 p = free_pos & -free_pos17 free_pos -= p18 count = dfs(cols | p, (diags1 | p) << 1, (diags2 | p) >> 1, count)19 return count20 21 return dfs(0, 0, 0, 0)22 23 return count_queens(n)1def solve(input):2 n = input["n"]3 4 # Precomputed solutions for N from 1 to 155 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: 227918421 }22 23 return precomputed_solutions[n]