36. 正答の条件
pred complete(na: set Number, nb: set Number){
Number in na.(nb.data)
}
まとめるとこうなるよ!
pred rules(){
all n1,n2: Number | one n1.data[n2]
all row: Number | complete[row, Number]
all col: Number | complete[Number, col]
complete[Region1, Region1]
complete[Region1, Region2]
complete[Region1, Region3]
complete[Region2, Region1]
complete[Region2, Region2]
complete[Region2, Region3]
complete[Region3, Region1]
complete[Region3, Region2]
complete[Region3, Region3]
}
37. 完成したソースコード
abstract sig Number{data: Number -> Number}
abstract sig Region1, Region2, Region3 extends Number{}
one sig N1, N2, N3 extends Region1 {}
one sig N4, N5, N6 extends Region2 {}
one sig N7, N8, N9 extends Region3 {}
pred complete(na: set Number, nb: set Number){
Number = na.(nb.data)
}
pred rules(){ pred puzzle() {
all n1,n2: Number | one n1.data[n2] N1->N1->N5 + N1->N2->N3 + N1->N5->N7
all row: Number | complete[row, Number] + N2->N1->N6 + N2->N4->N1 + N2->N5->N9 + N2->N6->N5
all col: Number | complete[Number, col] + N3->N2->N9 + N3->N3->N8 + N3->N8->N6
complete[Region1, Region1] + N4->N1->N8 + N4->N5->N6 + N4->N9->N3
complete[Region1, Region2] + N5->N1->N4 + N5->N4->N8 + N5->N6->N3 + N5->N9->N1
complete[Region1, Region3] + N6->N1->N7 + N6->N5->N2 + N6->N9->N6
complete[Region2, Region1] + N7->N2->N6 + N7->N7->N2 + N7->N8->N8
complete[Region2, Region2] + N8->N4->N4 + N8->N5->N1 + N8->N6->N9 + N8->N9->N5
complete[Region2, Region3] + N9->N5->N8 + N9->N8->N7 + N9->N9->N9 in data
complete[Region3, Region1] }
complete[Region3, Region2] pred solve{ rules[] puzzle[] }
complete[Region3, Region3] run solve
}