Advertisement
Guest User

#3 Zadanie od jerzyka

a guest
Jun 7th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.22 KB | None | 0 0
  1. %Prolog. Nasze zadanie - masz listę liczb, liczby konwertujesz na binarne, przesuwasz jedynki w prawo, konwertujesz z powrotem na dziesiętne i to jest klucz. Przykład: 20 -> 10100; jedynki w prawo: 00011; na dziesiętne: 3 - to jest nasz klucz. To samo dla pozostałych liczb w liście i sortujemy.
  2.  
  3. nabin(0, [0]):-!.
  4. nabin(1, [1]):-!.
  5. nabin(L, [H|T]) :- H is L mod 2, S is L div 2, nabin(S, T).
  6.  
  7. bin(X, Y) :- nabin(X,Z), reverse(Z,Y).
  8.  
  9. nadec([0], 0):-!.
  10. nadec([1], 1):-!.
  11. nadec([H|T], L) :- length(T, X), A is 2**X, Y is A*H, nadec(T, Z), L is Y+Z.
  12.  
  13. wstaw(X, [], [X]):-!.
  14. wstaw(X, [H|T], [X, H|T] ) :- X<H,!.
  15. wstaw(X, [H|T], [H|T2] ) :- X>=H,wstaw(X,T,T2).
  16.  
  17. wstawSort([X], [X]):-!.
  18. wstawSort([H|T], X) :- wstawSort(T, Y), wstaw(H, Y, X).
  19.  
  20. wstawK(X, [], [X]):-!.
  21. wstawK(X-K, [H-M|T], [X-K, H-M|T] ) :- X<H,!.
  22. wstawK(X-K, [H-M|T], [H-M|T2] ) :- X>=H,wstawK(X-K,T,T2).
  23.  
  24. wstawSortK([X], [X]):-!.
  25. wstawSortK([H|T], X) :- wstawSortK(T, Y), wstawK(H, Y, X).
  26.  
  27.  
  28. klucz(X, K) :- bin(X,Y), wstawSort(Y,Z), nadec(Z,K).
  29.  
  30. koduj([], []):-!.
  31. koduj([H|T], [K-H|T2]) :- klucz(H, K), koduj(T, T2).
  32.  
  33. dekoduj([], []):-!.
  34. dekoduj([_-H|T], [H|T2]) :- dekoduj(T, T2).
  35.  
  36.  
  37. zadanie(X, Y) :- koduj(X, Z), wstawSortK(Z,A), dekoduj(A,Y).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement