/ft*******************************************************/
% . Ходчеловека
/А*******************************************************/
читать(Ход):-
write("Номеркучки - "), readint(Nl), write("Количествоспичек - "), readint(N2), Ход=ход(Ш.,Ы2).
/♦А********************* ************|1* *********** *******х«/
% Обработкахода
/♦♦A*****************************************************/
/А*******************************************************/
%ходить(Ход,Позиция,Позиция!) -
% Позиция1 - результатвыполненияходаХод
% втекущейпозицииПозиция.
холить(ход(К,М),[N|Ns],[N|Nsl]):-
К>1,К1=К-1,ходить(ход<К1,М),Ns,Nsl). ходить(ход(1,М),[N|Ns],[Nl|Ns]):-
N>M,N1=N-M.
ходить(ход(1,Ы),[H|Ns].No).
/******it************************************************/
% Переходходакдругомуигроку
/******♦*** ++ *********«*** + ***-v** I*********-**************/
другой_игрок(компьютер,противник) дру1Ч>й_игро1с(противник,компьютер) .
I **♦****************** + **♦* ***,»**** ****** ****************/
% Об-ьявлекиерезультатаизтры
/*********♦**********♦**********♦***************♦********/
объявить(компьютер):-write("Выпобедили! Поздравляю."),nl. объявить(противник):-write("Япобедил!"),nl.
/****♦*************♦**********♦****♦*********************/
% Оценкапозиции
/а*******************************************************/
/♦*************♦***■********************************* **** */
%опэ.сная (Позиция, Сумма) -
% Позициясним-суммойСуммаявляетсяопасной,
% еслиним-сумманеравнанулю.
/******************♦♦****************************♦*******/
опасная(К«,Сумма):-
ним_сумма(Ns,С],Сумма),not(нуль(Сумма)). безопасная(Ns):-
not (опасная(Ns,_)) .
у********************************************************/
% Подсчет ним-суммы у***********************************************»********/
у********************************** ********♦*************/
%ним_сумма(Позиция,НакопленнаяСумма,Сумма) % Сумма - ним-сумма текущей позиции Позиция,
% НакопленнаяСумма - накопленное значение суммы.
у********************************************************/
ним_сумма([N|Ns],Bs,Сумма):двоичное(N,Ds),ким_сложение(Ds,Bs,Bsl), ним_сумма(Ns,Bsl,Сумма). ним_сумма([],Сумма,Сумма). ним_сложение(Bs,[],Bs). ним_сложение([),Bs,Bs). ним_сложение([В|Вз] , [С ICs] , [D|Ds]) :D=(B+C) mod 2,нии_сложение(Вз,Сз,0з). двоичное(1,[1]). двоичное(Ы,[D|Ds]):N>l,D=ll mod 2,N1=N div 2, двоичное(N1,Ds). десятичное(Ds,N):-дес(Ds,0,1,N). дес([],N,T,N). flec([D|Ds],A,T,N):A1=A+D*T,T1=T*2,дес(Ds,Al,Tl,N). нуль([]).
нуль([0|Zs]):-нуль(Zs). /***л****************************************************/
% Ход компьютера у******************** ************************************/
I ********4*******V** ****************** *******************/
%безопасный ход(Иььицмя,ИимСукма,Ход) % Ход - ход в текущей позиции Позиция, которой соответствует
% значение НимСумма, сохраняющий позицию безопасной.
/********************************************************/
безопасный_ход(Кучки,НимСумма,Ход):безоп_ход(Кучки,НимСумма,1,Ход). безоп_ход([Кучка|Кучки],НимСумма,К,ход(К,М)):двоичное(Кучка,Bs),может_быть_нуль(Bs,НимСумма,Ds,0), десятичное(Ds,M). безоп_ход([Кучка|Кучки],НимСумма,К,Ход):-
К1=К+1,беэоп_ход(Кучки,НимСумма,К1,Ход). может_быть_нуль([],НимСумма,[],0):-нуль(НимСумма). может_быть_нуль([В IBs] , [0 iНимСумма] , [C|Ds],C) :может_быть_нуль(Bs,НимСумма,Ds,С). может_быть_нуль([В|Bs],[1|НииСумма],[D|Ds],С):П=1-В*С,С1=1-В,может_быть__нуль(Bs,НимСумма,Ds,CD .
/а*******************Конец программы*************♦*******/
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.