Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1.  
  2. goodgrid([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]).
  3. isRight(X) :- goodgrid(X).
  4.  
  5.  
  6.  
  7. main(Grid, NewGrid, L) :-
  8. solve(1, Grid, NewGrid, L).
  9.  
  10.  
  11. solve(N,[], [H2|T2], L) :- L = [H2|T2].
  12.  
  13. solve(N, [H|T], [H2|T2], L) :-
  14. (H2 =:= 1 -> NewC is N+5, getposition(5,N,X,Y),
  15. write('('),write(X),write(','),write(Y), write(')'), nl,
  16.  
  17. M is NewC mod 5,
  18. click(M, NewC, [H2|T2], NewGrid),
  19. write(NewGrid),
  20.  
  21. NewN is N+1, solve(NewN, T, NewGrid, L); NewN is N+1, solve(NewN, T, [H2|T2], L)).
  22.  
  23.  
  24.  
  25. getposition(Size, Pos, Row, Column) :-
  26. X is truncate(Pos / Size),
  27. (Pos mod Size > 0, !, Row is X + 1;Row is X),
  28. Y is Pos - X * Size,
  29. (Y =:= 0, !, Column is Size;Column is Y).
  30.  
  31. flip(X, New) :-
  32. (X =:= 0, !, New is 1; New is 0).
  33.  
  34.  
  35.  
  36. click(M,Pos,Grid,Newgrid) :-
  37. (M =:= 0,
  38. NewPos1 is Pos-5, flipPos(1,NewPos1,Grid,Temp1),
  39. NewPos2 is Pos-1, flipPos(1,NewPos2,Temp1,Temp2),
  40. NewPos3 is Pos, flipPos(1,NewPos3,Temp2,Temp3),
  41. NewPos5 is Pos+5, flipPos(1,NewPos5,Temp3,Newgrid); true),
  42.  
  43. (M =:= 1,
  44. NewPos1 is Pos-5, flipPos(1,NewPos1,Grid,Temp1),
  45. NewPos3 is Pos, flipPos(1,NewPos3,Temp1,Temp2),
  46. NewPos4 is Pos+1, flipPos(1,NewPos4,Temp2,Temp3),
  47. NewPos5 is Pos+5, flipPos(1,NewPos5,Temp3,Newgrid); true),
  48.  
  49. (M > 1,
  50. NewPos1 is Pos-5, flipPos(1,NewPos1,Grid,Temp1),
  51. NewPos2 is Pos-1, flipPos(1,NewPos2,Temp1,Temp2),
  52. NewPos3 is Pos, flipPos(1,NewPos3,Temp2,Temp3),
  53. NewPos4 is Pos+1, flipPos(1,NewPos4,Temp3,Temp4),
  54. NewPos5 is Pos+5, flipPos(1,NewPos5,Temp4,Newgrid); true).
  55.  
  56.  
  57.  
  58. flipPos(Count,Pos,[],[]).
  59.  
  60. flipPos(Count,Pos,[H|T],[H2|T2]) :-
  61. (Pos = Count -> flip(H, New), H2 = New; H2 = H),
  62. Count2 is Count+1,
  63. flipPos(Count2,Pos,T,T2).
  64.  
  65.  
  66. getBottomRow([H|T],Row,19) :- Row = T.
  67. getBottomRow([H|T],Row,Count) :- (Count<20 -> C is Count+1,getBottomRow(T,Row,C)).
  68.  
  69. patternMatch(Pat,Ans) :- (Pat = [1,0,0,0,1] -> Ans = [1,2]). %[1,1,0,0,0]
  70. patternMatch(Pat,Ans) :- (Pat = [0,1,0,1,0] -> Ans = [1,4]). %[1,0,0,1,0]
  71. patternMatch(Pat,Ans) :- (Pat = [1,1,1,0,0] -> Ans = [2]). %[0,1,0,0,0]
  72. patternMatch(Pat,Ans) :- (Pat = [0,0,1,1,1] -> Ans = [4]). %[0,0,0,1,0]
  73. patternMatch(Pat,Ans) :- (Pat = [1,0,1,1,0] -> Ans = [5]). %[0,0,0,0,1]
  74. patternMatch(Pat,Ans) :- (Pat = [0,1,1,0,1] -> Ans = [1]). %[1,0,0,0,0]
  75. patternMatch(Pat,Ans) :- (Pat = [1,1,0,1,1] -> Ans = [3]). %[0,0,1,0,0]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement