miércoles, enero 20, 2010

Optimiza

Apenas tengo oportunidad de reunirme con gente para disfrutar de mi colección de juegos de mesa. Así que poco a poco me voy centrando en solitarios. La semana pasada se me ocurrió un juego sencillo, diferente cada vez y con el que, si se quiere, pueden hacerse competiciones. Lo llamaremos "Optimiza" y tan sólo consta de una tabla nXn donde colocamos al azar los números desde 1 hasta n-1, n+1 veces cada uno. En la casilla que sobre al azar, se colocará el número n. (ver ejemplo para tabla de 4x4; los números 1,2 y 3 aparecen 5 veces; el 4 se coloca en la casilla que quede vacía.) El juego consiste en elegir un número de partida e ir alcanzando la mayor cantidad de casillas posibles de modo que, cuando ya no puedas mover más hayas conseguido el mayor número de puntos que puedas (sumas el valor de los números de las casillas que hayas ido visitando). Las reglas para pasar de una casilla a otra son las siguientes: - el número de casillas que has de moverte es igual a número de la casilla en la que te encuentras. - el movimiento sólo puede terminar sobre un número igual o superior al de la casilla de la que partías. - los movimientos se hacen en línea recta, tanto en vertical como en horizontal o en diagonal y si en el movimiento te sales por un lado del tablero apareces por la casilla del otro lado que correspondiera a tu movimiento (vamos, como si los lados del tablero estuvieran conectados). - no se puede terminar en una casilla que ya hayas utilizado. - Cuando ya no tengas más movimientos permitidos, se termina la partida y cuentas tus puntos. Así de sencillo. Os dejo este reto y espero que me deis vuestra mejor resultado (las letras de las casillas sirven para trazar el recorrido hecho) y si queréis mayor tensión todavía os limito el timepo a 5 minutos (paara reducir la procastinación). Mañana colgaré mi resultado. Un consejo: como las casillas que más van a puntuar son aquellas con los números más altos, yo empezaría por el mayor número he iría hacia atrás... aunque las soluciones conseguidas de esta manera no tienen por qué ser las más óptimas. Por cierto, si hay algún manitas de los ordenadores que sepa programar un algoritmo para encontrar el mejor resultado, podría compartirlo. Además, podría dar luz a las siguientes preguntas: ¿Cuántos tableros diferentes de nXn se pueden crear? ¿Cuántas soluciones diferentes tiene cada tablero? ¿Cuál (cuáles) es (son) la distribución de números en el tablero que permite un recorrido que pase por todas las casillas? Por último señalar que las variantes que se pueden hacer de este juego son tremendas: desde cambiar la cantidad de veces que repites cada número (en vez de usar n-1 números, n+1 veces, se puede pensar en utilizar n+1 números, n-1 veces...), utilizar un número por cada casilla en vez de repetirlos, , introducir casillas vacías... ¡Sudoku! ¡Tienes los días contados! :-D

6 comentarios:

  1. Tengo que releerlo, pues así de primeras no me han quedado muy claras las reglas. Pero no tiene mala pinta. Por el mismo motivo no puedo decirte lo complicado que será programarlo. Pero si llego a entenderlo, te cuento.

    ResponderEliminar
  2. Luiso, si tienes alguna duda con las reglas, pregúntalo.
    El recorrido que yo propongo es el siguiente:
    a,h,l,g,c,i,m,d,p,k
    con el que se consiguen 21 puntos.
    ¿Alguien lo ha conseguido con menos?

    ResponderEliminar
  3. La estrategia que dices de empezar por el número más alto está abocada al fracaso, porque como mucho sólo podrás ponerlo n+1 veces...mejor empezar por abajo, :-P. En cuanto a lo de las soluciones...es complicado decirlo. Probé con n=3, y la puntuación máxima es 15, y como mínimo se puede conseguir de 8 maneras distintas :-)

    ResponderEliminar
  4. Está claro que no me enteré del funcionamiento...:-) Leyendo ahora las indicaciones, veo que no sé leer...

    ResponderEliminar
  5. Matlab me dice que la puntuación máxima comenzando por el 4 en la matriz que has dado es 22, siguiendo la secuencia k,p,d,m,i,c,h,l,g,j. Aunque la puntuación más probable es 20. :-)

    ResponderEliminar