Edición importante: Anteriormente, había un valor incorrecto en el Ejemplo 1. Se ha solucionado.
Se le proporciona una matriz bidimensional en la que cada celda contiene uno de los cuatro valores.
Ejemplos:
1 2 2 2 2 1 @ . . X X V
1 3 1 4 1 4 e . @ I C V
2 3 1 3 4 2 H H @ X I V
1 4 4 2 1 3 V C C
2 2 2 3 2 3 X X X
Los cuatro valores representan flechas direccionales (arriba, abajo, izquierda y derecha), aunque no sabe qué valor representa qué dirección.
Las flechas direccionales forman una ruta ininterrumpida que incluye todas las celdas de la matriz, aunque no sabe dónde están los puntos de inicio o finalización.
Escriba un código que determine en qué dirección representa cada uno de los cuatro valores y dónde están los puntos inicial y final.
Un valor de retorno aceptable para una matriz que contiene los valores A, B, C y D sería algo así como:
{ up: A, down: C, left: D, right: B, start: [2, 0], end: [4, 2] }
Debido a que puede atravesar el camino en ambos sentidos (de principio a fin y de final a inicio), siempre habrá más de una solución correcta, y puede haber más de dos. Suponga que las entradas que recibe (como en los ejemplos anteriores) siempre tienen al menos una solución correcta. En los casos en que hay más de una solución correcta, devolver solo una de las soluciones correctas es suficiente.
El código más corto gana. Elegiré el ganador después de 7 días o 24 horas sin una nueva presentación, lo que ocurra primero.
Incluyo soluciones a los ejemplos anteriores, pero le animo a que las verifique solo una vez que haya escrito su código:
Uno:
{arriba: 3, abajo: 1, izquierda: 4, derecha: 2, inicio: [0,0], final: [2,5]}
Dos:
{arriba: '@', abajo: 'e', izquierda: '.', derecha: 'H', inicio: [1,1], final: [0,0]}
Tres:
{arriba: 'I', abajo: 'V', izquierda: 'C', derecha: 'X', inicio: [0,2], final: [4,2]}
Respuestas:
C#
EDITAR: se corrigió una división y formato. Y agregó la clase auxiliar.
Este es el código de golf, 807 caracteres
Resultados para los tres casos de prueba:
Este es el código en bruto sin "golf", casi 4.000 caracteres:
Estos son los resultados de los tres ejemplos:
fuente
Mathematica 278
Espacios añadidos para "claridad"
Sesión y salida:
Cuál es el Vertex inicial, el Vertex final y las reglas de transición asociadas con cada símbolo.
Aquí está el código complementario para mostrar el gráfico orientado:
fuente
Mathematica (151)
Devuelve el punto de inicio, el punto final y las reglas de transición. El primer índice es fila, el segundo es columna
Tenga en cuenta que mi código funciona incluso con
{-1,0,1}~Tuples~{4,2}
. Para acelerar puede usarPermutations@{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}
en su lugar.fuente
APL (207)
No pude hacerlo más corto que Mathematica, porque no podía razonar en términos de TopologicalSort y demás. Las personas más inteligentes pueden exprimirlo aún más.
Golfizado:
Sin golf:
Ejemplos:
(Los índices comienzan en 1)
fuente