Encuentre un problema que le interese resolver. Luego ve más allá de resolverlo. Para mí, fueron juegos de rompecabezas. ¿Hay algún juego de rompecabezas para el que te gustaría conocer la solución? Para resumir, una noche, apuesto a un amigo que se sienta a cenar en Cracker Barrel que podría escribir un programa para encontrar todas las soluciones al juego de rompecabezas de clavijas solitario que estábamos jugando. Entonces lo hice. Al principio lo hice horriblemente, usando un algoritmo recursivo que tomó horas [en un laboratorio de computación de Sun in UMich] para encontrar las 146,328 soluciones [para cualquier punto de partida]. Luego me senté y apliqué algunos conocimientos de estructura de datos y algunas observaciones sobre el juego a la solución, y descubrí que podía representar el conjunto completo de soluciones como un conjunto de contenedores, siendo el contenedor superior “14 piezas en el tablero”, y el contenedor inferior es “una pieza en el tablero”. Las piezas se pueden representar por 1 bit, ya que están allí o no. Los movimientos pueden ser representados por XOR de bits particulares. Luego, el problema se reduce a recorrer cada uno de los contenedores de arriba a abajo, aplicando todos los movimientos posibles a todas las configuraciones de tablero [el contenedor superior se siembra con las posibles posiciones iniciales del juego] e insertando nuevos tableros en el contenedor de abajo si Todavía no se han encontrado.
Me divertí mucho con eso. Luego fui más allá del solucionador e implementé el juego en sí. Con los años he usado el juego para aprender Java, luego MFC. Ahora estoy al punto de poder aprender un nuevo lenguaje o paradigma del kit de herramientas de interfaz de usuario sin la muleta del juego de rompecabezas, pero aún así sería un ejercicio divertido para mí implementarlo en otros idiomas para aprenderlos, o, como en mi pregunta, para encontrar nuevos juegos de rompecabezas con solucionadores para implementar en cualquier idioma.