Algoritmo para producir rompecabezas 'Lady or Tiger'?


8

Cual es mi problema:

Hay un rompecabezas de Raymond Smullyan que funciona de la siguiente manera: estás en una habitación con muchas puertas. Detrás de algunas de esas puertas, hay damas; detrás de los demás, hay tigres. Su objetivo es elegir una de las puertas correctas (las que tienen las damas). En cada puerta, hay un letrero que dice algo así como: Hay una dama detrás de esta puerta o Hay un león detrás de las puertas II y VI, etc. Ahora, también tiene información adicional, como Solo uno de los letreros dice la verdad o El letrero en una puerta es verdadero solo si hay una dama detrás de esa puerta, etc. Por ejemplo, el primer rompecabezas es así:

Hay dos puertas con un letrero cada una. Uno de los signos es verdadero, el otro es falso:

 ---------------------    ---------------------
|      DOOR I         |  |      DOOR II        |
| There's a lady in   |  | In one of those     |
| this room and a     |  | rooms, there's a    |
| a tiger in the      |  | lady, in the other  |
| other one           |  | one there's a tiger |
 ---------------------    ---------------------

¿Detrás de qué puerta hay una dama?

Ahora, llegando al tema de esta pregunta: estoy buscando posibles formas de autogenerar tales rompecabezas. El objetivo (lejano) es construir un algoritmo que requiera, como parámetros, el número de puertas (y tal vez la dificultad del rompecabezas resultante) y cree los textos correspondientes para las puertas.

Lo que he probado hasta ahora:

No mucho, ya que no sé por dónde empezar. Es fácil crear un patrón para el texto en los signos y también es fácil asignar aleatoriamente declaraciones verdaderas y falsas a esos signos, correspondientes a la regla verdadero-falso que usa (por ejemplo, solo un signo dice la verdad ). Pero esa es la parte donde se pone difícil: ¿cómo crear un rompecabezas que sea solucionable y tenga una solución única ? Mi primera idea fue crear un rompecabezas aleatorio y usar el retroceso para buscar soluciones. Pero de esa manera, podría pasar mucho tiempo hasta que el algoritmo finalmente haya encontrado un conjunto de signos que funcione. Además, de esa manera no puedes determinar fácilmente qué tan difícil es un rompecabezas dado.

Entonces, resumiendo: ¿Tienes alguna idea, algún enlace útil, etc.? Cualquier ayuda es apreciada, no espero que nadie publique una solución perfecta y completa para mi problema.

(Nota: ¡Originalmente hice la siguiente pregunta sobre stackoverflow pero me dijeron que sería más probable que obtuviera una respuesta aquí!)



1
De hecho, creo que puede obtener mejores respuestas en el SE de matemáticas. Yo diría que esta es una variante del problema SAT, que es ingenuamente O (2 ^ n), lo que significa que la solución de un problema puede probarse de manera única a través de la fuerza bruta en puertas de 20 ish muy rápidamente. Diría que la dificultad está directamente relacionada con la longitud de la expresión, y crearía expresiones de forma semialeatoria con patrones de restricción predefinidos.
Panda Pyjama

Usted puede estar interesado en esta cuestión , así
Panda pijama

Respuestas:


1

La generación de texto es un tema aparte, pero para una pequeña cantidad de puertas quizás podría usar un mapa de Karnaugh. Elija una celda aleatoria que sea verdadera, todas las demás serán falsas, luego use un algoritmo apropiado para encontrar la expresión booleana más eficiente que coincida con ese mapa, por ejemplo

http://www.codeproject.com/Articles/37031/Karnaugh-Map-Minimizer-3-Variables


Eso encontrará un rompecabezas con una solución válida, pero creo que no puedo garantizar que tendrá una solución única ... ¿O sí?
Panda Pijama

Al establecer cualquier otra celda como cero, garantiza que no habrá otras soluciones, creo.
David Cummins
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.