Чем .p16 хуже .b32? :)
Ещё на темы минувшей переписки, пока есть пара минут до тай-брейка. Человек писал что-то о моём странном умозрительном ".b32" как аналоге FEN и мелькнула мысль о подобном же "битовом" аналоге обычного .pgn. Ну, если всё нужно непременно свести к битам, то сделать такой формат ещё легче, назовём его .p16, потому что на запись хода хватит всего шестнадцати битов.
Действительно, если не писать ходы "текстом", а сохранять только информацию о том, с какого поля на какое выполнен ход, на запись одного хода потребуется:
- 12 битов на ход, 6 битов - поле "откуда" (3 на двоичный номер "столбца" доски 000-111 и 3 - на номер строки), точно так же 6 битов на поле "куда";
- так как пешка на 1-й или 8-й горизонтали имеет 4 варианта превращения (конь, слон, ладья, ферзь), то 2 бита понадобятся на информацию о том, во что она превратилась. Обрабатывать эти биты нужно только при ходе пешки на 1 или 8 горизонталь;
- информация о шахах и мате - лишняя, так как очевидна из позиции, а вот комментариям о слабом, очень слабом, сильном и очень сильном ходе (?, ??, !, !!) можно отвести оставшиеся старшие 2 бита ("очень слабый", видимо, придётся исключить, а то не останется комбинаций битов на обычный ход без дополнительных пометок).
Разумеется, формат не будет обладать свойством "модульности", полной информации об очередном ходе из 2-байтового числа не извлечь, значит, с произвольной позиции запись не начать и имеет смысл только вся партия целиком.
Дополнительной информации о партии целиком можно отвести, например, первые 2 байта файла и хранить там число сделанных в партии полуходов (младшие 14 битов) и результат (00 - не определён, 01 - победа чёрных, 10 - победа белых, 11 - ничья) в 2 старших битах.
Получается, что конкретному ходу может соответствовать число от
0000 000 000 000 001
или 0x0001
(a2-a1N, чёрная пешка превратилась в коня) до 1111 111 111 111 110
или 0xFFFE
(h7-h8Q!!, белая пешка стала ферзём, мат, очень сильный ход), если мы, конечно, будем хранить поле "откуда" в битах 0-5 (биты строки младше битов столбца), а "куда" в 6-11.
А впрочем, это всё я ерунду написал, разве ходят только пешки?
Лучше взять обычную короткую нотацию PGN и "положить" в 2 байта её запись хода:
- 1 бит - цвет фигуры;
- 3 бита - фигура (всего 6);
- 6 бит - поле назначения;
- 2 бита - фигура превращения пешки (только при соответствующем ходе);
- 2 бита - ничего, шах или мат;
- 2 бита - сила хода, ничего, ?, ! или ?!
Итого - те же 16 бит.
Рокировка может быть записана просто как ход короля через поле или два.
Интересным упражнением были бы такие "числовые партии", запрограммированные на чём-либо.
01.12.2016, 01:57 [3592 просмотра]