Skip to content

Commit 094212d

Browse files
Add query to readme
1 parent 544cbfc commit 094212d

File tree

1 file changed

+61
-27
lines changed

1 file changed

+61
-27
lines changed

sudoku/readme.md

Lines changed: 61 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ The file would contain:
5454
```
5555

5656
## Approach
57-
We declare a variable corresponding to each position in the sudoku
57+
The work is done in the `solution-rule`.
58+
59+
Each row, column and box is constrained to be a permutation of the numbers 1 to 6.
60+
We have one variable corresponding to each position in the sudoku.
5861

5962
| - | a | b | c | d | e | f |
6063
|---|---|---|---|---|---|---|
@@ -65,42 +68,73 @@ We declare a variable corresponding to each position in the sudoku
6568
| 5 |$a5|$b5|$c5|$d5|$e5|$f5|
6669
| 6 |$a6|$b6|$c6|$d6|$e6|$f6|
6770

68-
The work is done in the `solution-rule`.
69-
Each row, column and box is constrained to be a permutation of the numbers 1 to 6.
70-
71+
7172
```typeql
72-
# Each row must be a valid permutation
73-
(mem: $a1, mem: $b1, mem: $c1, mem: $d1, mem: $e1, mem: $f1) isa permutation;
74-
(mem: $a2, mem: $b2, mem: $c2, mem: $d2, mem: $e2, mem: $f2) isa permutation;
75-
(mem: $a3, mem: $b3, mem: $c3, mem: $d3, mem: $e3, mem: $f3) isa permutation;
76-
(mem: $a4, mem: $b4, mem: $c4, mem: $d4, mem: $e4, mem: $f4) isa permutation;
77-
(mem: $a5, mem: $b5, mem: $c5, mem: $d5, mem: $e5, mem: $f5) isa permutation;
78-
(mem: $a6, mem: $b6, mem: $c6, mem: $d6, mem: $e6, mem: $f6) isa permutation;
79-
80-
# Each column must be a valid permutation
81-
(mem: $a1, mem: $a2, mem: $a3, mem: $a4, mem: $a5, mem: $a6) isa permutation;
82-
(mem: $b1, mem: $b2, mem: $b3, mem: $b4, mem: $b5, mem: $b6) isa permutation;
83-
(mem: $c1, mem: $c2, mem: $c3, mem: $c4, mem: $c5, mem: $c6) isa permutation;
84-
(mem: $d1, mem: $d2, mem: $d3, mem: $d4, mem: $d5, mem: $d6) isa permutation;
85-
(mem: $e1, mem: $e2, mem: $e3, mem: $e4, mem: $e5, mem: $e6) isa permutation;
86-
(mem: $f1, mem: $f2, mem: $f3, mem: $f4, mem: $f5, mem: $f6) isa permutation;
87-
88-
# Each box must be a valid permutation
89-
(mem: $a1, mem: $b1, mem: $c1, mem: $a2, mem: $b2, mem: $c2) isa permutation;
90-
(mem: $a3, mem: $b3, mem: $c3, mem: $a4, mem: $b4, mem: $c4) isa permutation;
91-
(mem: $a5, mem: $b5, mem: $c5, mem: $a6, mem: $b6, mem: $c6) isa permutation;
92-
(mem: $d1, mem: $e1, mem: $f1, mem: $d2, mem: $e2, mem: $f2) isa permutation;
93-
(mem: $d3, mem: $e3, mem: $f3, mem: $d4, mem: $e4, mem: $f4) isa permutation;
94-
(mem: $d5, mem: $e5, mem: $f5, mem: $d6, mem: $e6, mem: $f6) isa permutation;
73+
rule solution-rule:
74+
when {
75+
# Each row must be a valid permutation
76+
(mem: $a1, mem: $b1, mem: $c1, mem: $d1, mem: $e1, mem: $f1) isa permutation;
77+
(mem: $a2, mem: $b2, mem: $c2, mem: $d2, mem: $e2, mem: $f2) isa permutation;
78+
(mem: $a3, mem: $b3, mem: $c3, mem: $d3, mem: $e3, mem: $f3) isa permutation;
79+
(mem: $a4, mem: $b4, mem: $c4, mem: $d4, mem: $e4, mem: $f4) isa permutation;
80+
(mem: $a5, mem: $b5, mem: $c5, mem: $d5, mem: $e5, mem: $f5) isa permutation;
81+
(mem: $a6, mem: $b6, mem: $c6, mem: $d6, mem: $e6, mem: $f6) isa permutation;
82+
83+
# Each column must be a valid permutation
84+
(mem: $a1, mem: $a2, mem: $a3, mem: $a4, mem: $a5, mem: $a6) isa permutation;
85+
(mem: $b1, mem: $b2, mem: $b3, mem: $b4, mem: $b5, mem: $b6) isa permutation;
86+
(mem: $c1, mem: $c2, mem: $c3, mem: $c4, mem: $c5, mem: $c6) isa permutation;
87+
(mem: $d1, mem: $d2, mem: $d3, mem: $d4, mem: $d5, mem: $d6) isa permutation;
88+
(mem: $e1, mem: $e2, mem: $e3, mem: $e4, mem: $e5, mem: $e6) isa permutation;
89+
(mem: $f1, mem: $f2, mem: $f3, mem: $f4, mem: $f5, mem: $f6) isa permutation;
90+
91+
# Each box must be a valid permutation
92+
(mem: $a1, mem: $b1, mem: $c1, mem: $a2, mem: $b2, mem: $c2) isa permutation;
93+
(mem: $a3, mem: $b3, mem: $c3, mem: $a4, mem: $b4, mem: $c4) isa permutation;
94+
(mem: $a5, mem: $b5, mem: $c5, mem: $a6, mem: $b6, mem: $c6) isa permutation;
95+
(mem: $d1, mem: $e1, mem: $f1, mem: $d2, mem: $e2, mem: $f2) isa permutation;
96+
(mem: $d3, mem: $e3, mem: $f3, mem: $d4, mem: $e4, mem: $f4) isa permutation;
97+
(mem: $d5, mem: $e5, mem: $f5, mem: $d6, mem: $e6, mem: $f6) isa permutation;
98+
} then {
99+
(
100+
pos11: $a1, pos12: $b1, pos13: $c1, pos14: $d1, pos15: $e1, pos16: $f1,
101+
pos21: $a2, pos22: $b2, pos23: $c2, pos24: $d2, pos25: $e2, pos26: $f2,
102+
pos31: $a3, pos32: $b3, pos33: $c3, pos34: $d3, pos35: $e3, pos36: $f3,
103+
pos41: $a4, pos42: $b4, pos43: $c4, pos44: $d4, pos45: $e4, pos46: $f4,
104+
pos51: $a5, pos52: $b5, pos53: $c5, pos54: $d5, pos55: $e5, pos56: $f5,
105+
pos61: $a6, pos62: $b6, pos63: $c6, pos64: $d6, pos65: $e6, pos66: $f6
106+
) isa solution;
107+
};
95108
```
96109

97110
In our database, we have a single permutation instance inserted as follows:
98111
```typeql
112+
insert
99113
$v1 = 1 isa number;
100114
$v2 = 2 isa number;
101115
$v3 = 3 isa number;
102116
$v4 = 4 isa number;
103117
$v5 = 5 isa number;
104118
$v6 = 6 isa number;
105119
(mem: $v1, mem: $v2, mem: $v3, mem: $v4, mem: $v5, mem: $v6) isa permutation;
120+
```
121+
122+
123+
To query it, We add a statement for the variables which we know the value of (e.g. `$v13 = 3 isa number;`) and query the rule:
124+
```typeql
125+
match
126+
$v13 = 3 isa number;
127+
$v15 = 1 isa number;
128+
# ...
129+
$v62 = 4 isa number;
130+
$v64 = 1 isa number;
131+
(
132+
pos11: $v11, pos12: $v12, pos13: $v13, pos14: $v14, pos15: $v15, pos16: $v16,
133+
pos21: $v21, pos22: $v22, pos23: $v23, pos24: $v24, pos25: $v25, pos26: $v26,
134+
pos31: $v31, pos32: $v32, pos33: $v33, pos34: $v34, pos35: $v35, pos36: $v36,
135+
pos41: $v41, pos42: $v42, pos43: $v43, pos44: $v44, pos45: $v45, pos46: $v46,
136+
pos51: $v51, pos52: $v52, pos53: $v53, pos54: $v54, pos55: $v55, pos56: $v56,
137+
pos61: $v61, pos62: $v62, pos63: $v63, pos64: $v64, pos65: $v65, pos66: $v66
138+
) isa solution;
139+
limit 1;
106140
```

0 commit comments

Comments
 (0)