БлогNot. Ещё 150000 задач на мат в 2 хода :)

Ещё 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 [3007 просмотров]


теги: список c++ шахматы

показать комментарии (1)