Se le proporciona un conjunto de coordenadas cartesianas enteras, únicas, 2d, arbitrarias: por ejemplo, [(0,0), (0,1), (1,0)]
Encuentre la ruta más larga posible de este conjunto de coordenadas, con la restricción de que una coordenada se puede "visitar" solo una vez. (Y no "regresas" a la coordenada en la que empezaste).
Importante:
No puede "pasar" una coordenada o alrededor de ella. Por ejemplo, en el ejemplo de la última nota (Rectángulo), no puede moverse de D a A sin visitar C (que puede ser una nueva visita, invalidando la longitud así encontrada). Esto fue señalado por @FryAmTheEggman.
Entrada de función: matriz de coordenadas cartesianas en 2D
Salida de función: longitud máxima solamente
Ganador: el código más corto gana, sin retenciones prohibidas (no es el más eficiente en el espacio-tiempo)
Ejemplos
1 : en el caso que se muestra arriba, la ruta más larga sin coordenadas "visitadas" dos veces es A -> B -> O (u OBA, o BAO), y la longitud de la ruta es sqrt (2) + 1 = 2.414
2 : en el caso que se muestra arriba, la ruta más larga sin coordenadas "visitadas" dos veces es ABOC (y obviamente COBA, OCAB, etc.), y para el cuadrado de la unidad que se muestra, calcula a sqrt (2) + sqrt (2) + 1 = 3.828.
Nota: Aquí hay un caso de prueba adicional que no es tan trivial como los dos ejemplos anteriores. Este es un rectángulo formado por 6 coordenadas:
Aquí, el camino más largo es: A -> E -> C -> O -> D -> B, que es 8.7147
(máximo de diagonales caminadas y sin bordes atravesados)
fuente
Respuestas:
Pyth,
1051031009286 bytesPruébalo aquí!
fuente
Mathematica, 139 bytes
Caso de prueba
fuente
Perl,
341322318 bytesEl código admite hasta 100 puntos. Como produce todas las permutaciones de puntos posibles, 100 puntos requerirían al menos 3.7 × 10 134 yottabytes de memoria (12 puntos usarían 1.8Gb).
Comentado:
Casos de prueba:
$"
, y algunos en líneafuente