Advertisement
pavelperc

prolooooooog

Dec 19th, 2018
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.86 KB | None | 0 0
  1. % Place your solution here
  2.  
  3. % task 10
  4. % В одном городе живут 5 человек. Их имена Леонид, Михаил, Николай, Олег и Петр. Их фамилии Атаров, Бартенев, Кленов, Данилин и Иванов. Бартенев знаком только с двумя из перечисленных мужчин. Петр знаком со всеми, кроме одного. Леонид знаком только с одним из всех. Данилин и Михаил незнакомы. Николай и Иванов знают друг друга. Михаил, Николай и Олег знакомы между собой. Атаров незнаком только с одним из всех. Только один из всех знаком с Кленовым. Назовите имена и фамилии каждого. С кем знаком каждый из них?
  5.  
  6. %names: l m n o p
  7. %surnames: a b k d i
  8.  
  9.  
  10. knows(X, X).
  11. % knows(a,b).
  12.  
  13. %knows(X,Y):-
  14. %   knows(Y,X).
  15.  
  16. knows(n,m).
  17. knows(m,o).
  18. knows(n,o).
  19.  
  20. knowsMutual(X, Y):-
  21.     knows(X, Y),!;
  22.     knows(Y, X),!.
  23.    
  24. %knowsSeq(X, Y):-
  25. %   knowsMutual(X, Z),knowsMutual(Y,Z).
  26.    
  27.  
  28.  
  29. knows1(X, Y, Ans) :-
  30.     (knowsMutual(X, Y), Ans is 1,!;
  31.     \+ knowsMutual(X, Y), Ans is 0),!.
  32.    
  33.  
  34. count_knows(_,[],0).
  35.  
  36. count_knows(X, [Head|Tail],L):-
  37.     count_knows(X, Tail, L1),
  38.     knows1(X, Head, Fits),
  39.     L is L1+Fits,
  40.     !.
  41.  
  42. count_knows(l,[l,m,n,o,p],1).
  43. count_knows(p,[l,m,n,o,p],4).
  44.  
  45.  
  46. generate([A,B,K,D,I]) :-
  47.     Surnames=[A,B,K,D,I],
  48.     Names=[l,m,n,o,p],
  49.     permutation([l,m,n,o,p],[A,B,K,D,I]),
  50.     writeln("\n A,B,K,D,I"),
  51.     writeln([A,B,K,D,I]),
  52.     \+ knowsMutual(m, D),
  53.     %writeln(true),
  54.     knowsMutual(n,I),
  55.     writeln(true),
  56.     count_knows(K,[l,m,n,o,p],1),
  57.     %writeln(true),
  58.     count_knows(B,[l,m,n,o,p],2),
  59.     %writeln(true),
  60.     count_knows(A,[l,m,n,o,p],4).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement