aboutsummaryrefslogtreecommitdiff
path: root/challenge-062/sangeet-kar/python/ch-2-brute.py
diff options
context:
space:
mode:
authorsangeet <sangeet.kar@gmail.com>2020-05-29 15:02:33 +0000
committersangeet <sangeet.kar@gmail.com>2020-05-29 15:02:33 +0000
commitab2061fa2bccd900bb5c5eb86d3290a3826f0527 (patch)
treecaa235ac72bfafe00f97ce125570874880260d93 /challenge-062/sangeet-kar/python/ch-2-brute.py
parentb689d75b6a7f13b3a3497b9406a11996e43a9234 (diff)
downloadperlweeklychallenge-club-ab2061fa2bccd900bb5c5eb86d3290a3826f0527.tar.gz
perlweeklychallenge-club-ab2061fa2bccd900bb5c5eb86d3290a3826f0527.tar.bz2
perlweeklychallenge-club-ab2061fa2bccd900bb5c5eb86d3290a3826f0527.zip
switched python and raku Ch2 names
Diffstat (limited to 'challenge-062/sangeet-kar/python/ch-2-brute.py')
-rwxr-xr-xchallenge-062/sangeet-kar/python/ch-2-brute.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/challenge-062/sangeet-kar/python/ch-2-brute.py b/challenge-062/sangeet-kar/python/ch-2-brute.py
new file mode 100755
index 0000000000..e243087412
--- /dev/null
+++ b/challenge-062/sangeet-kar/python/ch-2-brute.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+
+import sys
+
+def n_queens_3d (n = 2):
+ solutions = []
+ place_queen ([(i, j, k) for i in range(n) for j in range(n) for k in range(n)], [], solutions)
+ return indices_to_array(max(solutions, key=len), n);
+
+def place_queen (indices, queens, solutions):
+ if not indices: solutions.append(queens)
+ for pos in indices:
+ place_queen ([index for index in indices if is_available(pos, index)], [*queens, pos], solutions)
+
+def is_available(ref, pos):
+ diff = {abs(i - j) for i, j in zip (ref, pos)}
+ return not ( len(diff) < 2 or (len(diff) == 2 and 0 in diff))
+
+def indices_to_array (indices, n):
+ array = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
+ for i, j, k in indices:
+ array[i][j][k] = 1
+ return array
+
+n = int(sys.argv[1]) if len(sys.argv) > 1 else 2
+print(n_queens_3d (n))
+