/* Number puzzle in Picat. From Microsoft Solver Foundation discussion http://code.msdn.microsoft.com/solverfoundation/Thread/View.aspx?ThreadId=1062 """ I am trying to solve a number puzzle using Microsoft Solver Foundation via Excel. I have successfully defined the Decisions and started to define the Constraints. The puzzle has now been solving for 36 hours and has not yet found a solution. Is there anything I can do to see how long it might take to solve? Is there a way to improve my Model so that it can be solved faster? Thanks! """ This was mentioned in Erwin Kalvelagen's blog post "MSF CSP: Domain Over Weighted Degree" http://yetanothermathprogrammingconsultant.blogspot.com/2008/12/msf-csp-domain-over-weighted-degree.html Note: I don't know what the problem really is but it is an alphametic problem of some kind. There are _alot_ of solutions. This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import sat. main => go. go => nolog, AZ = [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z], AZ :: 10000..99999, Rad = [Rad01,Rad02,Rad03,Rad04,Rad05,Rad06,Rad07,Rad08,Rad09, Rad10,Rad11,Rad12,Rad13,Rad14,Rad15,Rad16,Rad17,Rad18,Rad19, Rad20,Rad21,Rad22,Rad23,Rad24,Rad25,Rad26,Rad27,Rad28,Rad29, Rad30,Rad31,Rad32,Rad33,Rad34,Rad35,Rad36,Rad37,Rad38,Rad39,Rad40], Rad :: 10000..99999, A1_Z5 = [A1,A2,A3,A4,A5, B1,B2,B3,B4,B5, C1,C2,C3,C4,C5, D1,D2,D3,D4,D5, E1,E2,E3,E4,E5, F1,F2,F3,F4,F5, G1,G2,G3,G4,G5, H1,H2,H3,H4,H5, I1,I2,I3,I4,I5, J1,J2,J3,J4,J5, K1,K2,K3,K4,K5, L1,L2,L3,L4,L5, M1,M2,M3,M4,M5, N1,N2,N3,N4,N5, O1,O2,O3,O4,O5, P1,P2,P3,P4,P5, Q1,Q2,Q3,Q4,Q5, R1,R2,R3,R4,R5, S1,S2,S3,S4,S5, T1,T2,T3,T4,T5, U1,U2,U3,U4,U5, V1,V2,V3,V4,V5, W1,W2,W3,W4,W5, X1,X2,X3,X4,X5, Y1,Y2,Y3,Y4,Y5, Z1,Z2,Z3,Z4,Z5], A1_Z5:: 0..9, all_different(AZ ++ Rad), % Channelling A -> A1..A5 etc A #= A1*10000+A2*1000+A3*100+A4*10+A5, B #= B1*10000+B2*1000+B3*100+B4*10+B5, C #= C1*10000+C2*1000+C3*100+C4*10+C5, D #= D1*10000+D2*1000+D3*100+D4*10+D5, E #= E1*10000+E2*1000+E3*100+E4*10+E5, F #= F1*10000+F2*1000+F3*100+F4*10+F5, G #= G1*10000+G2*1000+G3*100+G4*10+G5, H #= H1*10000+H2*1000+H3*100+H4*10+H5, I #= I1*10000+I2*1000+I3*100+I4*10+I5, J #= J1*10000+J2*1000+J3*100+J4*10+J5, K #= K1*10000+K2*1000+K3*100+K4*10+K5, L #= L1*10000+L2*1000+L3*100+L4*10+L5, M #= M1*10000+M2*1000+M3*100+M4*10+M5, N #= N1*10000+N2*1000+N3*100+N4*10+N5, O #= O1*10000+O2*1000+O3*100+O4*10+O5, P #= P1*10000+P2*1000+P3*100+P4*10+P5, Q #= Q1*10000+Q2*1000+Q3*100+Q4*10+Q5, R #= R1*10000+R2*1000+R3*100+R4*10+R5, S #= S1*10000+S2*1000+S3*100+S4*10+S5, T #= T1*10000+T2*1000+T3*100+T4*10+T5, U #= U1*10000+U2*1000+U3*100+U4*10+U5, V #= V1*10000+V2*1000+V3*100+V4*10+V5, W #= W1*10000+W2*1000+W3*100+W4*10+W5, X #= X1*10000+X2*1000+X3*100+X4*10+X5, Y #= Y1*10000+Y2*1000+Y3*100+Y4*10+Y5, Z #= Z1*10000+Z2*1000+Z3*100+Z4*10+Z5, % This seems to be the gist of the problem Rad01 #= sum([H5*1000,I4*1000,Q2*100,U4*10,Y1]), Rad02 #= sum([A1*1000,I5*1000,Q2*100,U4*10,Y1]), Rad03 #= sum([A2*1000,J1*1000,Q3*100,U5*10,Y1]), Rad04 #= sum([A3*1000,J2*1000,Q3*100,U5*10,Y1]), Rad05 #= sum([A4*1000,J3*1000,Q4*100,V1*10,Y2]), Rad06 #= sum([A5*1000,J4*1000,Q4*100,V1*10,Y2]), Rad07 #= sum([B1*1000,J5*1000,Q5*100,V2*10,Y2]), Rad08 #= sum([B2*1000,K1*1000,Q5*100,V2*10,Y2]), Rad09 #= sum([B3*1000,K2*1000,R1*100,V3*10,Y3]), Rad10 #= sum([B4*1000,K3*1000,R1*100,V3*10,Y3]), Rad11 #= sum([B5*1000,K4*1000,R2*100,V4*10,Y3]), Rad12 #= sum([C1*1000,K5*1000,R2*100,V4*10,Y3]), Rad13 #= sum([C2*1000,L1*1000,R3*100,V5*10,Y4]), Rad14 #= sum([C3*1000,L2*1000,R3*100,V5*10,Y4]), Rad15 #= sum([C4*1000,L3*1000,R4*100,W1*10,Y4]), Rad16 #= sum([C5*1000,L4*1000,R4*100,W1*10,Y4]), Rad17 #= sum([D1*1000,L5*1000,R5*100,W2*10,Y5]), Rad18 #= sum([D2*1000,M1*1000,R5*100,W2*10,Y5]), Rad19 #= sum([D3*1000,M2*1000,S1*100,W3*10,Y5]), Rad20 #= sum([D4*1000,M3*1000,S1*100,W3*10,Y5]), Rad21 #= sum([D5*1000,M4*1000,S2*100,W4*10,Z1]), Rad22 #= sum([E1*1000,M5*1000,S2*100,W4*10,Z1]), Rad23 #= sum([E2*1000,N1*1000,S3*100,W5*10,Z1]), Rad24 #= sum([E3*1000,N2*1000,S3*100,W5*10,Z1]), Rad25 #= sum([E4*1000,N3*1000,S4*100,X1*10,Z2]), Rad26 #= sum([E5*1000,N4*1000,S4*100,X1*10,Z2]), Rad27 #= sum([F1*1000,N5*1000,S5*100,X2*10,Z2]), Rad28 #= sum([F2*1000,O1*1000,S5*100,X2*10,Z2]), Rad29 #= sum([F3*1000,O2*1000,T1*100,X3*10,Z3]), Rad30 #= sum([F4*1000,O3*1000,T1*100,X3*10,Z3]), Rad31 #= sum([F5*1000,O4*1000,T2*100,X4*10,Z3]), Rad32 #= sum([G1*1000,O5*1000,T2*100,X4*10,Z3]), Rad33 #= sum([G2*1000,P1*1000,T3*100,X5*10,Z4]), Rad34 #= sum([G3*1000,P2*1000,T3*100,X5*10,Z4]), Rad35 #= sum([G4*1000,P3*1000,T4*100,U1*10,Z4]), Rad36 #= sum([G5*1000,P4*1000,T4*100,U1*10,Z4]), Rad37 #= sum([H1*1000,P5*1000,T5*100,U2*10,Z5]), Rad38 #= sum([H2*1000,I1*1000,T5*100,U2*10,Z5]), Rad39 #= sum([H3*1000,I2*1000,Q1*100,U3*10,Z5]), Rad40 #= sum([H4*1000,I3*1000,Q1*100,U3*10,Z5]), Vars = AZ ++ Rad ++ A1_Z5, solve($[],Vars), println(az=AZ), println(rad=Rad), println(a1_z4=A1_Z5), nl, fail, nl.