Resolviendo variantes del rompecabezas de ojos azules

8

El rompecabezas original "Blue Eyes" se da aquí (y a continuación).

Un grupo de personas con una variedad de colores de ojos viven en una isla. Todos son lógicos perfectos: si una conclusión se puede deducir lógicamente, lo harán al instante. Nadie sabe el color de sus ojos. Todas las noches a medianoche, un ferry se detiene en la isla. Todos los isleños que hayan descubierto el color de sus propios ojos abandonan la isla y el resto se queda. Todos pueden ver a todos los demás en todo momento y llevar un recuento de la cantidad de personas que ven con cada color de ojos (excluyéndose a sí mismos), pero de lo contrario no pueden comunicarse. Todos en la isla conocen todas las reglas en este párrafo.

En esta isla hay 100 personas de ojos azules, 100 personas de ojos marrones y el Guru (ella tiene los ojos verdes). Por lo tanto, cualquier persona de ojos azules puede ver a 100 personas con ojos marrones y 99 personas con ojos azules (y una con ojos verdes), pero eso no le dice el color de sus ojos; por lo que él sabe, los totales podrían ser 101 marrones y 99 azules. O 100 marrones, 99 azules, y podría tener los ojos rojos.

Al Guru se le permite hablar una vez (digamos al mediodía), en un día en todos sus años interminables en la isla. De pie ante los isleños, ella dice lo siguiente:

"Puedo ver a alguien que tiene los ojos azules".

¿Quién sale de la isla y en qué noche?

La respuesta es que todos se van el centésimo día. Esto se debe a la siguiente lógica:

Si solo hay una persona de ojos azules, se irá el día 1. Si solo hay personas de dos ojos azules, nadie se irá el día 1. Después de esto, ambos se irán el día 2. Ahora si hay 3 azules de ojos azules, nadie se va el día 1. Nadie se va el día 2 tampoco. Ahora todos saben que hay 3 personas de ojos azules, porque si hubiera solo una, se habría ido el día 1 y si hay dos, ambas se habrían ido el día 2. Por lo tanto, las 3 se van el día 3.

Ahora podemos escribir una prueba inductiva de que si n personas de ojos azules requieren n días para descubrir sus colores de ojos y se van, entonces n + 1 personas de ojos azules requieren n + 1 días para hacer lo mismo.

Sin embargo, el código que escriba debe ser capaz de resolver no solo el rompecabezas original, sino también algunas variantes que requieren pasos inductivos ligeramente diferentes.

Se le dirá cuántos isleños tienen ojos azules y cuántos no. También recibirá una declaración del oráculo (un sistema de ecuaciones / inecuaciones) que todos en la isla escuchan. Debe determinar cuándo la isla estará libre de personas de ojos azules.

Las declaraciones del oráculo se usarán bpara la cantidad de personas de ojos azules y rpara la cantidad de personas que no tienen ojos azules. Las ecuaciones pueden incluir < > <= >= = + -y cualquier número entero.

Casos de prueba

Basado en este conjunto de variantes

50 50
b>=1
b<b+r

Salida: 50

La segunda ecuación no proporciona información nueva, por lo tanto, este problema se vuelve exactamente el mismo que el rompecabezas original.

100 50
b+3>=r+4

Salida: 25

100 0
b-2>8+1-1

Salida: 90

50 50
b>=10
b<=75

Salida: 41

fantasmas_en_el_código
fuente
@ Dennis ¿Está bien ahora?
ghosts_in_the_code
Creo que sí. Una aclaración menor: no se ve así en los casos de prueba, pero ¿pueden las ecuaciones (in) incluir multiplicaciones implícitas como 3b<2r?
Dennis
@ Dennis No, pero podría escribirse como en su b+b+b < r+rlugar.
ghosts_in_the_code
El tercer caso de prueba afirma que se basa en "Al menos 10 de ustedes son de ojos azules", pero en realidad se simplifica a b>10, no b>=10, por lo que la salida debería ser 90, no 91.
Anders Kaseorg
@AndersKaseorg Demasiado flojo para comprobarlo, pero te creo, por lo tanto editado.
ghosts_in_the_code

Respuestas:

1

Python 2 , 60 48 bytes

f=lambda b,r,c:all(map(eval,c))and-~f(b-1,r+1,c)

Pruébalo en línea!

Cómo funciona

Por inducción:

  • Si la composición de la isla es ( b , r ) y se sabe que ( b - 1, r + 1) no es posible, entonces el día 1, los isleños de ojos azules, viendo ( b - 1, r ), concluirán que tienen los ojos azules y se van.
  • Si la composición de la isla es ( b , r ) y se sabe que los isleños de ojos azules se habrían ido el día n si la composición fuera ( b - 1, r + 1), entonces el día n + 1, el azul- los isleños de ojos, al ver ( b - 1, r ), concluirán que tienen ojos azules y se irán.

Esta segunda inferencia falla si b = 1, pero en ese caso, el isleño de ojos azules nunca se iría si aún no lo hubiera hecho, y el caso de prueba sería inválido.

Tenga en cuenta que los isleños que no tienen ojos azules nunca se irán, en esta versión del rompecabezas, porque incluso si usan una lógica similar para concluir que no tienen ojos azules, aún no saben de qué color no azul son sus ojos. .

Anders Kaseorg
fuente