X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=Position.pm;h=9d90cfc777e2576dcd275815c8089774040ecc8d;hp=807b0035876e3a261dae1f2e0097c371d7160953;hb=0a124edc28c716548327826127a9145da091a3d0;hpb=d40118a8adcb0da790ab1087296287e7eeab7c2c diff --git a/Position.pm b/Position.pm index 807b003..9d90cfc 100644 --- a/Position.pm +++ b/Position.pm @@ -97,6 +97,35 @@ sub fen { return $fen; } +# Returns a compact bit string describing the same data as fen(), +# except for the half-move and full-move clock. +sub bitpacked_fen { + my $pos = shift; + my $board = $pos->{'board'}->bitpacked_fen(); + + my $bits = ""; + if ($pos->{'toplay'} eq 'W') { + $bits .= "0"; + } else { + $bits .= "1"; + } + + $bits .= $pos->{'white_castle_k'}; + $bits .= $pos->{'white_castle_q'}; + $bits .= $pos->{'black_castle_k'}; + $bits .= $pos->{'black_castle_q'}; + + my $col = $pos->{'ep_file_num'}; + if ($col == -1) { + $bits .= "0"; + } else { + $bits .= "1"; + $bits .= (qw(000 001 010 011 100 101 110 111))[$col]; + } + + return $board . pack('b*', $bits); +} + sub to_json_hash { my $pos = shift; my $json = { %$pos, fen => $pos->fen() };