/* Sudoku Pi Day 2015 in Picat. http://brainfreezepuzzles.com/piday2015.html """ Fill in the grid so that 1-9 appear exactly once in each row, column, and block. In addition, each shaded rectangle must contain exactly the digits in 3.1415926. Note that this puzzle only has 16 clues, which is insufficient for a regular sudoku puzzle to have a unique solution. """ Via https://threesixty360.wordpress.com/2015/03/10/happy-pi-day-2015/ This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import util. import cp. main => go. go ?=> sudoku(N,X,NumSeqs,Seqs,SeqGcc), N2 = ceiling(sqrt(N)), X :: 1..N, % Sudoku foreach(Row in X) all_different(Row) end, foreach(Column in transpose(X)) all_different(Column) end, foreach(I in 1..N2..N, J in 1..N2..N) all_different([X[I+K,J+L] : K in 0..N2-1, L in 0..N2-1]) end, % 31415926 in each sequence foreach(S in 1..NumSeqs) global_cardinality([X[Seqs[S,2*I+1],Seqs[S,2*I+2]] : I in 0..7], SeqGcc) end, solve([ffc,split],X), foreach(Row in X) println(Row) end, fail, % check for uniqueness nl. go => true. sudoku(N,X,NumSeqs,Seqs,SeqGcc) => N = 9, X = [ [_,_,_, 9,_,4, _,_,_], [_,3,_, _,_,_, _,9,_], [_,_,_, _,_,_, _,_,_], [1,_,_, _,6,_, _,_,2], [_,_,_, 4,_,2, _,_,_], [6,_,_, _,3,_, _,_,4], [_,_,_, _,_,_, _,_,_], [_,5,_, _,_,_, _,4,_], [_,_,_, 7,_,5, _,_,_] ], NumSeqs = 4, Seqs = [ % seq 1 [ 2,2, 2,3, 2,4, 3,1, 3,2, 3,3, 3,4, 4,1], % seq 2 [ 1,9, 2,6, 2,7, 2,8, 2,9, 3,6, 3,7, 3,8], % seq 3 [5,3, 5,4, 6,3, 6,4, 7,3, 7,4, 8,3, 8,4], % seq 4 [6,6, 6,7, 7,6, 7,7, 8,7, 8,8, 9,7, 9,8] ], SeqGcc = [2,1,1,1,1,1,0,0,1]. global_cardinality(A, Gcc) => Max = length(Gcc), foreach(I in 1..Max) count(I,A,#=,Gcc[I]) end.