Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %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.
- nabin(0, [0]):-!.
- nabin(1, [1]):-!.
- nabin(L, [H|T]) :- H is L mod 2, S is L div 2, nabin(S, T).
- bin(X, Y) :- nabin(X,Z), reverse(Z,Y).
- nadec([0], 0):-!.
- nadec([1], 1):-!.
- nadec([H|T], L) :- length(T, X), A is 2**X, Y is A*H, nadec(T, Z), L is Y+Z.
- wstaw(X, [], [X]):-!.
- wstaw(X, [H|T], [X, H|T] ) :- X<H,!.
- wstaw(X, [H|T], [H|T2] ) :- X>=H,wstaw(X,T,T2).
- wstawSort([X], [X]):-!.
- wstawSort([H|T], X) :- wstawSort(T, Y), wstaw(H, Y, X).
- wstawK(X, [], [X]):-!.
- wstawK(X-K, [H-M|T], [X-K, H-M|T] ) :- X<H,!.
- wstawK(X-K, [H-M|T], [H-M|T2] ) :- X>=H,wstawK(X-K,T,T2).
- wstawSortK([X], [X]):-!.
- wstawSortK([H|T], X) :- wstawSortK(T, Y), wstawK(H, Y, X).
- klucz(X, K) :- bin(X,Y), wstawSort(Y,Z), nadec(Z,K).
- koduj([], []):-!.
- koduj([H|T], [K-H|T2]) :- klucz(H, K), koduj(T, T2).
- dekoduj([], []):-!.
- dekoduj([_-H|T], [H|T2]) :- dekoduj(T, T2).
- zadanie(X, Y) :- koduj(X, Z), wstawSortK(Z,A), dekoduj(A,Y).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement