Recientemente leí sobre teoría de grafos, especialmente hipercubos y pensé en formas interesantes de construir caminos en ellos. Esto es lo que se me ocurrió.
Como puede saber, puede construir un hipercubo n-dimensional tomando todas las n-tuplas que consisten en 1
y 0
como vértices y conectarlos, si difieren en un dígito. Si interpreta estos dígitos binarios como un número entero, termina con un gráfico con vértices bien numerados. Por ejemplo para n=3
:
Digamos que desea dar un paseo por este hipercubo y comenzar en el vértice 0
. Ahora, ¿cómo determina qué vértice desea visitar a continuación? La regla que se me ocurrió es tomar el número a
del vértice en el que se encuentra, voltear su mod(a,n)
bit s (indexación basada en cero) e ir al vértice resultante. Formalmente, esta regla puede definirse recursivamente como
a[m+1] = xor(a[m], 2^mod(a[m],n)).
Al seguir esta regla, siempre permanecerá en el cubo y viajará a lo largo de los bordes. El camino resultante se ve así
Como puedes ver, ¡caminarás en círculo! De hecho, en todas las dimensiones y para todos los puntos de partida, su camino terminará en un bucle. Por ejemplo para n=14
y a[0]=0
se ve así
Para el ambicioso ambler, la longitud de su ruta planeada es una información bastante crucial. Entonces, su trabajo es escribir una función o un programa que tome la dimensión del hipercubo n
como el vértice inicial a[0]
como entradas y genere el número de vértices en el bucle resultante.
Casos de prueba
n a[0] Output
-----------------
3 0 6
14 0 50
5 6 8
17 3 346
Reglas
- Las lagunas estándar están prohibidas
- La salida / entrada puede estar en cualquier formato adecuado
- Puede asumir
a[0]
que es un vértice válido
Puntuación
El código más corto en bytes gana.
Si tiene información adicional sobre este tema, ¡me encantaría saberlo!
a[m]
estaba en el hipercubo, también a[m+1]
lo estará. Y como puede suponer a[0]
que es un vértice válido, prácticamente no necesita preocuparse por nada de hipercubos y simplemente seguir la regla.
a[m+1] = xor(a[m], 2^mod(a[m],n))
, es irrelevante si los vértices pertenecen a un hipercubo, ¿verdad?