Программирование шахмат

Студенческий спорт
Студенческий спорт: Программирование шахматУ меня есть идея, написать свой шахматный движок. С целью попрактиковаться в программирование да и в шахматах тоже.
Мож еще ктото тож хочет. Я имею работу не над одним проектом, а за разными, с целью посмотреть чья программа сильнее. Но конечно это не сейчас, после сессии естественно.
42 комментария
avatar
А что Вы реально новое хотите написать? по поводу шахматных программ (и теории их написания) издано немало книг и работ, но все эти подходы не играют в шахматы а оценивают позиции на доске и выбирают тот ход, который приведет к более выгодным позициям. В Deep Blue главным достоинством был паралельный процессор, не помню уж, сколько в нем было узлов, Если трудится в данном направлении, то надо усовершенствовать игровую логику, добавить нетрадиционные и эксперементальные хода, изредка предпринимаемые машиной с целью "эксперементировать", heuristic оценку ситуации (у меня этот предмет преподается на английском), возможность не просто предсказывать ход оппонента, но и мотивы этого хода.

Как бы там ни было - успехов!
avatar
хм..)
вот если решать задачи связанные с шахматами....
Задание :))

"Шахматная ассоциация решила оснастить всех своих сотрудников такими телефонными номерами, которые бы набирались на кнопочном телефоне ходом коня. Например, ходом коня набирается телефон 340-49-27. При этом телефонный номер не может начинаться ни с цифры 0, ни из цифры 8.
-------------
| 1 | 2 | 3 |
-------------
| 4 | 5 | 6 |
-------------
| 7 | 8 | 9 |
-------------
|__| 0 |__ |
Нужно написать программу, которая определяет количество телефонных номеров длины N, которые набираются ходом коня.
1<N<100
Исходный файл должен содержать одно число - искомое количество телефонных номеров"

Или хотя бы напишите - при какой длине, сколько номеров)))))))))))))))))
avatar
ИМХО #2 #3 посты -- оффтоп.
Валерий, человек хочет написать не обязательно новый, а свой движок.
Татьяна, это обычная задача олимпиадного программирования.
Влад, у меня есть полностью оригинальный движок (примерно 50 часов разработки без опоры на сторонние идеи). Если хотите играть -- пишите в личку.

Впрочем, подозреваю, что движок, разработанный одним человеком, с реализованным по книжке, сравнивать будет не очень интересно, так что уточните пожалуйста, что имеете в виду, чтобы не было такой ситуации.
avatar
Дмитрий молодец!
Правильно)
:))
avatar
2 Татьяна: ну и зачем здесь -- при какой длине сколько номеров?
16, 36, 82, 188, 428, 984, 2240, 5152, 11728, 26976, 61408, 141248, 321536, 739584, 1683584, 3872512, 8815360, 20276736, 46157824, 106170368, 241685504, 555915264, 1265481728, 2910810112, 6626148352, 15241199616, 34694963200, 79803957248, 181665185792, 417858945024, 951211261952, 2187937841152, 4980606828544, 11456191266816, 26078795923456, 59985396236288, 136550348226560, 314087612350464, 714986905665536, 1644584089157632, 3743720041086976, 8611154085543936, 19602372623859712, 45088588156633088, 102639355578810368, 236086912597622784, 537426642977423360, 1236167122959204352,
avatar
Ну в Паскале это может быть примерно так:)))
uses crt;

var n,i:integer;
z,x,y,v,u,x1,y1,v1,u1:extended;
BEGIN
write('Enter kolichestvo tsifr n = ');
readln(n);
x:=4;y:=0;u:=1;v:=2;
if n>2 then
for i:=n downto 3 do
begin
x1:=x;y1:=y;u1:=u;v1:=v;
x:=2*(u1+v1);y:=v1;
u:=x1;v:=x1+2*y1;
end;
writeln('nomerov : ',2*(x+y+u)+3*v:3:0);
readln;
END.

Длина | Количество
-----------------------------------------
3 | 36
-----------------------------------------
8 | 2240
-----------------------------------------
35 | 11456191266816
-----------------------------------------
80 | 1715550913604185820(12)

Дмитрий Анисимов пять баллов :)))))
avatar
Кстати я сначала писал шахматный движок на Паскале. Потом решил переписать на ассемблер -- некоторые части получились короче...
avatar
Могу рассказать задачу о гиперферзе. Гиперферзь стоит на известном поле N-мерной (2<N<30000) доски в виде паралеллипидеда известных размеров. Требуется подсчитать количество возможных ходов гиперферзя. Примечание: гиперферзь ходит так, что смещение по оси x_i равно a_i*k, где a_i равно одному из трех значений: -1,0,+1; а k общее для всех осей.
avatar
Забыл добавить: на доске, кроме гиперферзя, ничего нет.
avatar
Здесь киберы и математики. Это не мое, я свободный художник...
avatar
Дядя Ринат, валим отсюда в другую тему, пока головы не сломали:)
avatar
Думаю, что расположение невозможно, пока доказать не удалось
avatar
Я эту задачу решить не смог )))
avatar
У меня был опыт написания шахматной программы. Единственное реальное, чего удалось добиться - более-менее корректное воспроизведение партии из файлов в формате .pgn
Заинтересованные товарищи можете почитать этот форум immortal223.borda.ru и/или написать мне в личку.
avatar
Алексей, так вы даже интерфейс не доделали?
avatar
Интерфейс как раз доделал. И примитивный перебор вариантов реализовал.
avatar
Ну вот значит скоро сможем сыграть:)))
Надо бы еще правила довести до полных. Как-то до таких высот программирования, чтобы запросто добавить правило 50 ходов или тройного повтора, сохранив при этом скорость работы, я не дорос.. :(

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.