H. G. Muller wrote on Thu, Oct 10, 2013 08:29 AM UTC:
Betzetera Notation
Sorry for turning this subject into a monologue.
But everything seems to fall into place,
which makes me confident to make a new proposal for extending Betza notation, very much in the spirit of the existing one: compact, elegant and powerful.
It draws some inspiration from the Bex notation proposed by David Howe.
Then was then, but now...
Some places mention the modifier 't', as a binary operator for chaining moves. Like FtR: start like Ferz, then continue as Rook. (With the 'f' implied for chaining this describes the Griffon.) The later step is optional, however, you can always terminate at a t. (The Griffin can move as F!) This distinguishes it from the chaining operator '-' from Bex, where continuation is mandatory, and the whole move is blocked if the square is not empty. This proposal also embraces the '-' operator.
It proposes additional chaining operators as well, though.
Apart for changing direction, chaining can be used to indicate a 'chaining' square the state of which has to be probed to decide about the move, or which might even change this state as a side effect of the move. The following such operators are proposed:
Proposed chaining operators
t
optional continuation when square is empty
-
chaining square must be empty, or move would be blocked
+
hopper move: chaining square is platform (friend or foe, unaffected)
x
mandatory continuation after capturing enemy on chaining square; friend or empty would block
d
mandatory continuation after destroying friend or foe on chaining square
y
chaining square is last square visited by first move before obstacle
The operator d is needed for some Taikyoku sliders, which capture anything they jump over. The y can be used to describe colliding bifurcators, which basically are hoppers that hop one step early.
Some examples: Q+K is the Grasshopper: move as Q to an occupied square, and mandatory continue outward with a K step. No need for a 'g' modifier.
mRcR+R is the Xiangqi Cannon. The mR is obvious, the R+R indicates moving as Rook to an occupied square,
and from there continue as Rook in the outward direction.
The c modifier prefix indicates this is only for capture, as usual.
A bit longer than pR, perhaps, but much more flexible,
as it allows describing directional change at the platform.
RyB would be the Dimachaer, sliding as R until it collides with an obstacle, then continuing as B to make its move or capture there.
W+WF+FD+DA+AN+NH+HG+GJ+JL+L would be the Equihopper
(as the + operator couples more tightly than concatenation of atoms).
What's in a number?
Numbers indicate exponentiation, i.e. repeated application of the same operator.
The implied operator is 't', for optional continuation.
So W3 means WtWtW, which could be expanded to (W)(W-W)(W-W-W) = WnDnH.
(The proposal involves allowing the use of parentheses for grouping or clarity, like in Bex.)
Bex proposes to use W03 for indicating just the W-W-W component of this.
Because we have more than just the t and - chaining operators here, this doesn't cut the cake, however.
In the spirit of Betza notation, we use more general modifiers on the exponent.
In fact the prefixed 0 in Bex was a sort of non-obvious modifier prefix.
But it is much clearer to just prefix the exponent with the operator whose repetitive application it orders.
The default prefix would be t for backward compatibility.
So W3 = Wt3 = WtWtW. But W-3 = W-W-W, and Wx3 = WxWxW, etc.
Chaining does not only imply the t operator; it also implies a directional modifier 'f' on the continuation.
So F2 actually means FtfF.
Note that the fF moves in this case refer to the 45-degree rotated coordinate system of the previous step,
where 'f' is identified with 'most outward',
and the Ferz looks like a Wazir.
So fF implies only a single move in continuation,
so that F2 describes a non-jumping Alfil, as in Betza notation.
If we want to specify something else,
e.g. a bent di-Ferz, moving as Dabbaba,
we would have to use explicit directional modifiers: FtsF,
specifying the second step is taken perpendicular to the first one.
To globally apply such a modifier to all later factors of an exponentiation, we can apply it to the exponent.
So Fts2 would by definition mean FtsF,
and Nfr8 would mean upto 8 consecutive Knight steps,
each step continuing just a bit right from straight ahead.
But that is the Rose!
No need for a special q operator anymore; it is all in the basics.
Nr4 would similarly specify a circular Knight that returns to its origin in 4 steps.
Another proposal regarding numbers:
The 0 (zero) can be used to indicate arbitrary repetition,
as it would have no meaning in the literal interpretation.
So W0 would indicate the Rook.
This is an alternative for WW,
as the latter becomes very troublesome with the rules that chaining operators have higher precedence than atom concatenation.
You could for instance not use a DD move in a hopper description without using parentheses: (DD)+(DD).
D0-D0 is OK, however, as exponentiation has higher precedence than chaining.
I prefer this over using D*, as Bex does, because the 0 suggests more that you are dealing with an exponent than the * (which suggests a binary operator to those not used to regular expressions).
And there is more: Ft(lFtrF)0 = FtlFtrFtlFtrF... is the Crooked Bishop, with a more precise description of how crooked.
You dont have to move in circles if you don't want to!
Note that the 0 indicates an arbitrary number of steps, not an infinite number.
So it can safely be used with chaining operators that specify mandatory continuation (i.e. any other than t).
E.g. W-0 would in itself already expand to (W)(W-W)(W-W-W)... = R,
and thus happens to be the same as W0. (Well -0 = 0, right? ;-) )
But cWx0 (Bulldozer?) would expand to c(W)c(WxW)c(WxWxW)..., a piece that makes an arbitrary number of hit-and-run captures with mandatory continuation, and finally a capture (as specified by the C). So it can capture any number of consecutive enemy pieces.
A Qd0 would make an arbitrary number of 'Qd...' steps to occupied squares,
destroying anything in its path, friend or foe, until it ends with a Q normal capture or non-capture (Steamroller?).
Note that the d operator (or any operator) can also be invoked on a final step, by adding a dummy O (oh) atom (also embrased from Bex) as final step. A BdO is a Bishop that must capture friend or foe, and then mandatorily 'continue' with a null move.
Some moves are more equal than others!
We also propose a new modifier on chained slider moves, namely 'e'.
This means 'same length as the previous step'.
This allows encoding of a lot of 'alien' capture modes.
For instance, (orthogonal) rifle capture could be written as RxebR:
move as Rook to make a capture, and mandatorily continue
in the backward direction with an equally long Rook move. i.e. return to your square of origin after making a normal capture.
Suddenly rifle capture doesn't seem so un-Chess-like anymore,
once you allow hit-and-run captures with the x chaining operator!
The Ultima Withdrawer can be written as mQmKxbK-Q.
I.e., non-capture as a Queen (mQ), or capture as King, and then mandatorily continue in the reversed direction (bK) by another King step (KxbK, a King rifle capture), and subsequently continue as slider in that reversed direction, where you cannot capture anything (by replacement) anymore (hence m(KxbK-Q)).
An Advancer can be written as mQK-QxbK:
the interesting move start with a King step (to force minimally one step), mandatorily continues by sliding an arbitrary number of squares in the same direction to capture an opponent,
and again mandatorily continue in the reversed direction for one step (bK), so that it ends up just 'in front' of the piece it captured.
(No need to specify 'm' on it; the final square is guaranteed to be empty, as we just passed over it!)
It would also be possible to specify 'long-range advancers', basically an intermediate between the Roccoco Advancer and rifle capture, capturing anything at the end of the ray it moves on (Spearman?). It would be mQtQxebQ: move like Q and either terminate at an empty square X (m!), or continue in the same direction an arbitrary distance to the first piece, which you capture, and then mandatorily move all the way back to X.
The Checker would be fmFxF, capture as F and mandatorily continue with a non-capture (as the m/c modifiers have lower precedence than chaining, and thus always apply to the whole chain, fm(FxF)), all this in the forward direction of the initial Ferz move only.
But the Ultima Long Leaper can also be easily encoded: mQm(QxQ)-0, the capture move expanding to m(QxQ)m(QxQ-QxQ)m(QxQ-QxQ-QxQ)..., the '-' chaining after each QxQ ensuring that the move will be blocked if there isn't at least one empty square behind the hit-and-run victim, and the m prefix ensuring this for the last QxQ locust hop.
The linear stinging move of Chu-Shogi's Soaring Eagle would be f(FxvF), the x specifying mandatory capture with continuation of the first fF step, followed by a second step along the same line (forward or backward = v), which may or may not capture. It encompasses the rifle capture, double capture and locust capture. (But fFfA would still have to be specified separately.)
The similar triple sting of the Tai-Shogi Lion Dog (which goes in all directions) would be (KxKxvK)((AD)xvK)(KxvK).
Betzetera Notation
Sorry for turning this subject into a monologue. But everything seems to fall into place, which makes me confident to make a new proposal for extending Betza notation, very much in the spirit of the existing one: compact, elegant and powerful. It draws some inspiration from the Bex notation proposed by David Howe.
Then was then, but now...
Some places mention the modifier 't', as a binary operator for chaining moves. Like FtR: start like Ferz, then continue as Rook. (With the 'f' implied for chaining this describes the Griffon.) The later step is optional, however, you can always terminate at a t. (The Griffin can move as F!) This distinguishes it from the chaining operator '-' from Bex, where continuation is mandatory, and the whole move is blocked if the square is not empty. This proposal also embraces the '-' operator.
It proposes additional chaining operators as well, though. Apart for changing direction, chaining can be used to indicate a 'chaining' square the state of which has to be probed to decide about the move, or which might even change this state as a side effect of the move. The following such operators are proposed:
The operator d is needed for some Taikyoku sliders, which capture anything they jump over. The y can be used to describe colliding bifurcators, which basically are hoppers that hop one step early.
Some examples: Q+K is the Grasshopper: move as Q to an occupied square, and mandatory continue outward with a K step. No need for a 'g' modifier. mRcR+R is the Xiangqi Cannon. The mR is obvious, the R+R indicates moving as Rook to an occupied square, and from there continue as Rook in the outward direction. The c modifier prefix indicates this is only for capture, as usual. A bit longer than pR, perhaps, but much more flexible, as it allows describing directional change at the platform. RyB would be the Dimachaer, sliding as R until it collides with an obstacle, then continuing as B to make its move or capture there. W+WF+FD+DA+AN+NH+HG+GJ+JL+L would be the Equihopper (as the + operator couples more tightly than concatenation of atoms).
What's in a number?
Numbers indicate exponentiation, i.e. repeated application of the same operator. The implied operator is 't', for optional continuation. So W3 means WtWtW, which could be expanded to (W)(W-W)(W-W-W) = WnDnH. (The proposal involves allowing the use of parentheses for grouping or clarity, like in Bex.) Bex proposes to use W03 for indicating just the W-W-W component of this. Because we have more than just the t and - chaining operators here, this doesn't cut the cake, however. In the spirit of Betza notation, we use more general modifiers on the exponent.
In fact the prefixed 0 in Bex was a sort of non-obvious modifier prefix. But it is much clearer to just prefix the exponent with the operator whose repetitive application it orders. The default prefix would be t for backward compatibility. So W3 = Wt3 = WtWtW. But W-3 = W-W-W, and Wx3 = WxWxW, etc.
Chaining does not only imply the t operator; it also implies a directional modifier 'f' on the continuation. So F2 actually means FtfF. Note that the fF moves in this case refer to the 45-degree rotated coordinate system of the previous step, where 'f' is identified with 'most outward', and the Ferz looks like a Wazir. So fF implies only a single move in continuation, so that F2 describes a non-jumping Alfil, as in Betza notation. If we want to specify something else, e.g. a bent di-Ferz, moving as Dabbaba, we would have to use explicit directional modifiers: FtsF, specifying the second step is taken perpendicular to the first one. To globally apply such a modifier to all later factors of an exponentiation, we can apply it to the exponent. So Fts2 would by definition mean FtsF, and Nfr8 would mean upto 8 consecutive Knight steps, each step continuing just a bit right from straight ahead. But that is the Rose! No need for a special q operator anymore; it is all in the basics. Nr4 would similarly specify a circular Knight that returns to its origin in 4 steps.
Another proposal regarding numbers: The 0 (zero) can be used to indicate arbitrary repetition, as it would have no meaning in the literal interpretation. So W0 would indicate the Rook. This is an alternative for WW, as the latter becomes very troublesome with the rules that chaining operators have higher precedence than atom concatenation. You could for instance not use a DD move in a hopper description without using parentheses: (DD)+(DD). D0-D0 is OK, however, as exponentiation has higher precedence than chaining. I prefer this over using D*, as Bex does, because the 0 suggests more that you are dealing with an exponent than the * (which suggests a binary operator to those not used to regular expressions).
And there is more: Ft(lFtrF)0 = FtlFtrFtlFtrF... is the Crooked Bishop, with a more precise description of how crooked. You dont have to move in circles if you don't want to!
Note that the 0 indicates an arbitrary number of steps, not an infinite number. So it can safely be used with chaining operators that specify mandatory continuation (i.e. any other than t). E.g. W-0 would in itself already expand to (W)(W-W)(W-W-W)... = R, and thus happens to be the same as W0. (Well -0 = 0, right? ;-) ) But cWx0 (Bulldozer?) would expand to c(W)c(WxW)c(WxWxW)..., a piece that makes an arbitrary number of hit-and-run captures with mandatory continuation, and finally a capture (as specified by the C). So it can capture any number of consecutive enemy pieces. A Qd0 would make an arbitrary number of 'Qd...' steps to occupied squares, destroying anything in its path, friend or foe, until it ends with a Q normal capture or non-capture (Steamroller?). Note that the d operator (or any operator) can also be invoked on a final step, by adding a dummy O (oh) atom (also embrased from Bex) as final step. A BdO is a Bishop that must capture friend or foe, and then mandatorily 'continue' with a null move.
Some moves are more equal than others!
We also propose a new modifier on chained slider moves, namely 'e'. This means 'same length as the previous step'. This allows encoding of a lot of 'alien' capture modes. For instance, (orthogonal) rifle capture could be written as RxebR: move as Rook to make a capture, and mandatorily continue in the backward direction with an equally long Rook move. i.e. return to your square of origin after making a normal capture. Suddenly rifle capture doesn't seem so un-Chess-like anymore, once you allow hit-and-run captures with the x chaining operator!
The Ultima Withdrawer can be written as mQmKxbK-Q. I.e., non-capture as a Queen (mQ), or capture as King, and then mandatorily continue in the reversed direction (bK) by another King step (KxbK, a King rifle capture), and subsequently continue as slider in that reversed direction, where you cannot capture anything (by replacement) anymore (hence m(KxbK-Q)).
An Advancer can be written as mQK-QxbK: the interesting move start with a King step (to force minimally one step), mandatorily continues by sliding an arbitrary number of squares in the same direction to capture an opponent, and again mandatorily continue in the reversed direction for one step (bK), so that it ends up just 'in front' of the piece it captured. (No need to specify 'm' on it; the final square is guaranteed to be empty, as we just passed over it!) It would also be possible to specify 'long-range advancers', basically an intermediate between the Roccoco Advancer and rifle capture, capturing anything at the end of the ray it moves on (Spearman?). It would be mQtQxebQ: move like Q and either terminate at an empty square X (m!), or continue in the same direction an arbitrary distance to the first piece, which you capture, and then mandatorily move all the way back to X.
The Checker would be fmFxF, capture as F and mandatorily continue with a non-capture (as the m/c modifiers have lower precedence than chaining, and thus always apply to the whole chain, fm(FxF)), all this in the forward direction of the initial Ferz move only. But the Ultima Long Leaper can also be easily encoded: mQm(QxQ)-0, the capture move expanding to m(QxQ)m(QxQ-QxQ)m(QxQ-QxQ-QxQ)..., the '-' chaining after each QxQ ensuring that the move will be blocked if there isn't at least one empty square behind the hit-and-run victim, and the m prefix ensuring this for the last QxQ locust hop.
The linear stinging move of Chu-Shogi's Soaring Eagle would be f(FxvF), the x specifying mandatory capture with continuation of the first fF step, followed by a second step along the same line (forward or backward = v), which may or may not capture. It encompasses the rifle capture, double capture and locust capture. (But fFfA would still have to be specified separately.) The similar triple sting of the Tai-Shogi Lion Dog (which goes in all directions) would be (KxKxvK)((AD)xvK)(KxvK).