Secciones de la página

Juegos


Constraint. Queen


3d. SquaresPuzzle


TowerHanoi. Recursive


WordSearch. LetterSoup


Rae. Lemario

Tol

Artículos del sitio

Presentación de Tol

Todos los programas

Simuladores visuales

Sitios que me gustan

Por categorías

Algoritmia

Búsqueda y ordenación

Computación fisiológica

Editorial y edición

Gráficos de datos

Herramientas y utilidades

Hipertexto

Informática forense

Lectura óptica de datos

Metaprogramación

No determinista

Ofimática

Recursión e iteración

Reglas y restricciones

Series y estadística









Programas sobre juegos

Programas sobre juegos, que juegan o resuelven juegos. Este tipo de programas suele ser un buena fuente de algoritmos, como por ejemplo, de métodos de busqueda.

A continuación se expone un breve resumen de cada uno de los progamas y, en cada programa, pulsando sobre el botón azul con flecha, a la derecha del título, se accede a su código completo.

make.tol de Constraint.Queen

Solucionador del juego de las 8 reinas en un tablero de ajedrez como un sistema de restricciones con 3 componentes: a) restriccion que hay que cumplir, que es condicion logica, b) accion, que es una funcion correctora, c) reaccion, que es una funcion de backtrack frente a ciclos. Es un solucionador, programado de forma iterativa, desarrollado en un

Solucionador del juego de las 8 reinas en un tablero de ajedrez como un sistema de restricciones con 3 componentes: a) restriccion que hay que cumplir, que es condicion logica, b) accion, que es una funcion correctora, c) reaccion, que es una funcion de backtrack frente a ciclos. Es un solucionador, programado de forma iterativa, desarrollado en un solo fichero Tol en el que se declaran: a) todas las funciones para las reinas, b) para sus restricciones de no estar ni en la misma fila ni en diagonal y c) que asume como punto de partida que cada reina esta en una columna diferente a las otras. Este metodo iterativo que: a) para guardar memoria del estado en curso utiliza la reasignacion := de Tol y b) ademas tiene una variable de memoria de texto, ver seccion blackboard, que conserva todos los estados del proceso de solucion. La memoria (QueMemory) permite detectar ciclos y ademas generar una traza para que un simulador Javascript reproduzca visualmente el proceso de resolucion en Tol. El contenido de la memoria a partir de un estado inicial INI podria ser el siguiente 11111111INIT| 12111111A2:2| 13111111A2:3| 13211111A3:2|... 13524111R6:1|... como resultado de aplicar acciones (A) y reacciones (R) que mueven una reina a una fila, por ejemplo, A2:3, es la accion de mover la reina 2 a la fila 3. Esta comprobado el funcionamiento de Constraint.Queen para las versiones de Tol 1.1.5, 1.1.6 y 2.0.1, pero funciona con la version 1.1.1. Una posible razon son los 5 usos de la reasignacion := que se realizadan en este programa Tol cuando lo usual, y recomendable, es ninguno.

El programa Constraint.Queen realiza 3 funciones principales: a) Resuelve el problema clasico con las 8 reinas en la primera fila como posicion de partida. b) Tambien se autoplantea problemas, generando distribuciones al azar de las 8 reinas en diferentes filas, aunque cada una en su columna, y busca una solucion a partir de esa distribucion al azar de las 8 reinas sobre el tablero de ajedrez. Con ello es capaz de encontrar las 92 posibles soluciones al problema, si bien en la literatura se consideran que son 12 las unicas, pues las 92 se pueden generar mediante rotaciones y simetrias de las 12 unicas. Ha de hacerse notar que desde posiciones al azar no todas las 92 soluciones parecen ocurrir de forma equiprobable, si bien, esto es solo una intuicion producto de la ejecucion reiterada de este solucionador. c) Finalmente, Constraint.Queen, es capaz de generar una traza en lenguaje Javascript, en base a un array de pasos para cada caso resuelto y un array con todos los casos (hasta 92), para que un simulador programado en Javascript pueda reproducir el proceso de resolucion de cada caso desde una posicion al azar. Por lo que el numero de pasos de cada caso depende de la distancia de la posicion inicial al azar a la solucion alcanzable.

