⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srq10.pl

📁 PRl教学程序 PRl教学程序 PRl教学程序
💻 PL
字号:
/*********************************************************************** * A solution to SRQ (Self-referential quizzes) implemented in B-Prolog * Solution similar to N-queens problem solutions.  * This involves only 10 FD variables in the domain 1..5. * Antonio J. Fernandez                       * *********************************************************************/q:- statistics(runtime,_),srq(L),     statistics(runtime,[_,Y]),    write(L), nl,    write('time : '), write(Y).srq(Q):-    Q=[Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10],    domain(Q,1,5),%%  Question 1      (Q1#=1)#<=>(Q4#=1)#/\(Q1#\=1)#/\(Q2#\=1)#/\(Q3#\=1),    (Q1#=2)#<=>(Q3#=1)#/\(Q1#\=1)#/\(Q2#\=1),    (Q1#=3)#<=>(Q2#=1)#/\(Q1#\=1),    (Q1#=4)#<=>(Q1#=1),    (Q1#=5)#<=>(Q1#\=1)#/\(Q2#\=1)#/\(Q3#\=1)#/\(Q4#\=1),%%  Question 2      (Q2#=1)#<=>(Q3#=Q4),    (Q2#=2)#<=>(Q4#=Q5),    (Q2#=3)#<=>(Q5#=Q6),    (Q2#=4)#<=>(Q6#=Q7),    (Q2#=5)#<=>(Q7#=Q8),%% Question 3     (Q3#=1)#<=>(Q4#=1),    (Q3#=2)#<=>(Q5#=1)#/\(Q4#\=1),    (Q3#=3)#<=>(Q6#=1)#/\(Q4#\=1)#/\(Q5#\=1),    (Q3#=4)#<=>(Q7#=1)#/\(Q4#\=1)#/\(Q5#\=1)#/\(Q6#\=1),    (Q3#=5)#<=>(Q8#=1)#/\(Q4#\=1)#/\(Q5#\=1)#/\(Q6#\=1)#/\(Q7#\=1),%% Question 4     (Q4#=1)#<=>(Q2#=2),    (Q4#=2)#<=>(Q4#=2)#/\(Q2#\=2),    (Q4#=3)#<=>(Q6#=2)#/\(Q2#\=2)#/\(Q4#\=2),    (Q4#=4)#<=>(Q8#=2)#/\(Q2#\=2)#/\(Q4#\=2)#/\(Q6#\=2),    (Q4#=5)#<=>(Q10#=2)#/\(Q2#\=2)#/\(Q4#\=2)#/\(Q6#\=2)#/\(Q8#\=2),%% Question 5     (Q5#=1)#<=>(Q1#=3),    (Q5#=2)#<=>(Q3#=3),    (Q5#=3)#<=>(Q5#=3),    (Q5#=4)#<=>(Q7#=3),    (Q5#=5)#<=>(Q9#=3),%% Question 6      Bef in 0..1, Aft in 0..1,    Bef #<=>(Q1#=4)#\/(Q2#=4)#\/(Q3#=4)#\/(Q4#=4)#\/(Q5#=4),    Aft #<=>(Q7#=4)#\/(Q8#=4)#\/(Q9#=4)#\/(Q10#=4),    SmD in 0..10,      exactly(SmD,Q,4),     (Q6#=1)#<=> Bef #/\ (#\ Aft),    (Q6#=2)#<=> Aft #/\ (#\ Bef),    (Q6#=3)#<=> Bef #/\ Aft,    (Q6#=4)#<=>(SmD#=0),    (Q6#=5)#<=>(Q6#=4),%%  Question 7     (Q7#=1)#<=>(Q5#=5)#/\(Q6#\=5)#/\(Q7#\=5)#/\(Q8#\=5)#/\(Q9#\=5)#/\(Q10#\=5),    (Q7#=2)#<=>(Q6#=5)#/\(Q7#\=5)#/\(Q8#\=5)#/\(Q9#\=5)#/\(Q10#\=5),    (Q7#=3)#<=>(Q7#=5)#/\(Q8#\=5)#/\(Q9#\=5)#/\(Q10#\=5),    (Q7#=4)#<=>(Q8#=5)#/\(Q9#\=5)#/\(Q10#\=5),    (Q7#=5)#<=>(Q9#=5)#/\(Q10#\=5),%%  Question 8     SmBCD in 0..10,    exactly(SmB,Q,2),    exactly(SmC,Q,3),    SmBCD #= SmB + SmC + SmD,    (Q8#=1)#<=>(SmBCD#=7),    (Q8#=2)#<=>(SmBCD#=6),    (Q8#=3)#<=>(SmBCD#=5),    (Q8#=4)#<=>(SmBCD#=4),    (Q8#=5)#<=>(SmBCD#=3),%%  Question 9          SmA in 0..10, SmE in 0..10, SmAE in 0..10,    10 #= SmAE + SmBCD,       (Q9#=1)#<=>(SmAE#=0),    (Q9#=2)#<=>(SmAE#=1),    (Q9#=3)#<=>(SmAE#=2),    (Q9#=4)#<=>(SmAE#=3),    (Q9#=5)#<=>(SmAE#=4),%%    10 #= SmAE + SmBCD,%% labeling.%%%%  FIRST FAIL%%    labeling([ff],Q).%%  MIN Size, More constrained.%%  labeling([ffc],Q).%%  NORMAL    labeling([],Q)./*****************************************************************************IMPORTANT.exactly(X,L,N) is true if X occurs exactly N times in the list L. ******************************************************************************/exactly(_, [], 0).exactly(X, [Y|L], N) :-    X #= Y #<=> B,    N #= M+B,    exactly(X, L, M).

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -