Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 0.88 KB | None | 0 0
  1. num(0).
  2. num(1).
  3. num(2).
  4. num(3).
  5. num(4).
  6. num(5).
  7. num(6).
  8. num(7).
  9. num(8).
  10. num(9).
  11.  
  12. key([K1,K2,K3]) :- num(K1),num(K2),num(K3).
  13.  
  14. right_numbers([], [], 0).
  15. right_numbers([S|As], [S|Ss], R) :- right_numbers(As, Ss, R2), R is R2+1.
  16. right_numbers([A|As], [S|Ss], R) :- A \= S, right_numbers(As, Ss, R).
  17.  
  18. exact_try(Attempt, Secret, R) :- key(Attempt),
  19.                                  key(Secret),
  20.                                  right_numbers(Attempt, Secret, R).
  21.  
  22. lazy_try(Attempt, Secret, R) :- key(Attempt),
  23.                                 key(Secret),
  24.                                 intersection(Attempt, Secret, Intersection),
  25.                                 length(Intersection, R).
  26.  
  27. try(Attempt, Secret, R1, R2) :- exact_try(Attempt, Secret, R1),
  28.                                 lazy_try(Attempt, Secret, R2).
  29.  
  30. crack(Secret) :- try([6,8,2], Secret, 1, 1),
  31.                 try([6,1,4], Secret, 0, 1),
  32.                 try([2,0,6], Secret, 0, 2),
  33.                 try([7,3,8], Secret, 0, 0),
  34.                 try([7,8,0], Secret, 0, 1).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement