Problema:
En ajedrez, hay una regla algo bien conocida sobre el sorteo por repetición. Si la misma posición se repite 3 veces (o más), el jugador que intente hacer el movimiento que provocará esta repetición puede reclamar un empate.
A veces es una tarea fácil de detectar para un árbitro, si los últimos movimientos son solo los jugadores que se mueven hacia adelante y hacia atrás. A veces es menos trivial, cuando las piezas se han movido significativamente entre posiciones repetidas.
El problema en este desafío es generar un valor verdadero si la posición reclamada se dibuja por repetición (se ha visto 3 veces o más) y un valor falso si la posición reclamada no se dibuja por repetición, dada una lista de movimientos en notación coordinada como se describe a continuación, o cualquier anotación de su elección (pero tendrá que convertir los casos de prueba).
¿Qué es un puesto?
En un escenario del mundo real, la posición se vería afectada por cosas tales como si un jugador puede enrolar o si es posible pasarlo; usted debe no tener en cuenta estos en su solución al problema. En este problema, una posición se define simplemente por la configuración de las piezas en el tablero. Entonces, para los propósitos de este problema, se considera que dos posiciones son iguales si cada cuadrado en ambos tableros está ocupado por el mismo tipo de pieza del mismo color. Esta no tiene que ser la pieza exacta, por ejemplo, los caballeros blancos podrían intercambiar cuadrados y si todas las otras piezas cumplen los criterios, esta sería la misma posición.
¿Cómo se ve una notación válida?
Aunque continuaré explicando la notación coordinada, usted es libre de recibir información mediante el sistema de notación que elija. Siempre que:
- Cada elemento de la notación describe una o todas las partes involucradas; si se ha entregado cheque, jaque mate, doble cheque, jaque mate o estancamiento; si se ha producido una captura pasajera; la posición inicial La posición final.
- Es posible que no tenga información sobre la repetición en su notación.
Por lo tanto, siempre que se cumplan estos criterios, me complace aceptar, siempre y cuando especifique en su respuesta, su sistema de notación. Esto podría ser, por ejemplo, 0 filas indexadas, tuplas de columnas o lo que tenga sentido para su programa.
Notación coordinada
La notación coordinada es una notación que describe puramente los movimientos como un sistema de coordenadas.
Un movimiento se describe primero como la coordenada inicial del conjunto {A1-H8}
y luego la coordenada de destino nuevamente desde el mismo conjunto. Así se vería el Gambito del Rey (como una colección de cadenas)
{"E2-E4","E7-E5","F2-F4"}
Creo que es la mejor notación para usar en este problema porque no está llena de información extraña como si se ha producido un control o cuál es el tipo de movimiento de la pieza. Como se mencionó anteriormente, la notación puede ser de su elección, por lo que podría usar otra notación, por ejemplo, notación algebraica o podría adaptar esta notación (por ejemplo, eliminar los guiones o tomar como una lista de tuplas)
Reglas:
- Usted debe no considerar si una posición o movimiento es válido, solamente si causa la repetición
- Puede suponer que la promoción de castillos y peones no producirán .
- Debe tomar una lista de cadenas como entrada y salida de un valor verdadero o falso correspondiente a si la tercera (o más) repetición se produjo en el movimiento final
- El juego siempre comienza en la posición inicial estándar para el ajedrez. La posición inicial puede contar para la repetición.
- El sorteo por repetición no se ha producido si la posición no se repite en el movimiento final
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolfing. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Las reglas estándar se aplican a su respuesta con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba
Debe devolver valores verdaderos para:
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}
Y los valores de falsey para:
{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}
C6-B8
la posición inicial ha ocurrido tres veces.