¿Cuál es la lógica detrás de este juego adictivo: Drench?

Creo que el juego es NP completo. Así que estás prácticamente atascado en resolverlo usando heurística. Hay una discusión aquí.

Establecí la resolución de este juego como una tarea de solo salida para el campamento de entrenamiento de la Olimpiada de Informática India en 2012. Mi solución de verificación cruzada se basó en la búsqueda de haces. La idea esencial era esta: suponga que ha encontrado movimientos L que probablemente sean prefijos de la solución óptima. De cada uno de estos, intente los 5 movimientos posibles. De este modo, terminamos con 5L posibles prefijos. De estos prefijos, elija la L que maximice alguna medida (tomé la medida como el número de celdas que se habían llenado con éxito). Con estos L, repita el proceso hasta que el tablero esté completamente lleno.

Probablemente esto no proporcione la solución óptima, pero si tomamos L grande, al menos no nos dañaremos al hacer una sola elección codiciosa. El algoritmo se puede mejorar mirando hacia adelante algunos movimientos en lugar de 1.

“¿Cuál es la lógica”:

Hay una cuadrícula con 14 filas y columnas de cuadrados.

Cada cuadrado es de un color diferente, elegido al azar (le pregunté al autor) de seis colores diferentes (también dijo que lo actualizaría para que la solución sea posible en ‘capas’, pero no entiendo cuáles son las ‘capas’ son, y no sé si se ha realizado una actualización).

Cuando comienzas el juego por primera vez, la cantidad de movimientos que puedes realizar durante el juego se ve en la esquina superior derecha de la pantalla. A medida que continúa haciendo movimientos, cada vez que realiza un movimiento, muestra el número de movimientos restantes en la esquina inferior izquierda.

El objetivo del juego es hacer que cada cuadro en el tablero sea del mismo color.

Para hacer un movimiento, elige uno de los seis colores.

Cuando haces un movimiento, esto es lo que sucede:

1) El programa encuentra la gota de color contigua a partir de la esquina superior izquierda. El blob contiguo inicial está conectado horizontal o verticalmente, desde la esquina superior izquierda. A veces es solo un cuadrado o, a veces, una forma del mismo color que está conectado a ese primer cuadrado en la esquina superior izquierda. Si es una matriz, entonces esa es la coordenada (1,1) pero si usó las coordenadas x, y podría ser (1, -1) o (1,14) dependiendo de dónde coloque el origen verticalmente.

2) Cuando eliges un color, suceden las siguientes cosas:

a) El blob conectado a la esquina superior izquierda cambia al color que elegiste

b) Como efecto secundario, el nuevo blob contiguo ahora también incluirá los cuadrados adyacentes que sean del mismo color que el color que elegiste, y los blobs que estén conectados a los cuadrados de ese blob.

c) también, ahora tiene 1 movimiento menos permitido antes de que se agote.

Esto aún no está muy claramente definido. Déjame aclararlo

Definición: Cuadrados adyacentes y conectados

Llame a dos cuadrados “adyacentes” si su distancia en la métrica de Manhattan es igual a 1, p. Ej. | X1 – x2 | + | y1 – y2 | = 1. Están “conectados” si son adyacentes y son del mismo color.

Definición: Blob

El “blob” conectado a cualquier cuadrado A dado es el conjunto de cuadrados X que satisfacen la condición …

Blob (A) = {X: X es un cuadrado, y X está conectado a A o existe una secuencia finita de cuadrados intermedios distintos M1, M2, … Mn tal que M1 está conectado a A, M2 está conectado a M1, etc. y Mn está conectado a M (n-1) y X está conectado a Mn}

Por ejemplo, podría verse así para empezar

RGGWBB …

RGWR …

YYYY …

……

Entonces, si eliges Y para comenzar, tendrás una gota más grande de Y porque el RR cambiará a Y. O si eliges G para comenzar, tendrás una gota más grande de G. Pero si eliges W para comenzar, no será ninguna mejora, porque todavía tiene los blobs del mismo tamaño que tenía cuando comenzó. ¡Eso es un desperdicio de turno!

