Advertisement
Guest User

Untitled

a guest
Apr 15th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.75 KB | None | 0 0
  1. zapalki(N,(srednie(Y),male(Z))):-
  2.     generuj(N,(duze(0),srednie(Y),male(Z))).
  3. zapalki(N,(duze(X),srednie(Y))):-
  4.     generuj(N,(duze(X),srednie(Y),male(0))).
  5. zapalki(N,(duze(X),male(Z))):-
  6.     generuj(N,(duze(X),srednie(0),male(Z))).
  7. zapalki(N,(duze(X))):-
  8.     generuj(N,(duze(X),srednie(0),male(0))).
  9. zapalki(N,(srednie(Y))):-
  10.     generuj(N,(duze(0),srednie(Y),male(0))).
  11. zapalki(N,(male(Z))):-
  12.     generuj(N,(duze(0),srednie(0),male(Z))).
  13. zapalki(N,(duze(X),srednie(Y),male(Z))):-
  14.     generuj(N,(duze(X),srednie(Y),male(Z))).
  15.  
  16. generuj(N,(duze(X),srednie(Y),male(Z))):-
  17.     gen_duz(X,Wynik),
  18.     gen_sre(Y,Wynik,Wynik2),
  19.     gen_mal(Z,Wynik2, Wynik3),
  20.     length(Wynik3,Z1),
  21.     N is 24 - Z1,
  22.     rysuj(Wynik3).
  23.  
  24. rysuj(X):-
  25.     linia1(X,0),
  26.     linia2(X,0),
  27.     linia1(X,1),
  28.     linia2(X,1),
  29.     linia1(X,2),
  30.     linia2(X,2),
  31.     linia1(X,3),
  32.     nl.
  33.  
  34. linia2(X,N):-
  35.     A is 12+N, B is 15+N, C is 18+N, D is 21 + N,
  36.     (   member(A,X) -> write('|');tab(1)),
  37.     tab(3),
  38.     (   member(B,X) -> write('|');tab(1)),
  39.     tab(3),
  40.     (   member(C,X) -> write('|');tab(1)),
  41.     tab(3),
  42.     (   member(D,X) -> write('|');tab(1)),
  43.     tab(3),nl.
  44.  
  45. linia1(X,N):-
  46.     write('+'),
  47.     A is N*3, B is N*3+1, C is N*3+2,
  48.     (   member(A,X) -> write('---');tab(3)),
  49.     write('+'),
  50.     (   member(B,X) -> write('---');tab(3)),
  51.     write('+'),
  52.     (   member(C,X) -> write('---');tab(3)),
  53.     write('+'),nl.
  54.  
  55. spr_duze(Old, New):-
  56.     Duzy=[0,1,2,9,10,11,12,13,14,21,22,23],
  57.     (intersection(Duzy,Old,Duzy) -> true; \+ intersection(Duzy,New,Duzy)).
  58.  
  59. spr_sre(Old, New):-
  60.     Sr=[[0,1,6,7,12,13,18,19],[1,2,7,8,15,16,21,22],[3,4,9,10,13,14,19,20],[4,5,10,11,16,17,22,23]],
  61.     \+ (select(X,Sr,_), (union(X,Old,Old) -> false; union(X,New,New))).
  62.  
  63. gen_duz(0,[]).
  64. gen_duz(1,Wynik):-
  65.     Wynik=[0,1,2,9,10,11,12,13,14,21,22,23].
  66.  
  67. gen_sre(N,Tab,Wynik):-
  68.        Sr=[[0,1,6,7,12,13,18,19],[1,2,7,8,15,16,21,22],[3,4,9,10,13,14,19,20],[4,5,10,11,16,17,22,23]],
  69.        gen_sre(N,Tab,Sr,Wynik).
  70.  
  71. gen_sre(X,Tab,_,Tab):-X=:=0,!.
  72. gen_sre(N,Tab,[X|Rest],Wynik):-
  73.     union(X,Tab,Y),
  74.     spr_duze(Tab,Y),
  75.     gen_sre(N-1,Y,Rest,Wynik).
  76. gen_sre(N,Tab,[_|Rest],Wynik):-
  77.     gen_sre(N,Tab,Rest,Wynik).
  78.  
  79.  
  80. licz_mal(Tab, Wynik):-
  81.     Ml=[[0,3,12,15],[1,4,15,18],[2,5,18,21],[3,6,13,16],[4,7,16,19],[5,8,19,22],[6,9,14,17],[7,10,17,20],[8,11,20,23]],
  82.     licz_mal(Tab,Ml,Ml,Wynik).
  83.  
  84. licz_mal(_,[], W, W).
  85. licz_mal(Tab, [X|Rest], Y, W):-
  86.     (union(X,Tab,Tab) ->(select(X,Y,Y1),
  87.     licz_mal(Tab, Rest, Y1, W));
  88.     licz_mal(Tab,Rest,Y,W)).
  89.  
  90. gen_mal(N,Tab,Wynik):-
  91.     licz_mal(Tab, W),
  92.     gen_mal(N, Tab, W, Wynik).
  93.  
  94. gen_mal(N, Tab, _, Wynik):-
  95.     licz_mal(Tab,Z),
  96.     length(Z,X),
  97.     N =:= 9-X,
  98.     Wynik = Tab,!.
  99.  
  100. gen_mal(N, Tab, [X|Rest], Wynik):-
  101.     union(X,Tab,Y),
  102.     spr_duze(Tab,Y),
  103.     spr_sre(Tab,Y),
  104.     gen_mal(N,Y,Rest,Wynik).
  105.  
  106. gen_mal(N, Tab, [_|Rest], Wynik):-
  107.     gen_mal(N,Tab,Rest,Wynik).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement