### Re: Re: Parsing Chess Algebra Notation

by cyocum (Curate)
 on May 07, 2004 at 14:05 UTC ( #351458=note: print w/replies, xml ) Need Help??

in reply to Re: Parsing Chess Algebra Notation
in thread Parsing Chess Algebra Notation

I took your advice and tried it backwards. As you will notice, I did this in a step by step fashion. I am sure that there are much more effient ways to do this. Also, it does not yet support the edge cases that you are talking about (that includes promotion). I just wanted to layout a bit more code for general commments and improvments. Also, thanks for all the help. I really appreciate it!

use strict; use warnings; my \$move = "Qe4++"; #reverse as per dragonchild's suggestion my @parsed = reverse split //, \$move; print join('', @parsed) . "\n"; my \$check; my \$row; my \$col; my \$piece; #convert the letters into appropriate numbers #there is probably a faster way to to this my %col_convert = (a => 0, b => 1, c => 2, d => 3, e => 4, f => 5, g => 6, h => 7); foreach my \$elem (@parsed) { #check for, well, check if(\$elem eq '+') { #start the process to see if this is a checkmate my \$nextElem = shift @parsed; print "nextElem \$nextElem" . "\n"; #if it is then print if(\$nextElem eq '+') { print "Checkmate\n"; next; } else { #otherwise put it back on the stack for the next #iteration unshift @parsed, \$nextElem; } #then print check in this instance print "Check\n"; }elsif(\$elem =~ m/[1-8]/) { \$row = \$elem; print "Row: \$row\n"; }elsif(\$elem =~ /[a-h]/) { #convert to number \$col = \$col_convert{\$elem}; print "Col: \$col\n"; }elsif(\$elem =~ m/x/) { #this is a capture to that square print "Capture on \$col \$row\n"; }elsif(\$elem =~ /[KQRNB]/) { \$piece = \$elem; print "Piece to move is \$piece\n"; } else { die "not a valid move\n"; } }

Replies are listed 'Best First'.
Re: Re: Re: Parsing Chess Algebra Notation
by dragonchild (Archbishop) on May 07, 2004 at 15:22 UTC
Why are you making it so complicated for yourself? All you want to do is build a string that corresponds to the move. This means that you're attempting to build a state representation by parsing another state representation, one character at a time. The following may or may not be complete, but it's a good start. (I didn't do castling, leaving that as an exercise for the reader. I'd probably special-case it.)

And the test code ...

Create A New User
Node Status?
node history
Node Type: note [id://351458]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2019-04-26 08:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
I am most likely to install a new module from CPAN if:

Results (128 votes). Check out past polls.

Notices?