Si logras aumentar el blob inicial para cubrir los 196 cuadrados en menos del número inicial de movimientos asignados, te dice “¡Lo hiciste!”, Lo cual es muy satisfactorio, y luego te da otro rompecabezas, que será más difícil , en promedio, porque el número asignado de movimientos se reducirá en uno.

Si usa los movimientos asignados y los cuadrados en la pantalla todavía tienen más de un color, le dará algo como “Intentar de nuevo”. y sabes que has fallado

Ahora podemos discutir cómo tener éxito en Drench.

Mi experiencia en búsquedas no es extremadamente extensa. Siempre he sido algo malo en eso. Hay algunas cosas que he intentado hacer. Juegos que he intentado programar:

1) Otelo

2) El juego donde tiras canicas en 12 platos y recoges más canicas, pero algunas se ponen en los extremos

3) una vez escribí un probador de teoremas, pero eso sería lo mejor para el problema de Zebra

Hay varios enfoques

Uno es el algoritmo ‘codicioso’, donde simplemente elegirías cualquier movimiento que te diera inmediatamente los mejores resultados. Probablemente esa no sea la mejor estrategia. A veces puede ayudar mucho elegir un color en el que solo crezca tu blob principal en 1, porque el próximo turno podrás hacer crecer tu blob principal en 10 porque hay un blob conectado realmente grande cerca.

Aquí hay otro intento de una idea: sería considerar los seis movimientos y ver cuánto más cerca podría llegar a todos los bordes. Esto es un poco difícil de contemplar. Podría hacer esto en un programa para resolver Drench:

  1. Considere cada pieza de borde y vea cuántos pasos de blob se necesitan para hacer un camino de regreso a la esquina superior izquierda. Eso hace una sola matriz de números, uno para cada blob en la pantalla, con la longitud mínima de la ruta desde ese borde hasta el origen
  2. Considere la nueva posición después de cada una de las seis opciones hipotéticamente (obviamente ignórelo si agrega cero cuadrados)
  3. Para cada una de esas nuevas posiciones, recalcule la matriz (espero que sea fácil) y vea si la respuesta máxima disminuye.

En el juego práctico, lo mejor que he empapado en un tablero son 17 movimientos, pero eso no significa mucho porque algunos tableros son mucho más fáciles de mojar que otros, debido a las manchas más grandes inicialmente.

En el juego práctico, parezco progresar en varias fases:

a) Al principio y durante el juego, trato de acercarme a gotas más largas rápidamente, para hacer que la gota principal se agrande rápidamente

b) Intento moverme hacia el centro de la cuadrícula para empezar. Esto puede ser una compensación con el primer objetivo.

c) Después de esto, hay varias ideas que me gustaría tratar de mirar un poco hacia adelante para ganar eficiencia, tratando de evitar descuidar cualquiera de las tres esquinas distantes, tratando de atacar el centro de áreas que presentan muchas pequeñas gotas cuadradas A veces, si un color es irregular, simplemente lo rodeo y limpio todas las partes irregulares hacia el final.

d) En el final del juego, con 12-6 movimientos restantes, trate de planificar el final para que se acerque lo suficiente a todos los colores del borde, y evite tener que usar el mismo color dos veces. Eliminar un color antes de llegar a 6 movimientos restantes puede ser un buen bono que muestra que vas a tener éxito.

Estoy seguro de que un programa bien escrito podría ser mucho mejor que yo en la mayoría de los casos, y evitar perder en los casos en que pierdo

Obviamente, no hay un gran premio en dinero por ganar en Drench, por lo que parece ser más divertido como un pasatiempo o un misterio. Pero sería bueno ver una buena solución.

Alguien ha publicado que el problema es NP-hard o algo así, pero es una tontería decir eso porque 14 no es igual al infinito y 14 no va al infinito si vas al sitio flashbynight.

Las posibilidades de ganar dependen del color que elija para rellenar. Debe elegir ese color para empapar el área cuyas cajas tienen más números adyacentes al área en la que está rellenando el color.


Debes elegir azul para empapar porque aumentará tu área. El siguiente debería ser amarillo.
Espero que ayuda