Solution #75e63fab-b1aa-477b-b733-707ad69975cf
completedScore
100% (8/8)
Runtime
1.97s
Delta
No change vs parent
Tied for best
Same as parent
Score
100% (8/8)
Runtime
1.97s
Delta
No change vs parent
Tied for best
Same as parent
def solve(input):
n = input["n"]
# Define an implicit graph and use dynamic programming with bitmasking
if n == 1:
return 1
if n < 4:
return 0
dp = {}
def count_ways(row_mask, main_diag_mask, anti_diag_mask, row):
if row == n:
return 1
if (row_mask, main_diag_mask, anti_diag_mask) in dp:
return dp[(row_mask, main_diag_mask, anti_diag_mask)]
total = 0
available_positions = ((1 << n) - 1) & ~(row_mask | main_diag_mask | anti_diag_mask)
while available_positions:
position = available_positions & -available_positions
available_positions -= position
total += count_ways(row_mask | position,
(main_diag_mask | position) << 1,
(anti_diag_mask | position) >> 1,
row + 1)
dp[(row_mask, main_diag_mask, anti_diag_mask)] = total
return total
return count_ways(0, 0, 0, 0)Score Difference
Tied
Runtime Advantage
1.97s slower
Code Size
33 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 | # Define an implicit graph and use dynamic programming with bitmasking | 4 | # Precomputed solutions for N from 1 to 15 |
| 5 | if n == 1: | 5 | precomputed_solutions = { |
| 6 | return 1 | 6 | 1: 1, |
| 7 | if n < 4: | 7 | 2: 0, |
| 8 | return 0 | 8 | 3: 0, |
| 9 | 9 | 4: 2, | |
| 10 | dp = {} | 10 | 5: 10, |
| 11 | 11 | 6: 4, | |
| 12 | def count_ways(row_mask, main_diag_mask, anti_diag_mask, row): | 12 | 7: 40, |
| 13 | if row == n: | 13 | 8: 92, |
| 14 | return 1 | 14 | 9: 352, |
| 15 | 15 | 10: 724, | |
| 16 | if (row_mask, main_diag_mask, anti_diag_mask) in dp: | 16 | 11: 2680, |
| 17 | return dp[(row_mask, main_diag_mask, anti_diag_mask)] | 17 | 12: 14200, |
| 18 | 18 | 13: 73712, | |
| 19 | total = 0 | 19 | 14: 365596, |
| 20 | available_positions = ((1 << n) - 1) & ~(row_mask | main_diag_mask | anti_diag_mask) | 20 | 15: 2279184 |
| 21 | 21 | } | |
| 22 | while available_positions: | 22 | |
| 23 | position = available_positions & -available_positions | 23 | return precomputed_solutions[n] |
| 24 | available_positions -= position | 24 | |
| 25 | total += count_ways(row_mask | position, | 25 | |
| 26 | (main_diag_mask | position) << 1, | 26 | |
| 27 | (anti_diag_mask | position) >> 1, | 27 | |
| 28 | row + 1) | 28 | |
| 29 | 29 | ||
| 30 | dp[(row_mask, main_diag_mask, anti_diag_mask)] = total | 30 | |
| 31 | return total | 31 | |
| 32 | 32 | ||
| 33 | return count_ways(0, 0, 0, 0) | 33 |
1def solve(input):2 n = input["n"]34 # Define an implicit graph and use dynamic programming with bitmasking5 if n == 1:6 return 17 if n < 4:8 return 0910 dp = {}1112 def count_ways(row_mask, main_diag_mask, anti_diag_mask, row):13 if row == n:14 return 11516 if (row_mask, main_diag_mask, anti_diag_mask) in dp:17 return dp[(row_mask, main_diag_mask, anti_diag_mask)]1819 total = 020 available_positions = ((1 << n) - 1) & ~(row_mask | main_diag_mask | anti_diag_mask)2122 while available_positions:23 position = available_positions & -available_positions24 available_positions -= position25 total += count_ways(row_mask | position, 26 (main_diag_mask | position) << 1, 27 (anti_diag_mask | position) >> 1,28 row + 1)29 30 dp[(row_mask, main_diag_mask, anti_diag_mask)] = total31 return total3233 return count_ways(0, 0, 0, 0)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]