БлогNot. Чем .p16 хуже .b32? :)

Чем .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 [3520 просмотров]


теги: шахматы числа форматы

К этой статье пока нет комментариев, Ваш будет первым