Antecedentes
AMENAZA ( M áquina E Ducable N oughts Un nd C rosses E Ngine) es un algoritmo de aprendizaje automático superficial rudimentario para los Ceros de juego y cruces, creadas por el informático británico Donald Michie en la década de 1960. Originalmente se implementó con 304 cajas de fósforos, cada una etiquetada con una posición de tablero y que contenía cuentas de colores (con uno de nueve colores, que representan posibles movimientos). Michie calculó que estas 304 cajas de fósforos eran suficientes para cada combinación de movimientos en el tablero.
Los más matemáticos entre ustedes pueden darse cuenta de que en realidad hay 19,683 combinaciones posibles de Noughts, Crosses y Blanks en un tablero de N&C; sin embargo, calculó formas de reducir este número (para acelerar el algoritmo y probablemente reducir las cajas de fósforos). En primer lugar, eliminó todos los movimientos no posibles, como:
-------
|X|0|X|
| |0| |
|X|X| |
-------
(dos ceros y cuatro cruces)
Luego, compensó las rotaciones. Por ejemplo, si en la caja de fósforos vemos:
-------
| |0|0|
|X| |X|
| |0| |
-------
podemos usar la misma caja para
-------
| |X| |
|0| |0|
| |X|0|
-------
Por lo tanto, las cuentas de colores antes mencionadas representan posiciones relativas, no absolutas. Por ejemplo, si dijéramos que una cuenta roja significaba en la parte superior izquierda, entonces miraríamos la imagen en la parte superior de la caja y veríamos:
-------
| |0|0|
|X| |X|
| |0| |
-------
entonces sabríamos que en el caso de que este sea el tablero, la cuenta roja significaría:
-------
|R|0|0|
|X| |X|
| |0| |
-------
Pero si este es el tablero:
-------
| |X| |
|0| |0|
| |X|0|
-------
la cuenta roja significaría
-------
| |X|R|
|0| |0|
| |X|0|
-------
Estas transformaciones se aplicaron para rotaciones e inversiones (en todas las direcciones, incluida la diagonal). Una vez más, solo necesita guardar cada caja de fósforos una vez de esta manera: ¡no haga cajas virtuales separadas para cada transformación!
Otra simplificación que hizo Michie fue asegurarse de que la computadora funciona primero. De esta forma, podría eliminar todos los movimientos de primer nivel, eliminando aproximadamente una quinta parte de las cajas restantes. Finalmente, eliminó todas las casillas de finalización del juego (ya que no se requerían más "contenidos" o movimientos en estos pasos).
Bien, ahora en el algoritmo mismo (es muy simple):
- Primero, decida qué representan los colores de las cuentas. Necesitarás 9 colores para representar cada uno de los espacios en el tablero.
- Al comienzo del juego, cada una de las 304 cajas de fósforos contiene cuentas. Si bien las cuentas son de color aleatorio (por lo que los duplicados están bien), deberían ser posibles movimientos (por lo tanto, si la imagen del estado del tablero representa una 'O' en el centro-derecha, entonces no puede usar la cuenta que representa el centro) Correcto).
- Cada vez que sea el turno de MENACE (X), encuentre la caja de fósforos con la posición actual del tablero (o alguna transformación) impresa en él.
- Abra la caja de fósforos y elija cualquier cuenta allí al azar.
- Descubra cómo se ha transformado el estado del tablero para llegar a la imagen en la caja de fósforos (por ejemplo, girado 90 grados en sentido antihorario). Luego, aplique esa transformación a la cuenta (por ejemplo, la parte superior izquierda se convierte en izquierda-izquierda).
- Coloca una X en ese cuadrado. Retire la cuenta seleccionada de la caja de fósforos. Si el cuadro se deja vacío como resultado, coloque tres cuentas al azar (posibles) en el cuadro y elija una de ellas para el movimiento.
- Repita 3-6 hasta que termine el juego.
- Si MENACE ganó el juego, revisa cada caja de cerillas que tomó MENACE. Luego, rastrea el color de la cuenta que usó en ese movimiento. Ponga dos de ese color de cuenta en la caja (para que haya la cuenta original + una más, aumentando así la probabilidad de que MENACE haga ese movimiento la próxima vez que llegue a esa posición)
- Si MENACE perdió el juego, no haga nada ( no reemplace las cuentas que sacó).
- Si MENACE dibujó el juego, reemplace la cuenta que usó en cada uno de sus movimientos, pero no agregue uno adicional, para que le quede lo que comenzó.
Esto nos deja con un algoritmo que es muy simple, pero difícil de implementar. Esto forma la base de su desafío.
Si todavía está confundido, consulte http://chalkdustmagazine.com/features/menace-machine-educable-noughts-crosses-engine/ : es lo que leí la primera vez que aprendí sobre este algoritmo
Desafío
Juega un juego de Tic-Tac-Toe con la computadora. En cada paso, muestre el contenido de todas las cajas de fósforos.
Entradas
- Al comienzo del programa, un número que indica cuántos juegos quieres jugar contra MENACE
- Luego, después del primer turno de MENACE, ingresa su movimiento como una cadena de dos caracteres, la primera letra es "L", "R" o "M" (izquierda, derecha o centro) haciendo referencia al eje Y. Luego ingresa otra letra (nuevamente, "L", "R" o "M"), esta vez refiriéndose al eje X. Repita para todos los movimientos y juegos.
Salidas
- Al comienzo de cada nuevo juego, salida "nuevo juego".
- Después de cada movimiento del jugador, saca el tablero en cualquier formato razonable. No necesita verse bonita (por ejemplo, una matriz de matrices que representan las posiciones del tablero está bien).
- Después de cada movimiento del jugador, MENACE debe hacer un movimiento. Salida del tablero después del movimiento de MENACE
- Después de cada juego, muestra el contenido de todas las 304 cajas de fósforos. Las cuentas se pueden representar con una letra, nombre de un color, carácter o cualquier cadena o número entero que desee (sin punteros, funciones anónimas, etc.).
Reglas
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
- Debo poder ingresar movimientos después de ver la respuesta de MENACE. No 'pase todos sus movimientos a esta función y observe cómo se desarrolla el juego'.
- El tablero debe ser despejado entre juegos.
- Las cajas de fósforos no deben borrarse entre juegos (esto restablecería el aprendizaje automático)
- Debes tener 304 cajas de fósforos. Cualquiera puede implementar este algoritmo con todas las 19.683 cajas de fósforos, pero el aprendizaje es lento (ya que requiere muchos juegos para obtener todos ellos con contenidos útiles).
- La salida puede estar en cualquier formato razonable, y la entrada se puede tomar según los estándares PPCG (siempre que cumpla con la regla 2). Si necesita ajustar el formato de entrada (como se describe en la sección ' Entrada '), entonces está bien siempre que tenga sentido.
- Un juego termina cuando un jugador gana (al obtener tres en fila en diagonal, horizontal o vertical) o si hay un empate (el tablero está lleno y no hay ganador)
- Si bien MENACE necesita hacer movimientos posibles (y solo tener cuentas posibles dentro de cada caja de fósforos), por el desafío no es necesario validar la entrada del usuario. Si escriben algo incorrecto, su programa puede hacer lo que sea (volverse completamente loco, arrojar un error, etc.): puede suponer que la entrada es correcta.
fuente
[[0, 2, 6], [4, 8, 4, 3, 3], [7, 7, 7, 7, 7, 7, 7, 8], [1], ... [3, 3, 5, 4]]
.Respuestas:
R , 839 bytes
Pruébalo en línea!
Una respuesta bastante larga, pero este no fue un desafío directo. El enlace TIO aquí fallará porque espera una entrada interactiva. Aquí hay una versión que juega contra un segundo jugador aleatorio que simplemente elige un lugar al azar. El resultado de esta segunda versión es solo el ganador (1, 2 o 0 para un sorteo). Las cajas de fósforos se inicializan para todas las posiciones del tablero, pero solo se usan para el 304 según la especificación. Se implementan como copias del tablero con números negativos para indicar el número de cuentas en cada posición. Experimenté con una lista de vectores según la especificación original, pero fue menos intuitiva.
Esta es una versión menos golfizada con comentarios (pero aún nombres de variables cortos). Tenga en cuenta que no imprime las cajas de fósforos porque son muy largas. Puede implementar un jugador interactivo 2, un jugador aleatorio 2 o la misma estrategia de caja de fósforos para el jugador 2.
fuente