¿Qué algoritmo se usa para detectar “No más interruptores posibles, barajar” en la saga Candy Crush?

Un programa limpio de fuerza bruta que verifique los siguientes casos funcionaría;

Caso 1: Horizontal A
Para verificar si hay un posible interruptor que forma tres dulces horizontalmente, vea este diagrama


BB: se refiere a dos dulces adyacentes en color azul. Ahora, si alguno de los dulces en ‘X’ es de color azul, podrían cambiarse (con los dulces adyacentes a B horizontalmente) para formar tres dulces azules horizontalmente. No nos preocupamos por otros dulces.

Haga un pase sobre el conjunto de dulces en 2-d, si hay dos dulces adyacentes del mismo color, debe verificar las seis posiciones marcadas en X para ver si tiene el mismo color; si es así, hay un posible cambio . Del mismo modo, estas son las otras configuraciones.

Caso 2: Horizontal B
O X O
MOVER
O X O

Caso 3: Vertical A
O X O
X O X
OBO
OBO
X O X
O X O

Caso 4: Vertical B
OBO
X O X
OBO

Por lo tanto, todo lo que hay que hacer es hacer pases separados para cada uno de los casos anteriores y verificar si hay un posible cambio. Es un buen ejercicio de programación para ver si está manejando todos los casos límite de manera adecuada: límites y obstáculos. Este método simple de fuerza bruta es bastante rápido, por lo que no necesitaría optimizar en absoluto.

TL; DR – Creo que incluso la fuerza bruta simple y simple haría el truco lo suficientemente rápido.

Consideremos una tabla de Candy Crush Saga de tamaño [matemática] n [/ matemática] x [matemática] n [/ matemática]. Entonces, tenemos [math] n ^ 2 [/ math] dulces en el tablero.

Ahora, cada dulce se puede cambiar horizontal o verticalmente si no hay obstáculos. Entonces, tenemos un máximo de 4 interruptores posibles por dulce. Eso nos da [matemática] 4 n ^ 2 [/ matemática] interruptores para verificar la validez. Pero, el cambio es simétrico: el caramelo A se cambia con el caramelo B; entonces el caramelo B se cambia con el caramelo A. Por lo tanto, en realidad tenemos a lo sumo [matemáticas] 2 n ^ 2 [/ matemáticas] interruptores de caramelo distintos para verificar.

Para cada cambio ahora, tenemos que ver si el caramelo A forma una pareja, o el caramelo B forma una pareja. Una coincidencia puede formarse horizontal o verticalmente o incluso en ambos sentidos. Pero Candy Crush Saga no necesita verificar la mejor combinación. Incluso si hay una coincidencia de 5 dulces posibles, comprobar hasta una coincidencia de tamaño 3 sería suficiente para concluir que existe un posible cambio.

Como puede ver en la captura de pantalla a continuación, hay una combinación de 4 dulces posibles, pero la sugerencia que ofrece Candy Crush Saga, destaca solo la cantidad mínima de dulces que podrían hacer una posible combinación. (Afortunadamente, para el jugador, la sugerencia en la captura de pantalla resulta ser mejor que solo una combinación de 3 dulces)


Ahora volviendo a nuestro recuento: si se cambiaron el caramelo A y el caramelo B, necesitaríamos como máximo 10 comparaciones por interruptor (5 para A y 5 para B) para verificar si puede ocurrir una coincidencia – Como máximo 2 comparaciones para verificar una coincidencia a lo largo de la dirección del interruptor, como máximo 3 para verificar una coincidencia a lo largo del otro eje.

Entonces, eso nos da la cifra final: [matemáticas] 10 \ cdot 2 n ^ 2 [/ matemáticas] = (como máximo) [matemáticas] 20 n ^ 2 [/ matemáticas] comparaciones . Otros factores como: obstáculos en el tablero, dulces en los bordes y esquinas, dulces especiales pueden reducir la cantidad de comparaciones necesarias.

Considere el valor máximo de n como 20, obtenemos el número de comparaciones en el peor de los casos como 8000. Considerando las velocidades actuales del procesador, esto podría calcularse en milisegundos.

More Interesting

¿Cuál es el enfoque para resolver el problema # 168 en el Proyecto Euler (por supuesto, no la fuerza bruta)?

¿Qué papel juega la comprensión de los algoritmos y las estructuras de datos en la construcción de proyectos, conseguir un trabajo y hacer su trabajo?

Gráfico distribuido: ¿Cuál es la forma más efectiva de distribuir los nodos de un gráfico en diferentes servidores en un sistema distribuido?

¿Puede una máquina Turing aceptar una cadena de longitud 2014? ¿Por qué este problema es indecidible?

¿Por qué no ha habido un codificador indio en la región 2400+ después de Rudradev Basak, especialmente cuando la cultura de codificación en el país está en aumento?

Supongamos que tenemos una matriz 8 * 8. Cada celda tiene 0 o 1. Se le dará una ubicación y deberá encontrar todas las que se encuentran en la misma isla. ¿Los puntos se encuentran en la misma isla si un punto está en alguna de las celdas adyacentes?

¿Sigue siendo relevante el modelado de objetos, o se ha reemplazado hoy solo con datos y algoritmos?

¿Qué es una explicación intuitiva de union-find?

Actualmente estoy en USACO Gold, pero apenas puedo resolver nada. ¿Qué debo hacer para ser más competente? ¿Dominar el oro es solo una cuestión de aprender toneladas de algoritmos, o necesita más que eso?

¿Dónde se puede encontrar una foto y detalles biográficos de Burton Howard Bloom, inventor del filtro Bloom?

Cómo explicar el análisis de casos promedio del algoritmo de ordenación rápida

¿Dónde puedo aprender conceptos de recursión?

Estructuras de datos: ¿Cuál es una explicación intuitiva de los árboles rojo-negros?

¿Cuál es la solución / lógica para el patrón numérico dado?

¿Qué es el algoritmo ABC?