Para resolver este problema solo se necesita buscar los números repetidos en la lista de números ganadores de cada tarjeta, el mayor inconveniente de esta parte es la estructuración de los datos.
Primero colocamos en un array la información de cada tarjeta, los números ganadores y los números del juego principalmente, no es del todo necesario almacenar el número del juego ya que está ordenado de menor a mayor y se puede usar el index del array para eso. En este caso particular, Lua inicia la indexación en 1, por lo que me ahorra algunos posibles problemas.
Ahora podemos definir una función que compare un número con un array de números ganadores.
Ahora solo queda iterar por cada juego y por cada número y determinar los puntos que se obtiene en cada juego, importante iniciar la puntuación en cero, si encuentra un ganador pasa a 1, y si ya vale uno comienzas a multiplicar por 2, de esta manera cumple las condiciones requeridas.
Parte 2
En esta parte te indican que cada tarjeta te hace ganar mas tarjetas, concretamente copias de las tarjetas, por tanto deberíamos poder aplicar un método recursivo aquí.
Con esto fue suficiente para resolver el ejercicio, en mi caso tardaba mas o menos un segundo para resolverlo, pero sabía que se podía hacer mas rápido, debido a que muchos cálculos se repiten por la misma recursión, se puede mejorar utilizando memoización.
Iterando desde el final hasta el inicio, es decir, al revés, podemos evitar recalcular las puntuaciones, esto debido a que las últimas tarjetas son las que debieran tener menos copias ganadas, guardar estos totales permite posteriormente recuperarlos cuando se necesite en la siguiente iteración.
El truco está en ir sumando 1 cada vez que la función recursiva es llamada de esta manera conseguimos conseguir el total de cada tarjeta, solo quedaría determinar los puntos, que la diferencia con la primera parte es que ahora va de 1 a 1.