Ещё 150000 задач на мат в 2 хода :)
В блоге уже есть заметка с коллекциями шахматных позиций на мат в 1, 2, 3 и 4 хода. А сегодня подсказали гораздо более мощный источник задач, чем копание на форумных темах :)
Аргентинский любитель Eduardo Sadier собирает задачи на мат в 2 хода много лет. Прилагаю его задачи отдельным файлом .txt
, их здесь около 150000.
Почищено от дублей просто Excel'ем (повторов позиций было немного, 324).
Из текста извлекать FEN'ы можно ещё и показанной ниже программкой (C++, Visual Studio 2015, предполагается, что текстовый файл 1.pgn
с данными находится в папке проекта, а извлечённые FEN'ы пишутся в файл 1.txt
). Просто онлайн-скриптом файлы по 20-30 Мб могут быть и не обработаны из-за ограниченности серверного ресурса, выделяемого скрипту.
Мат в 2 хода, задачи от E.Sadier в файле .txt с позициями FEN, 6.6 Мб
#include <cstdlib> #include <iostream> #include <fstream> #include <string> #include <regex> using namespace std; void error(string message, int errorcode) { cout << endl << message; system("pause>nul"); exit(errorcode); } int main() { string line; ifstream file("1.pgn"); if (!file) { error(string("Error opening input file"), 1); } ofstream file2("1.txt"); if (!file2) { error(string("Error opening output file"), 2); } smatch m; regex e("([bnrqkpBNRQKP1-8\\/])+\\s+[bw]\\s+(-|[KQkq])+\\s+(-|[a-hA-H][1-8])(\\s+\d{1,3}\\s+\\d{1,3})?"); int cnt = 0; while (getline(file, line)) { while (regex_search(line, m, e)) { //лишнее, если в одной строке не более одной FEN, можно if вместо while file2 << m[0] << endl; line = m.suffix().str(); } cnt++; if (cnt % 1000==0) { cnt = 0; cout << "."; } } file2.close(); file.close(); system("pause"); return 0; }
30.06.2017, 17:50 [2976 просмотров]