Algoritmo per produrre enigmi "Lady o Tiger"?


8

Qual è il mio problema:

C'è un puzzle di Raymond Smullyan che funziona in questo modo: sei in una stanza con molte porte. Dietro alcune di quelle porte, ci sono donne; dietro gli altri ci sono le tigri. Il tuo obiettivo è quello di scegliere una delle porte giuste (quelle con le donne). Su ogni porta, c'è un cartello che dice qualcosa come C'è una signora dietro questa porta o C'è un leone dietro la porta II e VI e così via. Ora, hai anche alcune informazioni aggiuntive come Solo uno dei segni dice la verità o Il segno su una porta è vero solo se c'è una signora dietro quella porta e così via. Ad esempio, il primo puzzle va così:

Ci sono due porte con un segno ciascuna. Uno dei segni è vero, l'altro è 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 |
 ---------------------    ---------------------

Dietro quale porta è una signora?

Ora, arrivando all'argomento di questa domanda: sto cercando possibili modi per generare automaticamente tali puzzle. L'obiettivo (molto lontano) è quello di costruire un algoritmo che richiede, come parametri, il numero di porte (e forse la difficoltà del puzzle risultante) e crea testi corrispondenti per le porte.

Quello che ho provato finora:

Non molto, dato che non so davvero da dove cominciare. È facile creare un modello per il testo sui segni ed è anche facile assegnare casualmente affermazioni vere e false a quei segni, corrispondenti alla regola vera-falsa che usi (ad esempio, solo un segno dice la verità ). Ma questa è la parte in cui diventa difficile: come creare un puzzle che è risolvibile e ha una soluzione unica ? La mia prima idea è stata quella di creare un puzzle casuale e utilizzare il backtracking per cercare soluzioni. Ma in questo modo, potrebbe volerci molto tempo prima che l'algoritmo abbia finalmente trovato un insieme funzionante di segni. Inoltre, in questo modo non puoi facilmente determinare quanto sia difficile un determinato puzzle.

Quindi, riassumendolo: hai qualche idea, qualche link utile, ecc.? Qualsiasi aiuto è apprezzato, non mi aspetto che qualcuno pubblichi una soluzione perfetta e completa per il mio problema.

(Nota: inizialmente avevo posto la seguente domanda su StackOverflow ma mi è stato detto che avrei avuto maggiori probabilità di ottenere una risposta qui!)



1
In effetti, penso che potresti ottenere risposte migliori in matematica SE. Direi che questa è una variante del problema SAT, che è ingenuamente O (2 ^ n), il che significa che la soluzione di un problema può essere dimostrata in modo molto rapido tramite la forza bruta alle porte da 20 ish. Direi che la difficoltà è direttamente legata alla lunghezza dell'espressione e creerei espressioni in modo semi-casuale con schemi di vincoli predefiniti.
Panda Pajama,

Si può essere interessati a questa domanda così
Panda pigiama

Risposte:


1

La generazione del testo è un problema separato, ma forse per un numero limitato di porte potresti usare una mappa di Karnaugh. Scegli una cella casuale che sarà vera, tutti gli altri saranno falsi, quindi utilizza un algoritmo appropriato per trovare l'espressione booleana più efficiente che corrisponda a quella mappa, ad es.

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


Questo troverà un puzzle con una soluzione valida, ma penso che non possa garantire che avrà una soluzione unica ... O no?
Panda Pajama,

Impostando ogni altra cella su zero, garantisci che non ci saranno altre soluzioni, credo.
David Cummins,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.