make.tol de 3d.SquaresPuzzle

Solucionador del juego llamado 3D Squares Puzzle. Resuelve de forma recursiva un puzle de 9 piezas que, a pesar de su aparente sencillez, no es trivial. Encuentra 4 soluciones que, en el fondo, son la misma solucion pero con 1, 2 o 3 rotaciones de 90 grados. Las piezas de este puzle se simulan mediante tiras de 3x3 caracteres cada una y, en vez de

Solucionador del juego llamado 3D Squares Puzzle. Resuelve de forma recursiva un puzle de 9 piezas que, a pesar de su aparente sencillez, no es trivial. Encuentra 4 soluciones que, en el fondo, son la misma solucion pero con 1, 2 o 3 rotaciones de 90 grados. Las piezas de este puzle se simulan mediante tiras de 3x3 caracteres cada una y, en vez de codificar el tipo de insecto, se utilizan letras para el color fundamental del insecto, asi por ejemplo, V, verde mayuscula, para la cabeza del saltamontes verde y v, verde minuscula, para el cuerpo del saltamontes verde o A, amarillo mayuscula, para la cabeza del abejorro amarillo y a, amarillo minuscula, para el cuerpo del abejorro amarillo. Todo el codigo fuente de este solucionador esta desarrollado en un unico fichero que consta de varios grupos de funciones: a) funciones basicas, b) fuenciones de piezas, c) funciones de variaciones de piezas (giros) y d) funciones de busqueda de soluciones.

La salida de este programa solucionador, si en la funciones SolCua() se quita el comentario a la funcion View() y adecuadamente transformada, permite la reproduccion del proceso de busqueda completo con Javascript y el conjunto de las piezas reales, ya no con mapas de caracteres.

make.tol de TowerHanoi.Recursive

TowerHanoi.Recursive es un programa que resuelve de forma recursiva el problema conocido como de las Torres de Hanoi. Este problema se utiliza a menudo en programación para poner en práctica la programación recursiva como sucede en el presente caso. Este programa se estructura en base a un fichero principal make.tol que contiene tanto la definicion

TowerHanoi.Recursive es un programa que resuelve de forma recursiva el problema conocido como de las Torres de Hanoi. Este problema se utiliza a menudo en programación para poner en práctica la programación recursiva como sucede en el presente caso. Este programa se estructura en base a un fichero principal make.tol que contiene tanto la definicion de las variables como las funciones de resolución y funciones auxiliares, siendo la función principal de resolución HnoSolve(). El funcionamiento de este programa se ha probado para las versiones de Tol 1.1.1, 1.1.5, 1.1.6 y 2.0.1.

En las Torres de Hanoi a) el primer palo es la torre de partida, b) el último palo es la torre de destino y c) el palo de en medio puede considerarse de intercambio entre la torre de partida y la torre de destino. En el caso general el número de discos puede ser cualquiera, 1 ó 2, que son de solución trivial y 3, 4, 5, 6, 7, 8, ..., N, siendo 8 el número más clásico. Dado un algoritmo de resolución determinado, por ejemplo, el que utiliza TowerHanoi.Recursive o cualquier otro recursivo, el tiempo de resolución crece de forma exponencial con el número de discos. El número de movimientos mínimo a realizar para resolver el problema de la forma recursiva, que es en la que se ha programado TowerHanoi.Recursive, es de 2 elevado al número de discos menos 1. Esto es, para el caso de, por ejemplo, 5 discos es de, (2^5)-1, 31 pasos o 32 estados contando con el estado inicial de partida. Este programa TowerHanoi.Recursive incluye un función de medida de tiempos llamada HnoTime() que permite evaluar este comportamiento exponencial y que retorna una tabla de numero de discos, desde un valor inicial a uno final, y el tiempo en segundos que se ha sido necesario emplear en cada caso de resolución. Este cálculo de tiempos que realiza HnoTime() se hace sin visualizar por pantalla los movimientos para cronometrar, de esta forma, sólo el tiempo de proceso puro.

