Title: Jelly Beans
Solved by: Doug Edmunds
Publication: Dell Logic Puzzles
Issue: April, 1998
Page: 16
Stars: 3

Clues

/*
Dell Logic Puzzles 4/98 Edition p16
Title: Jelly Beans (3 star)
solved 17 Nov 1999

ages: 7 9 10 12
names: noah oscar patty rosie
guesses: 437 462 486 501
prizes: bear gift movie sundaes
place: 1 2 3 4

correct solution
guess(Rank, Name, Prize, Guess, Age)
guess(1, rosie, movie, 437, 12),
guess(2, patty, sundae, 462, 7),
guess(3, noah, gift, 486, 10),
guess(4, oscar, bear, 501, 9)
*/

:- use_module(library(fd)).
:- writeln("type: start(Units)").

start(Units) :-

Units =
[
guess(1,_,_,_,_),
guess(2,_,_,_,_),
guess(3,_,_,_,_),
guess(4,_,_,_,_)
],

[RN,RO,RP,RR,RBear,RGift,RMovie,RSundae,
R437, R462, R486, R501,R7,R9,R10,R12] ::[1..4],
[BR, B7] ::[437,462,486,501],
[AP, AR4,AMovie, A486,AN,A501] ::[7,9,10,12],

Constraints =
[
guess(RN,noah ,_,_,_),
guess(RO,oscar,_,_,_),
guess(RP,patty,_,_,_),
guess(RR,rosie,_,_,_),

guess(RBear ,_,bear ,_,_),
guess(RGift ,_,gift ,_,_),
guess(RMovie ,_,movie ,_,_),
guess(RSundae,_,sundae,_,_),

guess(R437,_,_,437,_),
guess(R462,_,_,462,_),
guess(R486,_,_,486,_),
guess(R501,_,_,501,_),

guess(R7 ,_,_,_,7 ),
guess(R9 ,_,_,_,9 ),
guess(R10 ,_,_,_,10),
guess(R12 ,_,_,_,12),

%add min

guess(_,patty,_ ,_ ,AP ),
guess(4,_ ,_ ,_ ,AR4 ),

guess(_,rosie,_ ,BR ,_ ),
guess(_,_ ,_ ,B7 ,7 ),

guess(_,_ ,movie,_ ,AMovie ),
guess(_,_ ,_ ,486 ,A486 ),

guess(_,noah ,_ ,_ ,AN ),
guess(_,_ ,_ ,501 ,A501 )
] ,

% ranking must be lowest 1 to highest last, if lowest guess is best
% but must be highest-first to lowest-last, if highest is best
% but insufficient info if either mid-count is best


(R437 #=1 -> (R462 #=2, R486 #=3, R501#=4);
(R501 #=1 -> (R486 #=2, R462 #=3, R437#=1);
writeln("shouldn't be here, insufficient info given"),true)),

%clue 1
RN #=R9-1,
RN #>RMovie,

%clue 2
B7 ## 486,

% clue 3
R462 ## RBear,
R462 ## 1,

% clue 4
RGift ## 4,
RGift ## R7,

%clue 5 older_than
AR4 #> AP,

%clue 6 more_beans_than
B7 #> BR,

%clue 7 older_than
AMovie #> A486,

%clue 8 not_youngest
AN ##7,

R9 ## R437,

%clue 10 older_than
A501 #>7,

psubset(Constraints, Units),
(foreach(Unit,Units) do writeln (Unit)).


psubset([],_).
psubset([H|T],List) :-
member(H,List),
psubset(T,List).


% © Copyright Doug Edmunds 2000