Skip to content

Caballeros y escuderos: acertijo 8

Jesús Arroyo Torrens edited this page May 29, 2017 · 4 revisions

Enunciado

En la isla de los caballeros y los escuderos se encuentran tres habitantes: A, B y C. Supóngase que esta vez el extranjero, en lugar de preguntarle a A por lo que éste era, le dijese: «¿Cuántos caballeros hay entre vosotros?». De nuevo, la respuesta de A es ininteligible. Entonces el extranjero pregunta a B, «¿Qué ha dicho A?». Y B replica, «A ha dicho que hay un caballero entre nosotros». Y C por su parte dice, «¡No creas a B, que está mintiendo!». Ahora, ¿qué son B y C?


Descripción formal

En la isla de los caballeros y los escuderos se encuentran tres habitantes: A, B y C.

Tenemos tres parámetros de entrada: A, B y C.


Supóngase que esta vez el extranjero, en lugar de preguntarle a A por lo que éste era, le dijese: «¿Cuántos caballeros hay entre vosotros?». De nuevo, la respuesta de A es ininteligible.

Igual que en el caso anterior, la respuesta de A no se comprende por lo que no genera ninguna una ecuación.


Entonces el extranjero pregunta a B, «¿Qué ha dicho A?». Y B replica, «A ha dicho que hay un caballero entre nosotros».

B dice una única frase Q (+info):

B ↔ Q

En esta frase Q, B afirma que A ha dicho una frase P (A ↔ P) en la que se asegura que hay sólamente un caballero entre los tres. Para ello hay que contemplar los tres posibles casos: que A sea el caballero, que B sea el caballero o que C sea el caballero: (P = (A ∧ ¬B ∧ ¬C) ∨ (¬A ∧ B ∧ ¬C) ∨ (¬A ∧ ¬B ∧ C)). Por lo tanto:

B: Q = (A ↔ (A ∧ ¬B ∧ ¬C) ∨ (¬A ∧ B ∧ ¬C) ∨ (¬A ∧ ¬B ∧ C))


Y C por su parte dice, «¡No creas a B, que está mintiendo!».

C dice una única frase R (+info):

C ↔ R

La sentencia R afirma que B está mintiendo, es decir, B es un escudero:

C: R = ¬B


Deben ser coherentes ambas sentencias:

B ↔ Q ∧ C ↔ R


Ahora, ¿qué son B y C?

Circuito digital

Entradas y salidas

Añadimos las entradas A, B y C (conectadas a LED0, LED1 y LED2, respectivamente) y una señal de salida S (conectada al LED7) que se activará cuando el circuito encuentre una solución.

B ↔ Q
C ↔ R

Como tenemos dos operaciones bicondicionales utilizaremos dos puertas XNOR (+info).

B ↔ Q ∧ C ↔ R

Esta ecuación se representa mediante una puerta AND (+info).

B: Q = (A ↔ (A ∧ ¬B ∧ ¬C) ∨ (¬A ∧ B ∧ ¬C) ∨ (¬A ∧ ¬B ∧ C))

La sentencia Q se representa con una puerta XNOR y una operación combinacional compleja. Esta operación se ha encapsulado en el bloque combinacional ONE 1 con 3 entradas y una salida.

En la implementación del bloque ONE 1, que detecta cuándo hay una y sólo una salida activa de las tres posibles, se han utilizado puertas AND y OR de 3 bit. Éstas puertas tienen el mismo comportamiento que las de 2 bit.

Descargar circuito ONE-1

C: R = ¬B

La sentencia R se representa con otra puerta NOT (+info) sobre la señal B.

Descargar circuito en Icestudio

Resolución en FPGA

Para resolver el circuito añadimos un bloque que comprueba todas las posibilidades y encuentra la solución o soluciones correctas (+info). Sintetizamos este circuito en la FPGA.

Descargar circuito de pruebas en Icestudio

Solución

Al sintetizar y descargar el circuito obtenemos dos soluciones válidas:

(0, 0, 1)
(1, 0, 1)

Tenemos que (A, B, C) = (?, 0, 1). No podemos determinar qué es A pero sí sabemos que B es un escudero y C es un caballero.

Conclusiones

  • Una puerta AND de 3 bit tiene el mismo comportamiento que una AND de 2 bit
  • Una puerta OR de 3 bit tiene el mismo comportamiento que una OR de 2 bit
  • Un circuito de puertas lógicas forma un circuito combinacional

Referencias

  • Raymond Smuyllan, ¿Cómo se llama este libro? Capítulo 3: Caballeros y Escuderos [27] (1989) Ediciones Cátedra, S.A. [1]