Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :- dynamic current_index/1.
- assert(current_index(0)).
- listMove(List, Index, 0, Value) :-
- !.
- listMove(List, Index, Count, Value) :-
- nth0(Index, List, Value),
- writeln(Value),
- NewIndex is Index + 1,
- length(List, L),
- CheckedIndex is NewIndex mod L,
- NewCount is Count - 1,
- listMove(List, CheckedIndex, NewCount, NewValue).
- replace([_|T], 0, X, [X|T]).
- replace([H|T], I, X, [H|R]):- I > -1, NI is I-1, replace(T, NI, X, R), !.
- replace(L, _, _, L).
- listUpdate(NewList, Index, 0, _, ListOut, IndexOut) :-
- ListOut = NewList,
- IndexOut is Index - 1,
- !.
- listUpdate(List, Index, Count, Value, ListOut, IndexOut) :-
- nth0(Index, List, Value),
- UpdatedValue is Value + 1,
- /*write("New value: "),*/
- /*writeln(UpdatedValue),*/
- replace(List, Index, UpdatedValue, NewList),
- NewIndex is Index + 1,
- length(List, L),
- CheckedIndex is NewIndex mod L,
- NewCount is Count - 1,
- listUpdate(NewList, CheckedIndex, NewCount, NewValue, ListOut, IndexOut).
- /*writeln(NewList)*/
- listClearElement(List, Index, ListOut) :-
- replace(List, Index, 0, ListOut).
- step(List, Index, ListOut, IndexOut) :-
- nth0(Index, List, Count),
- listClearElement(List, Index, ListCleared),
- NewIndex is Index + 1,
- listUpdate(ListCleared, NewIndex, Count, Value, ListOut, IndexOut),
- /*writeln("step"),*/
- /*writeln(ListOut),*/
- !.
- /*тотальный запуск*/
- launchgame(List, 4, ListOut, IndexOut):-
- writeln("launch stop"),
- /*fail,*/
- !.
- launchgame(List, Index, ListOut, IndexOut):-
- /*writeln("launch"), */
- /*writeln(List),*/
- /*writeln(Index),*/
- /*writeln(ListOut),*/
- /*writeln(IndexOut),*/
- writeln("launch gogame"),
- get(A),/*костыль, чтобы не зацикливался*/
- gogame(List, Index, ListOut, IndexOut, List, Index, 1).
- /*если последний камушек в дом*/
- gogame(List, -1, ListOut, IndexOut, LastWorkedList, LastWorkedIndex, RestartFlag) :-
- writeln("gogame -1"),
- length(List, L),
- NewL is L - 1,
- nth0(NewL, List, Value),
- writeln(Value),
- (Value =:= 8 ->
- false,
- !;
- launchgame(List, 0, ListOut, IndexOut)
- ).
- /*запуск одной итерации, restart_flag для того чтобы не делать проверку что камушек попадал в пустую лунку, ибо был полный рестарт*/
- gogame(List, Index, ListOut, IndexOut, LastWorkedList, LastWorkedIndex, RestartFlag) :-
- writeln("gogame standart"),
- write("List - "),
- writeln(List),
- write("Index - "),
- writeln(Index),
- nth0(Index, List, IsEmpty),
- /*если пытается взять из пустой*/
- (IsEmpty =:= 0 ->
- writeln("restart from empty"),
- NewIndex is Index + 1,
- launchgame(LastWorkedList, NewIndex, ListOut, IndexOut);
- (RestartFlag =:= 1 ->
- IsEmptyElement is IsEmpty; /*если был рестарт, пофиг куда падал камушек в прошлый раз*/
- IsEmptyElement is IsEmpty - 1),
- /*если последний камушек в пустую лунку*/
- /*IsEmptyTest is IsEmptyElement =:= 0,*/
- /*RestartTest is RestartFlag =:= 1, */
- /*TotalTest is IsEmptyTest + RestartTest,*/
- /*writeln(IsEmptyElement),*/
- (IsEmptyElement =:= 0 ->
- writeln("restart becous of fail"),
- NewIndex is Index + 1,
- launchgame(LastWorkedList, NewIndex, ListOut, IndexOut);
- /*write("not empty"),*/
- /*write(Index),*/
- /*write("-"),*/
- step(List, Index, ListOut, IndexOut),
- gogame(ListOut, IndexOut, NewLst, NewIndex, LastWorkedList, LastWorkedIndex, 0)
- )
- ).
- start(List):-
- launchgame(List, 0, ListOut, IndexOut),
- writeln("exit").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement