나는 최근 그래프 이론, 특히 하이퍼 큐브 에 대해 읽고 경로를 구성하는 흥미로운 방법에 대해 생각했습니다. 여기에 내가 생각해 낸 것이 있습니다.
당신이 알고있을 때, 당신은 구성된 모든 N-튜플을 복용하는 n 차원 하이퍼 큐브를 구성 할 수 1
및 0
그들이 한 자리에서 차이가 IFF에, 그것들을 정점으로하고 연결합니다. 이 이진수를 정수로 해석하면 정점 수를 정교하게 그래프로 나타낼 수 있습니다. 예를 들면 다음과 n=3
같습니다.
이 하이퍼 큐브를 걷고 정점에서 시작하고 싶다고 가정 해 봅시다 0
. 이제 다음에 방문 할 정점을 어떻게 결정합니까? 내가 생각해 낸 규칙은 a
당신이있는 정점 의 수를 취하고 mod(a,n)
s 비트를 뒤집고 (0 기반 색인화) 결과 정점으로 이동하는 것입니다. 공식적으로이 규칙은 다음과 같이 재귀 적으로 정의 될 수 있습니다.
a[m+1] = xor(a[m], 2^mod(a[m],n)).
이 규칙을 따르면 항상 큐브에 머물면서 가장자리를 따라 이동합니다. 결과 경로는 다음과 같습니다
당신이 볼 수 있듯이, 당신은 원 안에 걸어 것입니다! 실제로, 모든 차원과 모든 시작점에서 경로는 루프로 끝납니다. 예를 들어 n=14
과 a[0]=0
는 다음과 같습니다
열렬한 앰 블러에게는 계획된 경로의 길이가 매우 중요한 정보입니다. 따라서 작업은 하이퍼 큐브 차원을 n
시작 정점 a[0]
을 입력으로 사용하고 결과 루프의 정점 수를 출력 하는 함수 또는 프로그램을 작성하는 것 입니다.
테스트 사례
n a[0] Output
-----------------
3 0 6
14 0 50
5 6 8
17 3 346
규칙
- 표준 허점은 금지되어 있습니다
- 출력 / 입력은 적절한 형식 일 수 있습니다
a[0]
유효한 정점 이라고 가정 할 수 있습니다
채점
바이트 단위의 최단 코드가 이깁니다.
이 주제에 대한 추가 정보가 있으면 기쁘겠습니다.
a[m]
하이퍼 큐브에 있었다면 a[m+1]
너무 될 것입니다. a[0]
유효한 정점 이라고 가정 할 수 있으므로 하이퍼 큐브에 신경 쓸 필요가 없으며 규칙을 따를 필요가 없습니다.
a[m+1] = xor(a[m], 2^mod(a[m],n))
꼭짓점이 하이퍼 큐브에 속하는지 여부는 관련이 없습니다.