久しぶりにProject Eulerやってみました。
制約論理プログラミングで解きました。ほとんど頭使ってない…
SWI-Prologです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
:-use_module(library(clpfd)). solve(A,Len):- length(A,Len), A ins 0..9, choice(A,[3,1,9],IdxLst1,Len), choice(A,[6,8,0],IdxLst2,Len), choice(A,[1,8,0],IdxLst3,Len), choice(A,[6,9,0],IdxLst4,Len), choice(A,[1,2,9],IdxLst5,Len), choice(A,[6,2,0],IdxLst6,Len), choice(A,[7,6,2],IdxLst7,Len), choice(A,[6,8,9],IdxLst8,Len), choice(A,[7,6,2],IdxLst9,Len), choice(A,[3,1,8],IdxLst10,Len), choice(A,[3,6,8],IdxLst11,Len), choice(A,[7,1,0],IdxLst12,Len), choice(A,[7,2,0],IdxLst13,Len), choice(A,[7,1,0],IdxLst14,Len), choice(A,[6,2,9],IdxLst15,Len), choice(A,[1,6,8],IdxLst16,Len), choice(A,[1,6,0],IdxLst17,Len), choice(A,[6,8,9],IdxLst18,Len), choice(A,[7,1,6],IdxLst19,Len), choice(A,[7,3,1],IdxLst20,Len), choice(A,[7,3,6],IdxLst21,Len), choice(A,[7,2,9],IdxLst22,Len), choice(A,[3,1,6],IdxLst23,Len), choice(A,[7,2,9],IdxLst24,Len), choice(A,[7,2,9],IdxLst25,Len), choice(A,[7,1,0],IdxLst26,Len), choice(A,[7,6,9],IdxLst27,Len), choice(A,[2,9,0],IdxLst28,Len), choice(A,[7,1,9],IdxLst29,Len), choice(A,[6,8,0],IdxLst30,Len), choice(A,[3,1,8],IdxLst31,Len), choice(A,[3,8,9],IdxLst32,Len), choice(A,[1,6,2],IdxLst33,Len), choice(A,[2,8,9],IdxLst34,Len), choice(A,[1,6,2],IdxLst35,Len), choice(A,[7,1,8],IdxLst36,Len), choice(A,[7,2,9],IdxLst37,Len), choice(A,[3,1,9],IdxLst38,Len), choice(A,[7,9,0],IdxLst39,Len), choice(A,[6,8,0],IdxLst40,Len), choice(A,[8,9,0],IdxLst41,Len), choice(A,[3,6,2],IdxLst42,Len), choice(A,[3,1,9],IdxLst43,Len), choice(A,[7,6,0],IdxLst44,Len), choice(A,[3,1,6],IdxLst45,Len), choice(A,[7,2,9],IdxLst46,Len), choice(A,[3,8,0],IdxLst47,Len), choice(A,[3,1,9],IdxLst48,Len), choice(A,[7,2,8],IdxLst49,Len), choice(A,[7,1,6],IdxLst50,Len), label(A). choice(A,[P1,P2,P3],[N1,N2,N3],Cnt):- [N1,N2,N3] ins 1..Cnt, element(N1,A,P1), element(N2,A,P2), element(N3,A,P3), N1 #< N2, N2 #< N3. |
回答伏せます