El acertijo numérico de Aristóteles es el desafío de poblar cada una de las 19 celdas en una cuadrícula hexagonal con un número entero único entre 1 y 19, de modo que el total a lo largo de cada eje sea 38.
Puedes imaginar el tablero de juego de esta manera:
Y el rompecabezas, en esencia, es la solución al siguiente conjunto de quince ecuaciones:
((a + b + c) == 38 && (d + e + f + g) == 38 && (h + i + j + k + l) ==
38 && (m + n + o + p) == 38 && (q + r + s) == 38 && (a + d + h) ==
38 && (b + e + i + m) == 38 && (c + f + j + n + q) ==
38 && (g + k + o + r) == 38 && (l + p + s) == 38 && (c + g + l) ==
38 && (b + f + k + p) == 38 && (a + e + j + o + s) ==
38 && (d + i + n + r) == 38 && (h + m + q) == 38)
Donde cada variable es un número único en el conjunto {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
.
Existen múltiples soluciones posibles, y son 19!
posibles combinaciones de enteros, por lo que la fuerza bruta ingenua no será práctica.
Reglas:
- Sin codificar la respuesta o buscar la respuesta en otra parte; su código necesita encontrarlo solo
- La velocidad no importa, pero debe mostrar sus resultados, por lo que el código que tarda 1000 años en ejecutarse no lo ayudará
- Encuentra todas las respuestas
- Trate las respuestas que son idénticas en rotación como idénticas
- Deduzca el 5% de su recuento total de bytes si genera los resultados en un atractivo panal
- Pocos bytes ganan
code-golf
game
hexagonal-grid
Michael Stern
fuente
fuente
Respuestas:
Haskell
295289Otra respuesta similar, usando la aritmética para obtener los hexes intermedios. A diferencia de las otras soluciones, no pruebo que esas sumas sean> 0, es suficiente probar que los hexes ordenados son iguales al rango [1..19]. a, c y h están restringidos, de modo que solo se permiten soluciones rotadas / duplicadas de forma única. La solución aparece después de unos segundos, luego hay que esperar un minuto más o menos mientras decide que no hay más.
Uso en ghci:
Editado para afeitarse algunos caracteres. 'y 0 t' produce [1..19].
fuente
x>0
cheque, porque clasifico la lista incluyendo negativos en lugar de incrementar una matriz? Por otro lado, tengo que restringir los rangos (myy a b
) para que Haskell funcione, lo que me cuesta algunos caracteres. Pero es probable que haya otro idioma que tenga un tipo incorporado que me supere trabajando de la misma manera (mirándote, Mathematica).Java
(1517 - 75.85) = 1441.15(1429 - 71.45) = 1357.55(1325 - 66.25) = 1258.75Esto fue divertido.
Imprime todas las soluciones únicas con reflejo y rotación de wrt, en un agradable panal (por lo tanto, reducción del 5%)
Tiempo de ejecución: ~ 0.122s (122 milisegundos) en mi computadora portátil de 4 años.
Código Golfed (la edición se dio cuenta de que estaba repitiendo estúpidamente mis printfs, los reduje a una sola printf para obtener el máximo golf) ( nueva edición Llamadas reducidas para configurar funciones en funciones inteligentes más pequeñas, algunas otras microoptimizaciones):
¡Disfrutar!
fuente
return;
declaración.return;
declaración arbitraria aumenta la longitud de mi código en 7, sería una locura agregarlo si la respuesta verdadera incluyera las 12 soluciones que son simplemente versiones rotadas / duplicadas entre sí. Aunque no se puede descartar la locura, en este caso, la adición dereturn;
fue intencional, y como lo describí, basado en el diálogo completo de preguntas y comentarios , que debe revisar antes de lanzar acusaciones. ¡Gracias!C, 366 bytes (
C ++ 541 450)Compilar con
gcc -std=c99 -O3
.Imprime todas las soluciones únicas de módulo de rotación y reflejo, en el formato
a b c d ...
, una por línea.Tiempo de ejecución: 0.8 segundos en mi computadora.
fuente
Matlab:
333320 caracteresEste es un enfoque bastante tonto de fuerza bruta que no utiliza la recursividad. Construye soluciones parciales en
z
, que se imprime al final. Cada columna es una solución; los elementos se enumeran az de arriba a abajo. El tiempo de ejecución es de 1-2 horas.Corriendo desde Matlab:
fuente