Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 17th, 2012  |  syntax: None  |  size: 1.77 KB  |  hits: 17  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Password checking with prolog/2
  2. contains_letter(Password) :- wildcard_match('*[a-zA-Z]*', Password).
  3.  
  4. contains_number(Password) :- wildcard_match('*[0-9]*', Password).
  5.  
  6. contains_double_letter(Password) :-
  7.     (between(65, 90, Letter) ; between(97, 122, Letter)),
  8.     append([_, [Letter, Letter], _], Password),
  9.     !.
  10.  
  11. starts_with_letter(Password) :- wildcard_match('[a-zA-Z]*', Password).
  12.  
  13. long_enough(Password) :-
  14.     length(Password, Length),
  15.     Length >= 6.
  16.  
  17. check_everything(Password) :-
  18.     contains_letter(Password),
  19.     contains_number(Password),
  20.     contains_double_letter(Password),
  21.     starts_with_letter(Password),
  22.     long_enough(Password).
  23.        
  24. uniq([], []).
  25. uniq([X], [X]).
  26. uniq([X,X|L], R) :-
  27.      !,
  28.      uniq([X|L], R).
  29. uniq([X,Y|L], [X|R]) :-
  30.      uniq([Y|L], R).
  31.        
  32. lengthWithDoubleLetters([],0).
  33. lengthWithDoubleLetters([F,F|T],C) :-
  34.     lengthWithDoubleLetters(T,TC),
  35.     !,
  36.     C is TC + 1.
  37. lengthWithDoubleLetters([H|T], C) :-
  38.     lengthWithDoubleLetters(T,TC),
  39.     C is TC + 1.
  40.        
  41. contains_letter(Password) :- wildcard_match('*[a-zA-Z]*', Password).
  42.  
  43. contains_number(Password) :- wildcard_match('*[0-9]*', Password).
  44.  
  45. starts_with_letter(Password) :- wildcard_match('[a-zA-Z]*', Password).
  46.        
  47. letter_start_and_number(Password) :-
  48.     wildcard_match('[a-zA-Z]*[0-9]*', Password).
  49.        
  50. length_double_letters([], Acc, yes, Acc).
  51. length_double_letters([Char, Char|Password], Acc, _Contains, Length) :-
  52.     !,
  53.     NewAcc is Acc + 1,
  54.     length_double_letters(Password, NewAcc, yes, Length).
  55. length_double_letters([_Char|Password], Acc, Contains, Length) :-
  56.     NewAcc is Acc + 1,
  57.     length_double_letters(Password, NewAcc, Contains, Length).
  58.        
  59. check_everything(Password) :-
  60.     letter_start_and_number(Password),
  61.     length_double_letters(Password, 0, no, Length),
  62.     Length >= 6.