Ahora estoy convencido de que la respuesta de Fabian Fichter es correcta. El siguiente comentario sobre la respuesta de Fabián puede ayudar a convencer a otros de lo mismo.
1. Posición que parece verse afectada al eliminar la promoción de pollitos
Analizando los resultados publicados del Stockfish modificado, todos los juegos convergen bastante rápido en la siguiente posición: S / -l- / ge - / - E - / - LG / cC.
$ ./dobutsu -vs900
Loading tablebase... done
1. setup S/-l-/ge-/-E-/-LG/cC
1. show board
ABC
+---+
1| l | c
2|ge |
3| E |
4| LG| *C
+---+
1. show lines
Eb3xa2 : #-72 (67.13%)
C *a4 : #-70 (32.87%) <--- apparently quite strong
Gc4-c3 : #-46 ( 0.00%)
C *c2 : #-36 ( 0.00%)
C *c1 : #-28 ( 0.00%)
Eb3-a4 : #-26 ( 0.00%)
Lb4-a4 : #-26 ( 0.00%)
C *a1 : #-24 ( 0.00%)
C *c3 : #-22 ( 0.00%)
C *a3 : #-20 ( 0.00%)
Eb3-c2 : #-12 ( 0.00%)
Lb4-c3 : #-2 ( 0.00%)
Lb4-a3 : #-2 ( 0.00%)
Sente luego juega C*a4
, dejando caer a su chica en la esquina inferior izquierda. Inicialmente pensé que era una caída bastante derrochadora, pero de acuerdo con la base de la tabla, en realidad no está nada mal.
1. C *a4
ABC
+---+
1| l | *c
2|ge |
3| E |
4|CLG|
+---+
Ahora sucede algo interesante. La base de la mesa concuerda con Stockfish en que dar un paso al lado del León es un empate, pero ¿qué hay de dejar caer a una chica para luchar contra una chica?
2. show lines
C *a3 : #69 (99.57%) <--- winning chick drop
C *c2 : #91 ( 0.21%)
C *c1 : #91 ( 0.21%)
C *a1 : 0 ( 0.00%)
Ga2-a1 : 0 ( 0.00%)
Eb2-c1 : 0 ( 0.00%)
Eb2-a1 : 0 ( 0.00%)
Lb1-a1 : 0 ( 0.00%) <--- draws the game
C *c3 : #-28 ( 0.00%)
Lb1-c1 : #-22 ( 0.00%)
Eb2-c3 : #-20 ( 0.00%)
Eb2-a3 : #-20 ( 0.00%)
Ga2-a3 : #-18 ( 0.00%)
Lb1-c2 : #-2 ( 0.00%)
2. C *a3
ABC
+---+
1| l |
2|ge |
3|cE |
4|CLG| *
+---+
Ahora la chica a3
está a un paso de promocionar y, además, daría un vistazo a la promoción, lo que obligaría al Sente lion a tomarla. El único problema es que el mejor movimiento implica perder a la chica a3
y también que todavía estamos bastante lejos de ser un jaque mate. Por lo tanto, vamos a tomar un poco de atajo, de modo que perdamos más rápido, pero sin perder por otras razones, como regalar material innecesariamente.
3. show lines
Ca4xa3 : #-68 (92.84%) <--- catches chick about to promote
Gc4-c3 : #-62 ( 7.16%)
Eb3xa2 : #-32 ( 0.00%) <--- shortcut
Eb3-c2 : #-8 ( 0.00%) <--- give away elephant
Lb4-c3 : #-2 ( 0.00%) <--- stupid
Lb4xa3 : #-2 ( 0.00%) <--- stupid
3. Eb3xa2
ABC
+---+
1| l | *
2|Ee |
3|c |
4|CLG| G
+---+
4. show lines
Lb1xa2 : #31 (100.00%)
Lb1-c2 : #-10 ( 0.00%)
Lb1-c1 : #-6 ( 0.00%)
Lb1-a1 : #-6 ( 0.00%)
Ca3xa4+: #-2 ( 0.00%)
Eb2-c3 : #-2 ( 0.00%)
Eb2-c1 : #-2 ( 0.00%)
Eb2-a1 : #-2 ( 0.00%)
4. Lb1xa2
ABC
+---+
1| | e
2|le |
3|c |
4|CLG| *G
+---+
Parece que hemos logrado preservar la amenaza de la chica promotora de sacrificio, ¡así que continuemos!
5. show lines
G *b3 : #-30 (100.00%)
G *a1 : #-24 ( 0.00%)
G *c3 : #-20 ( 0.00%)
Gc4-c3 : #-18 ( 0.00%)
G *c2 : #-14 ( 0.00%)
G *c1 : #-10 ( 0.00%)
G *b1 : #-10 ( 0.00%)
Ca4xa3 : #-8 ( 0.00%)
Lb4-c3 : #-2 ( 0.00%)
Lb4-b3 : #-2 ( 0.00%)
Lb4xa3 : #-2 ( 0.00%)
5. G *b3
ABC
+---+
1| | *e
2|le |
3|cG |
4|CLG|
+---+
6. show lines
Ca3xa4+: #29 (100.00%) <--- sacrificial promoting chick check
E *c3 : #-30 ( 0.00%)
E *c1 : #-28 ( 0.00%)
Eb2-c1 : #-28 ( 0.00%)
Eb2-a1 : #-28 ( 0.00%)
La2-b1 : #-28 ( 0.00%)
La2-a1 : #-28 ( 0.00%)
E *c2 : #-26 ( 0.00%)
E *a1 : #-24 ( 0.00%)
E *b1 : #-12 ( 0.00%)
Eb2-c3 : #-12 ( 0.00%)
La2xb3 : #-2 ( 0.00%)
¡Y ahí está, la chica de promoción sacrificial como la mejor jugada! Veamos qué pasa.
6. Ca3xa4+:
ABC
+---+
1| | ce
2|le |
3| G |
4|rLG| *
+---+
7. show lines
Lb4xa4 : #-28 (100.00%) <--- take chick (forced if promoted)
Gc4-c3 : #-2 ( 0.00%)
Gb3-c3 : #-2 ( 0.00%)
Gb3-a3 : #-2 ( 0.00%)
Gb3xb2 : #-2 ( 0.00%)
Lb4-c3 : #-2 ( 0.00%)
Lb4-a3 : #-2 ( 0.00%)
Ahora veamos qué sucede si cambiamos ese gallo a una chica:
7. setup S/---/le-/-G-/cLG/ec
1. show board
ABC
+---+
1| | ce
2|le |
3| G |
4|cLG| *
+---+
1. show lines
Gc4-c3 : #-90 (100.00%)
Gb3xb2 : #-30 ( 0.00%)
Lb4xa4 : #-28 ( 0.00%)
Gb3-c3 : #-10 ( 0.00%)
Gb3-a3 : #-8 ( 0.00%)
Lb4-c3 : #-2 ( 0.00%)
Lb4-a3 : #-2 ( 0.00%)
En esta posición, el mejor movimiento pone el jaque mate 88 (90-2) se aleja, lo que está más lejos del jaque mate que la posición inicial, por lo que es plausible que, cuando se analice, conduzca a otra posición que, sin promover el poder del pollito, de repente esté mucho más lejos de mate que antes (ad infinitum). Si es cierto, eso haría que la posición G / --- / le- / cG- / CLG / e (ver más abajo) sea un empate en lugar de una victoria sin promoción de pollitos .
ABC
+---+
1| | *e
2|le |
3|cG |
4|CLG|
+---+
2. Corrección de la búsqueda exhaustiva.
Suponiendo que el generador de base de tabla utilizado es una búsqueda exhaustiva correcta, parece que el parche de Fabian debería inhabilitar las promociones de pollitos ya que el archivo moves.c
es el único lugar que POS_FLAGS
se usa (excepto para usarlo validation.c
para verificar estructuras de posición) y, de hecho, parece hecho a medida para deshabilitar promociones.
/* clear promotion bits for pieces that can't be promoted */
status &= POS_FLAGS;