% Author: Alex Roque % Assignment #: 4 % Due Date: 10/25/01 % Program Title: 66 Hairy Business % Program Description: This assignment solves puzzle 66 % % I certify that this is my work and have not consulted with anyone else. % % % go:- solution(List). solution(List):- List = [ item(brad,_,_,_,_,_), item(josh,_,_,_,_,_), item(noah,_,_,_,_,_), item(lauren,_,_,_,_,_), item(marissa,_,_,_,_,_), item(serena,_,_,_,_,_) ], % list the times member(item(_,t5_55,_,_,_,_),List), member(item(_,t6_20,_,_,_,_),List), member(item(_,t6_45,_,_,_,_),List), member(item(_,t7_10,_,_,_,_),List), member(item(_,t7_35,_,_,_,_),List), member(item(_,t8_00,_,_,_,_),List), % list the brands member(item(_,_,shimmer,_,_,_),List), member(item(_,_,follicle,_,_,_),List), member(item(_,_,coif,_,_,_),List), member(item(_,_,glisten,_,_,_),List), member(item(_,_,wave,_,_,_),List), member(item(_,_,luster,_,_,_),List), % list the ingredients member(item(_,_,_,aloe,_,_),List), member(item(_,_,_,beer,_,_),List), member(item(_,_,_,coconut,_,_),List), member(item(_,_,_,mint,_,_),List), member(item(_,_,_,peach,_,_),List), member(item(_,_,_,vitaminE,_,_),List), % list the extracts member(item(_,_,_,_,carnation,_),List), member(item(_,_,_,_,honeySuckle,_),List), member(item(_,_,_,_,lavender,_),List), member(item(_,_,_,_,lilac,_),List), member(item(_,_,_,_,marigold,_),List), member(item(_,_,_,_,rose,_),List), % list the object member(item(_,_,_,_,_,scrubBrush),List), member(item(_,_,_,_,_,soapRope),List), member(item(_,_,_,_,_,rubberDuckie),List), member(item(_,_,_,_,_,radio),List), member(item(_,_,_,_,_,razor),List), member(item(_,_,_,_,_,washcloth),List), conditions(List), nl, tab(10), write('Solution to the Hairy Business Puzzle'), nl, tab(10), write('====================================='), nl,nl, print_list(List). conditions(List) :- condition1(List),condition2(List),condition3(List), condition4(List),condition5(List),condition6(List), condition7(List). %member(Item,List) is satisfied if Item is in List member(Item, [Item|_]). member(Item,[_|Tail]):- member(Item,Tail). % the gender predicate gender(brad,male). gender(josh,male). gender(noah,male). gender(lauren,female). gender(marissa,female). gender(serena,female). % print_list(L) prints the list print_list([]). print_list([Item|Tail]):- print_item(Item), print_list(Tail). % print_item(Item) prints the item print_item(item(Person,Time,Brand,Ingredient,Extract,Object)):- nl, write(Person),write(' takes a shower at '), write(Time), write(' and uses the '), write(Brand), write(' brand which has '),write(Ingredient), write(' ingredient and '),write(Extract), write(' extract.'), nl, write(Person),write(' has a '),write(Object), write(' in the shower caddy. '). condition1(List):- % The one who keeps a scrub brush handy(who doesn't use lavender-extract shampoo) % is neither Serena (who doesn't use use Shimmer) nor the one who showers % at 7:10 am. member(item(Person1,_,_,_,_,scrubBrush),List), Person1\==serena, member(item(Person2,_,_,_,lavender,_),List), Person1\==Person2, member(item(serena,_,Brand1,_,_,_),List), Brand1\==shimmer, member(item(Person3,t7_10,_,_,_,_),List), Person1\==Person3, Person3\==serena, % The shampoo with peach juice doesn't contain lavender. member(item(_,_,Brandx,peach,_,_),List), member(item(_,_,Brandy,_,lavender,_),List), Brandx\==Brandy. condition2(List):- % Neither Brad(whose shampoo deosn't contain mint) % nor Josh uses the honeysuckle shampoo. member(item(brad,_,_,Ingre1,_,_),List), Ingre1\==mint, member(item(josh,_,_,_,Extract1,_),List), Extract1\==honeySuckle, member(item(brad,_,_,_,Extract2,_),List), Extract2\==honeySuckle, member(item(lauren,_,_,_,Extract3,_),List), Extract3\==marigold, member(item(Person1,_,coif,_,_,_),List), member(item(Person2,_,_,_,_,razor),List), Person1\==Person2, %OR clause % Lauren and the one who uses the marigold shampoo % are the Coif user and the one who keeps a razor in % the shower, in some order. member(item(lauren,_,coif,_,_,_),List), member(item(_,_,_,_,marigold,razor),List); [member(item(lauren,_,_,_,_,razor),List), member(item(_,_,coif,_,marigold,_),List)]. condition3(List):- % Marissa and the one whose shampoo is made with aloe % are the one who showers at 5:55am. % and the one who uses the rose-extract shampoo, in some order. member(item(marissa,_,_,Ingre1,_,_),List), Ingre1\==aloe, %OR clause member(item(marissa,t5_55,_,_,_,_),List), member(item(_,_,_,aloe,rose,_),List); [member(item(marissa,_,_,_,rose,_),List), member(item(_,t5_55,_,aloe,_,_),List)], % The one who uses Follicle isn't the one who keeps soap on a rope in the % shower. The one who uses Coif(who isn't Serena) doesn't shower at 5:55am. member(item(_,_,follicle,_,_,Object1),List), Object1\==soapRope, member(item(Person1,_,coif_,_,_),List), Person1\==serena, member(item(Person2,t5_55,_,_,_,_),List), Person1\==Person2. condition4(List):- member(item(Person1,_,glisten,_,_,_),List), member(item(Person2,_,_,_,lavender,_),List), Person1\==Person2, % The ones who keep the rubber duckie, radio, and scrub brush % in the shower are the one who uses Glisten, the one who uses the lavender shampoo, % and someone who ins't Noah, in some order. member(item(_,_,glisten,_,_,rubberDuckie),List), member(item(_,_,_,_,lavender,radio),List), member(item(Person,_,_,_,_,scrubBrush),List), Person\==noah; [member(item(_,_,_,_,lavender,rubberDuckie),List), member(item(Person1,_,_,_,_,radio),List), Person1\==noah, member(item(_,_,glisten,_,_,scrubBrush),List)]; [member(item(Person2,_,_,_,_,rubberDuckie),List), Person2\==noah, member(item(_,_,glisten,_,_,radio),List), member(item(_,_,_,_,lavender,scrubBrush),List)], % The housemates who use Glisten and the aloe shampoo are of different genders. member(item(Person3,_,_,aloe,_,_),List), Person1\==Person3, [member(item(PersonX,_,glisten,_,_,_),List), member(item(PersonY,_,_,aloe,_,_),List), gender(PersonX,male), gender(PersonY,female)]; [member(item(PersonX,_,glisten,_,_,_),List), member(item(PersonY,_,_,aloe,_,_),List), gender(PersonX,female), gender(PersonY,male)]. condition5(List):- % The 3 women are the one showers at 8:00 am, % the one who uses the marigold shampoo, and the one whose shampoo is made with % coconut oil. [member(item(Woman1,t8_00,_,_,_,_),List), gender(Woman1,female), member(item(Woman2,_,_,_,marigold,_),List), gender(Woman2,female), member(item(Woman3,_,_,coconut,_,_),List), gender(Woman3,female)]; [member(item(Woman1,_,_,_,marigold,_),List), gender(Woman1,female), member(item(Woman2,_,_,coconut,_,_),List), gender(Woman2,female), member(item(Woman3,t8_00,_,_,_,_),List), gender(Woman3,female)]; [member(item(Woman1,_,_,coconut,_,_),List), gender(Woman1,female), member(item(Woman2,t8_00,_,_,_,_),List), gender(Woman2,female), member(item(Woman3,_,_,_,marigold,_),List), gender(Woman3,female)], member(item(Persona1,t8_00,_,_,_,_),List), member(item(Persona2,_,_,_,marigold,_),List), Persona1\==Persona2, member(item(Persona3,_,_,coconut,_,_),List), Persona3\==Persona1, Persona2\==Persona3, % The honeysuckle shampoo and the one made with beer are used by people of different genders. member(item(PersonX,_,_,_,honeySuckle,_),List), member(item(PersonY,_,_,beer,_,_),List), PersonX\==PersonY, gender(PersonX,Gender1), gender(PersonY,Gender2), Gender1\==Gender2, % The ones who shower at 6:45 am and 7:10 am are of different genders. member(item(PersonA,t6_45,_,_,_,_),List), member(item(PersonB,t7_10,_,_,_,_),List), gender(PersonA,GenderA), gender(PersonB,GenderB), GenderA\==GenderB. condition6(List):- % The one who uses the lilac shampoo and the one who keeps the razor % in the shower are the person who uses Shimmer and a woman % (who isnt Marissa, and who doesn't use the marigold shampoo), in some order. member(item(Person1,_,_,_,lilac,_),List), member(item(Person2,_,_,_,_,razor),List), Person1\==Person2, member(item(PersonA,shimmer,_,_,Extract1,_),List), PersonA\==marissa, Extract1\==marigold, % OR clause [member(item(_,_,shimmer,_,lilac,_),List), member(item(Persona1,_,_,_,_,razor),List), Persona1\==marissa, gender(Persona1,female)]; [member(item(_,_,shimmer,_,_,razor),List), member(item(Persona1,_,_,_,lilac,_),List), Persona1\==marissa, gender(Persona1,female)], member(item(PersonX,_,_,vitaminE,_,_),List), member(item(PersonY,_,_,_,_,washcloth),List), PersonX\==PersonY, % Of the shampoo made with vitamin E and the one used by the person who keeps a washcloth in the shower, at least one % contains either carnation or lilac extract. member(item(_,_,_,vitaminE,carnation,_),List); member(item(_,_,_,vitaminE,lilac,_),List); member(item(_,_,_,_,carnation,washcloth),List); member(item(_,_,_,_,lilac,washcloth),List). condition7(List):- % The six housemates are the only redhead, Lauren, the one who showers at 6:20 am, the one who uses % the rose-extract shampoo, the one who uses the shampoo made with beer, and the one who keeps the radio in the % shower( who uses neither Wave nor Follicle). Noah and the one who uses the carnation shampoo and the one who keeps % the rubber duckie in the shower in some order. [member(item(Person1,_,wave,_,_,_),List), member(item(Person3,t6_20,_,_,_,_),List), member(item(Person4,_,_,_,rose,_),List), member(item(Person5,_,_,beer,_,_),List), member(item(Person6,_,Shampoo6,_,_,radio),List), Shampoo6\==wave, Shampoo6\==follicle, Person1\==lauren, Person1\==Person3, Person1\==Person4, Person1\==Person5, Person1\==Person6, Person3\==lauren, Person4\==lauren, Person5\==lauren, Person6\==lauren, Person3\==Person4, Person3\==Person5, Person3\==Person6, Person4\==Person5, Person4\==Person6, Person5\==Person6]; [member(item(Person1,_,luster,_,_,_),List), member(item(Person3,t6_20,_,_,_,_),List), member(item(Person4,_,_,_,rose,_),List), member(item(Person5,_,_,beer,_,_),List), member(item(Person6,_,Shampoo6,_,_,radio),List), Shampoo6\==wave, Shampoo6\==follicle, Person1\==lauren, Person1\==Person3, Person1\==Person4, Person1\==Person5, Person1\==Person6, Person3\==lauren, Person4\==lauren, Person5\==lauren, Person6\==lauren, Person3\==Person4, Person3\==Person5, Person3\==Person6, Person4\==Person5, Person4\==Person6, Person5\==Person6], member(item(PersonA,t6_45,_,_,_,_),List), PersonA\==noah, member(item(PersonB,_,_,_,carnation,_),List), member(item(PersonC,_,_,_,_,rubberDuckie),List), PersonB\==PersonC, [member(item(noah,_,_,_,carnation,_),List), member(item(_,t6_45,_,_,_,rubberDuckie),List)]; [member(item(noah,_,_,_,_,rubberDuckie),List), member(item(_,t6_45,_,_,carnation,_),List)].