Skip to content

Caballeros y escuderos: acertijo 10

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

Enunciado

En la isla de los caballeros y los escuderos se encuentran tres habitantes: A, B y C. A dice: «Todos nosotros somos escuderos», B añade: «Uno de nosotros, y sólo uno, es un escudero». ¿Puede determinarse lo que es B? ¿Puede determinarse lo que es 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.


A dice: «Todos nosotros somos escuderos»,

A dice una única frase P (+info):

A ↔ P

Al igual que en el caso anterior, esta frase se puede representar con la siguiente ecuación:

A: P = ¬A ∧ ¬B ∧ ¬C = ¬(A ∨ B ∨ C)


B añade: «Uno de nosotros, y sólo uno, es un escudero».

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

B ↔ Q

En esta frase Q, B asegura que sólo hay un escudero entre ellos. Es decir, el escudero puede ser o A o B o C:

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


Deben ser coherentes ambas sentencias:

A ↔ P ∧ B ↔ Q


¿Puede determinarse lo que es B? ¿Puede determinarse lo que es 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.

A ↔ P
B ↔ Q

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

A ↔ P ∧ B ↔ Q

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

A: P = ¬A ∧ ¬B ∧ ¬C = ¬(A ∨ B ∨ C)

La frase P se puede representar de dos formas. Vamos a utilizar la más simplificada empleando una puerta NOR (+info).

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

La sentencia Q se representa con un bloque ONE 0. Éste bloque, implementado con puertas AND y OR de 3 bit detecta si sólamente una de las entradas es 0.

Descargar circuito ONE-0

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)
(0, 1, 1)

Por lo tanto (A, B, C) = (0, ?, 1), es decir no podemos afirmar lo que es B pero sabemos que A es un escudero y C es un caballero.

Conclusiones

En este curso hemos creado circuitos digitales que encuentran soluciones a problemas lógicos.

Esta forma es mucho más rápida y eficiente que cualquier programa, en igualdad de frecuencia de reloj, ya que no requiere de un procesador que ejecute instrucciones, sino que se trata de un simple circuito secuencial.

Os animo a investigar esta metodología con circuitos más complejos para ver hasta dónde se puede llegar, pero sobre todo para pasar un buen rato pensando en hardware!

Más información en: http://FPGAwars.github.io

Referencias

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