What is the minimal positive determinant of a $3\times 3$ matrix with non-repeating entries selected from $\{1,2,...,9\}$, such as the following:
\begin{align} \left [ \begin{matrix} 1&2&3 \\ 4&5&6 \\ 7&8&9 \\ \end{matrix} \right ] \end{align}
What is the minimal positive determinant of a $3\times 3$ matrix with non-repeating entries selected from $\{1,2,...,9\}$, such as the following:
\begin{align} \left [ \begin{matrix} 1&2&3 \\ 4&5&6 \\ 7&8&9 \\ \end{matrix} \right ] \end{align}
Here's a script that lists all matrices with determinant of absolute value 1, giving one representative for each equivalence class relative to row/column permutations. For each of these representatives, the upper-left entry is 1, and the middle entry is the smallest within the bottom right $2 \times 2$ square. Note that this does not account for the fact that transposing one valid solution gives you another, so we are still redundantly counting by a factor of at least 2.
import numpy as np
from itertools import permutations, combinations
n = 3
first_row,first_col = [0,0,1,2],[1,2,0,0]
sec_row,sec_col = [1,2,2],[2,1,2]
num_set = np.arange(2,n**2+1)
diagonal: 1,a,_
sols = []
ct = 0
for a in range(2,2n+1):
for inner in combinations(range(a+1,n*2+1),3):
outer = np.setdiff1d(num_set,(a,) + inner)
for p1 in permutations(outer):
for p2 in permutations(inner):
A = np.diag([1,a,0])
A[first_row,first_col] = p1
A[sec_row,sec_col] = p2
if abs(round(np.linalg.det(A),0)) == 1:
sols.append(A)
Here are the results
1 7 8 1 9 6 1 7 8 1 9 4 1 4 7 1 6 9 1 4 8 1 6 7
9 2 3 7 2 4 9 2 3 7 2 5 6 2 3 4 2 5 6 2 3 4 2 5
6 4 5 8 3 5 4 5 6 8 3 6 9 5 8 7 3 8 7 5 9 8 3 9
1 4 5 1 8 6 1 5 7 1 6 4 1 3 6 1 7 8 1 5 7 1 6 3
8 2 3 4 2 7 6 2 9 5 2 3 7 2 5 3 2 4 6 2 9 5 2 4
6 7 9 5 3 9 4 3 8 7 9 8 8 4 9 6 5 9 3 4 8 7 9 8
1 6 5 1 7 3 1 8 2 1 9 6 1 2 7 1 6 9 1 2 6 1 8 7
7 2 4 6 2 9 9 3 7 8 3 4 6 3 4 2 3 5 8 3 5 2 3 4
3 9 8 5 4 8 6 4 5 2 7 5 9 5 8 7 4 8 7 4 9 6 5 9
1 2 5 1 7 9 1 5 2 1 6 9 1 2 8 1 4 9 1 2 7 1 4 9
7 3 6 2 3 4 6 3 4 5 3 8 4 3 5 2 3 6 4 3 5 2 3 6
9 4 8 5 6 8 9 8 7 2 4 7 9 6 7 8 5 7 9 6 8 7 5 8
1 2 8 1 4 7 1 4 6 1 7 2 1 4 5 1 6 2 1 2 3 1 3 2
4 3 6 2 3 5 7 3 9 4 3 5 6 3 8 4 3 7 6 4 7 8 4 5
7 5 9 8 6 9 2 5 8 6 9 8 2 7 9 5 8 9 8 5 9 6 9 7
1 6 8 1 8 6 1 2 3 1 6 3 1 7 2 1 7 6 1 2 5 1 3 9
2 4 5 3 4 9 7 4 8 7 4 8 6 4 9 2 4 5 3 4 8 2 4 7
3 7 9 2 5 7 6 5 9 2 9 5 3 8 5 3 8 9 9 7 6 5 8 6
1 2 3 1 2 4 1 3 8 1 8 4 1 2 3 1 7 4 1 2 4 1 2 4
8 5 7 3 5 9 2 5 7 2 5 6 7 5 8 2 5 6 3 5 7 3 5 9
4 6 9 8 7 6 4 9 6 3 7 9 4 6 9 3 8 9 6 9 8 6 7 8
1 3 2 1 3 2 1 3 6 1 3 6 1 6 4 1 6 4 1 3 2 1 4 5
6 5 8 6 5 9 2 5 7 2 5 9 3 5 8 3 5 9 4 6 7 3 6 8
4 9 7 4 8 7 4 9 8 4 7 8 2 9 7 2 8 7 5 8 9 2 7 9
For your own printing convenience:
for i in range(8):
for rows in zip(*sols[8*i:8*(i+1)]):
for row in rows:
print(*row,end=' ')
print()
print()
$$
– Ben Grossmann Nov 08 '22 at 05:34