make.tol de WordSearch.LetterSoup

WordSearch.LetterSoup es un programa que busca las palabras de un conjunto dentro de una sopa de letras que se especifica como un rectangulo de caracteres. La busqueda la realiza en todas las direcciones horizontal, vertical y en las 2 diagonales y en todos los sentidos posibles, de izquierda a derecha, de derecha a izquierda, de arriba hacia abajo

WordSearch.LetterSoup es un programa que busca las palabras de un conjunto dentro de una sopa de letras que se especifica como un rectangulo de caracteres. La busqueda la realiza en todas las direcciones horizontal, vertical y en las 2 diagonales y en todos los sentidos posibles, de izquierda a derecha, de derecha a izquierda, de arriba hacia abajo y de abajo hacia arriba, en total son 8 las posibles formas en las que puede aparecer una palabra. Es un programa desarrollado en un solo fichero Tol y que funciona en todas las versiones del lenguaje de programacion Tol en las que se ha probado.

WordSearch.LetterSoup para optimizar su funcionamiento crea, a partir de la tabla que forma la sopa de letras, un pequeño indice, donde para cada letra que aparece en la sopa de letra proporciona informacion de las coordenasas de fila y columna donde esta esa letra. Ello permite que dada una palabra no haya que procesar toda la tabla, sino solo aquellas coordenadas donde aparece su letra inicial. En cada coordenada donde aparece la inicial de la palabra la busqueda se realiza en estrella, en las 8 forma que generan la combinacion de las horizontales, verticales y las 2 diagonales en sus 2 sentidos, esto es, (1+1+2)*2=8 formas: a) CreateIndex(), se encarga de la construccion de este indice que es un conjunto de tablas donde cada tabla se asocia a una letra y en cada fila se informa de la letra, la fila y la columna, para ello se emplea la funcion Tol Classify(). b) FindLetter(), es la funcion que realiza la busqueda de las coordenadas de una letra en el indice, para ello se apoya en la funcion Tol llamada Select(). c) Las funciones WordMatch() y FindWord() se encargan de realizar la busqueda de la palabra conociendo las coordenadas de su letra inicial.

make.tol de Rae.Lemario

Programa selector de palabras, de entre las contenidas en un lemario, por determinadas condiciones, por ejemplo, por ser palindromos, por contener todas las vocales o ser todas sus letras diferentes. Ejemplos de lemarios que este programa puede manejar son los de la Real Academia Española, que de sus siglas Rae este programa toma su nombre. Este

Programa selector de palabras, de entre las contenidas en un lemario, por determinadas condiciones, por ejemplo, por ser palindromos, por contener todas las vocales o ser todas sus letras diferentes. Ejemplos de lemarios que este programa puede manejar son los de la Real Academia Española, que de sus siglas Rae este programa toma su nombre.

Las funciones de seleccion de este programa Rae.Lemario tienen diversos modos de funcionamiento, a veces seleccionables mediante parametros, como por ejemplo: a) la seleccion a partir de cierta longitud de la palabra, b) la distincion o no entre mayusculas y minusculas, c) la distincion o no entre vocales acentuadas o no acentuadas y con dieresis, etc. Esta parametrizacion no es general en todas las funciones que, a su vez, se pueden ejecutar o no mediante un If() de control. Finalmente, hay una funcion que puede ejecutarse a la terminacion que, con todas las selecciones realizadas por las funciones del programa, construye un nuevo lemario con todos aquellos terminos, del lemario de entrada, que cumplen al menos una de las caracteristicas seleccionadas, este fichero podria considerarse un lemario de palabras curiosas.

2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio

Tol