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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
/*-------------------------------------------------------------------------*/
/* Benchmark (Finite Domain) INRIA Rocquencourt - ChLoE Project */
/* */
/* Name : srq.pl */
/* Title : Self-Referential Quiz puzzle */
/* Original Source: M. Henz */
/* Adapted by : Daniel Diaz for GNU Prolog */
/* Date : February 1997 */
/* */
/* */
/* Q1 : the first question whose answer is A is */
/* (A) 4 (B) 3 (C) 2 (D) 1 (E) none of the above */
/* Q2 : the only two consecutive questions with identical answers are */
/* (A) 3 and 4 (B) 4 and 5 (C) 5 and 6 (D) 6 and 7 (E) 7 and 8*/
/* Q3 : the next question with answer A is */
/* (A) 4 (B) 5 (C) 6 (D) 7 (E) 8 */
/* Q4 : the first even numbered question with answer B is */
/* (A) 2 (B) 4 (C) 6 (D) 8 (E) 10 */
/* Q5 : the only odd numbered question with answer C is */
/* (A) 1 (B) 3 (C) 5 (D) 7 (E) 9 */
/* Q6 : a question with answer D */
/* (A) comes before this one but not after this one */
/* (B) comes after this one but not before this one */
/* (C) comes before and after this one */
/* (D) does not occur at all */
/* (E) none of the above */
/* Q7 : the last question whose answer is E is */
/* (A) 5 (B) 6 (C) 7 (D) 8 (E) 9 */
/* Q8 : the number of questions whose answers are conconants is */
/* (A) 7 (B) 6 (C) 5 (D) 4 (E) 3 */
/* Q9 : the number of questions whose answers are vowels is */
/* (A) 0 (B) 1 (C) 2 (D) 3 (E) 4 */
/* Q10: the answer of this question is */
/* (A) A (B) B (C) C (D) D (E) E */
/* */
/* Solution: */
/* [3,1,2,2,1,2,5,2,5,4] */
/* C,A,B,B,A,B,E,B,E,D */
/*-------------------------------------------------------------------------*/
q :-
get_fd_labeling(Lab),
statistics(runtime, _),
srq(L, Lab),
statistics(runtime, [_, Y]),
write(L),
nl,
write('time : '),
write(Y),
nl.
srq(L, Lab) :-
L = [Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10],
fd_domain(L, 1, 5),
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,
Q2 #= 1 #<=> Q3 #= Q4,
Q2 #= 2 #<=> Q4 #= Q5,
Q2 #= 3 #<=> Q5 #= Q6,
Q2 #= 4 #<=> Q6 #= Q7,
Q2 #= 5 #<=> Q7 #= Q8,
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,
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,
Q5 #= 1 #<=> Q1 #= 3 #/\ Q3 #\= 3 #/\ Q5 #\= 3 #/\ Q7 #\= 3 #/\ Q9 #\= 3,
Q5 #= 2 #<=> Q3 #= 3 #/\ Q1 #\= 3 #/\ Q5 #\= 3 #/\ Q7 #\= 3 #/\ Q9 #\= 3,
Q5 #= 3 #<=> Q5 #= 3 #/\ Q1 #\= 3 #/\ Q3 #\= 3 #/\ Q7 #\= 3 #/\ Q9 #\= 3,
Q5 #= 4 #<=> Q7 #= 3 #/\ Q1 #\= 3 #/\ Q2 #\= 3 #/\ Q5 #\= 3 #/\ Q9 #\= 3,
Q5 #= 5 #<=> Q9 #= 3 #/\ Q1 #\= 3 #/\ Q3 #\= 3 #/\ Q5 #\= 3 #/\ Q7 #\= 3,
BeforeQ4 #<=> Q1 #= 4 #\/ Q2 #= 4 #\/ Q3 #= 4 #\/ Q4 #= 4 #\/ Q5 #= 4,
AfterQ4 #<=> Q7 #= 4 #\/ Q8 #= 4 #\/ Q9 #= 4 #\/ Q10 #= 4,
Q6 #= 1 #<=> BeforeQ4 #/\ #\ AfterQ4,
Q6 #= 2 #<=> #\ BeforeQ4 #/\ AfterQ4,
Q6 #= 3 #<=> BeforeQ4 #/\ AfterQ4,
Q6 #= 4 #<=> Q1 #\= 4 #/\ Q2 #\= 4 #/\ Q3 #\= 4 #/\ Q4 #\= 4 #/\ Q5 #\= 4 #/\ Q6 #\= 4 #/\ Q7 #\= 4 #/\ Q8 #\= 4 #/\ Q9 #\= 4 #/\ Q10 #\= 4,
% Q6#=5 #<=> Q6#=4,
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,
BCD1 #<=> Q1 #>= 2 #/\ Q1 #=< 4,
AE1 #<=> #\ BCD1,
BCD2 #<=> Q2 #>= 2 #/\ Q2 #=< 4,
AE2 #<=> #\ BCD2,
BCD3 #<=> Q3 #>= 2 #/\ Q3 #=< 4,
AE3 #<=> #\ BCD3,
BCD4 #<=> Q4 #>= 2 #/\ Q4 #=< 4,
AE4 #<=> #\ BCD4,
BCD5 #<=> Q5 #>= 2 #/\ Q5 #=< 4,
AE5 #<=> #\ BCD5,
BCD6 #<=> Q6 #>= 2 #/\ Q6 #=< 4,
AE6 #<=> #\ BCD6,
BCD7 #<=> Q7 #>= 2 #/\ Q7 #=< 4,
AE7 #<=> #\ BCD7,
BCD8 #<=> Q8 #>= 2 #/\ Q8 #=< 4,
AE8 #<=> #\ BCD8,
BCD9 #<=> Q9 #>= 2 #/\ Q9 #=< 4,
AE9 #<=> #\ BCD9,
BCD10 #<=> Q10 #>= 2 #/\ Q10 #=< 4,
AE10 #<=> #\ BCD10,
BCD #= BCD1 + BCD2 + BCD3 + BCD4 + BCD5 + BCD6 + BCD7 + BCD8 + BCD9 + BCD10,
AE #= AE1 + AE2 + AE3 + AE4 + AE5 + AE6 + AE7 + AE8 + AE9 + AE10,
Q8 #= 1 #<=> BCD #= 7,
Q8 #= 2 #<=> BCD #= 6,
Q8 #= 3 #<=> BCD #= 5,
Q8 #= 4 #<=> BCD #= 4,
Q8 #= 5 #<=> BCD #= 3,
Q9 #= 1 #<=> AE #= 0,
Q9 #= 2 #<=> AE #= 1,
Q9 #= 3 #<=> AE #= 2,
Q9 #= 4 #<=> AE #= 3,
Q9 #= 5 #<=> AE #= 4,
lab(Lab, L).
lab(normal, L) :-
fd_labeling(L).
lab(ff, L) :-
fd_labelingff(L).
get_fd_labeling(Lab) :-
argument_counter(C),
get_labeling1(C, Lab).
get_labeling1(1, normal).
get_labeling1(2, Lab) :-
argument_value(1, Lab).
:- initialization(q).
|