ЗАДАЧА: Определить ходы профессиональных игроков в конце партии.
Необходимо написать функцию на языке Паскаль или С++,
Описание функции на С++:
int Themove(Board* Position,int Colorstone,int KO,
int &move1, int &move2, int &move3, int &move4);
на ВХОД которой подаётся массив 19х19 целых чисел Position, который
отображает позицию партии ГО, ноль в массиве означает пустое место
на доске, единица чёрный камень, два белый камень.
Также на вход подаётся число Colorstone определяющее чей ход (1 чёрных, 2 белых)
и число KO отбражающее КО-борьбу, если оно равно 0 то нет КО-борьбы,
иначе число показывает пункт в который нельзя ходить из-заКО-борьбы.
На ВЫХОДЕ функция должна выдавать четыре целых числа, каждое число это
пункт на доске, и является попыткой угадать следующий ход в партии,
то есть даётся четыре попытки угадать следующий ход.
Для C++ если ход ПАС, то число равно -1, иначе число обозначает пункт на доске.
Для Паскаля если ход ПАС, то число равно 0, иначе число обозначает пункт на доске.
Описание функции на C++:
int Themove(Board* Position,int Colorstone,int KO,
int &move1, int &move2, int &move3, int &move4);
Описание функции на Паскале:
function Themove(Position: Board; Colorstone: integer; KO :integer;
var move1: integer; var move2: integer;
var move3: integer; var move4: integer): integer;
КАК УЧАСТВОВАТЬ В КОНКУРСЕ:
Необходимо прислать мне на почту ihtiand@yandex.ru свою процедуру,
но не исходный код, а скомпелированный для Windows.
Для Borland Turbo Pascal нужен файл TPU, для Delphi файл DCU,
в котором функция и вспомогательные типы описаны как:
Type Board = array[1..19,1..19] of integer;
function Themove(Position: Board; Colorstone: integer; KO :integer;
var move1: integer; var move2: integer;
var move3: integer; var move4: integer): integer;
Для Visual Studio C++ нужен файл LIB в котором функция и вспомогательные типы описаны как:
struct Board { int P[19*19] };
int Themove(Board* Position,int Colorstone,int KO,
int &move1, int &move2, int &move3, int &move4);
КАК ОПРЕДЕЛЯЕТСЯ ПОБЕДИТЕЛЬ КОНКУРСА:
Есть база данных из более чем 3000 партий сыгранных профессионалами и любителями
до двух пасов по японским правилам. Каждая партия хранится в SGF файле.
Есть процедура procedure Calculatemovedifference
которая распаковывает SGF файл, выполняет ходы и расставляет позицию партии
в структуре Board, после каждого хода применяет вашу функцию Themove и
получает от Вашей функции четыре возможных хода в текущей позиции.
Далее идет начисление Вам очков по следующей схеме:
Если move1 совпадает с ходом в партии то + 1 очко.
Если move2 совпадает с ходом в партии то + 1/2 очка.
Если move3 совпадает с ходом в партии то + 1/4 очка.
Если move4 совпадает с ходом в партии то + 1/8 очка.
Если move1 находится в окрестности ±1 пункт от хода в партии то + 1/16 очка.
Если move1 находится в окрестности ±2 пункта от хода в партии то + 1/48 очка.
Если move1 находится в окрестности ±3 пункта от хода в партии то + 1/96 очка.
За ход Вам начисляются очки по лучшей из этих категорий.
То есть за ход можно получить не более 1 очка.
За первый пас в партии (если он угадан) очки начисляются,
остальные пасы и ходы после первого паса в конкурсе не участвуют.
Далее очки суммируются, делятся на количество всех участвующих ходов,
определяется процент угадывания, у кого он выше, тот и победитель.
В конкурсе будут участвовать последние 90 ходов из каждой партии.
Конкурс проводится с 1 Февраля по 1 Октября 2005 Года.
Призы
Призов спонсоры выделили всего два, один за первое место $200, и один за 50 % результат,
то есть если количество очков делённое на количество ходов больше или равно 0.5 то приз $200.
Если победителей несколько, то призы делятся.
Цели
1. Выявить программистов для возможного участия в ГО-проекте.
2. Спортивный интерес побороться за призы.
Результаты конкурса
будут отображаться на этой странице.
Дата: 18 Мая, 2005 года: Место Алгоритм Автор Игр Ходов Очки Процент Время Примечания _ Neuron 7.97__ Melnikov A. 3078 275144 50349.5 18.30 % 0.489 Сек/Ход 22 кю на сервере KGS _ Neuron 7.95__ Melnikov A. 3078 275144 31464.6 11.44 % 0.014 Сек/Ход ~ 25 кю 1 Hane&Kosumi__ Sample 3078 275144 4681.5 1.70 % 18 Сек Пример Алгоритма 2 Free Space___ Sample 3078 275144 4141.5 1.51 % 12 Сек Пример Алгоритма 3 Pas__________ Sample 3078 275144 3078.0 1.12 % 11 Сек Пример Алгоритма 4 Random_______ Sample 3078 275144 2109.6 0.77 % 10 Сек Пример Алгоритма
Участники могут скачать процедуру Calculatemovedifference
(именно этим кодом будут проверяться конкурсные алгоритмы)
и тестовую базу партий.
Код программы на Паскале и тестовая база партий для проверки конкурсной функции. CompMove_PAS.zip ( 42K )
Содержание архива:
Games Директория с тестовыми партиями.
Konkmovego.pas файл с функцией Calculatemovedifference
Main.dpr запуск из Delphi
Move.pas Каркас конкурсной функции.
ZLog.txt результат работы программы на Паскале
Код программы на Си++ и тестовая база партий для проверки конкурсной функции. CompMove_CPP.zip ( 42K )
Содержание архива:
Games Директория с тестовыми партиями.
Konkmovego.cpp файл с функцией Calculatemovedifference и запуском из Visualstudio C++.
Konkmovego.h Header
Move.cpp Каркас конкурсной функции.
ZLog.txt результат работы программы на C++