Gần đây tôi đã đọc về lý thuyết đồ thị, đặc biệt là hypercubes và nghĩ về những cách thú vị để xây dựng đường dẫn trên chúng. Đây là những gì tôi nghĩ ra.
Như bạn có thể biết, bạn có thể xây dựng một hypercube n chiều bằng cách lấy tất cả các n-tup bao gồm 1
và 0
làm các đỉnh và kết nối chúng, nếu chúng khác nhau trong một chữ số. Nếu bạn diễn giải các chữ số nhị phân này dưới dạng một số nguyên, bạn sẽ kết thúc bằng một biểu đồ với các đỉnh được đánh số độc đáo. Ví dụ cho n=3
:
Giả sử bạn muốn đi bộ trên hypercube này và bắt đầu từ đỉnh 0
. Bây giờ, làm thế nào để bạn xác định đỉnh nào bạn muốn ghé thăm tiếp theo? Quy tắc tôi đã đưa ra là lấy số a
đỉnh bạn đang bật, lật mod(a,n)
bit của nó (lập chỉ mục dựa trên số không) và đi đến đỉnh kết quả. Chính thức quy tắc này có thể được định nghĩa đệ quy là
a[m+1] = xor(a[m], 2^mod(a[m],n)).
Theo quy tắc này, bạn sẽ luôn ở trên khối lập phương và đi dọc theo các cạnh. Đường dẫn kết quả trông như thế này
Như bạn thấy, bạn sẽ đi theo vòng tròn! Trong thực tế, trong tất cả các chiều và cho tất cả các điểm bắt đầu, đường dẫn của bạn sẽ kết thúc trong một vòng lặp. Ví dụ cho n=14
và a[0]=0
nó trông như thế này
Đối với những người đam mê cuồng nhiệt, chiều dài của tuyến đường theo kế hoạch của anh ta là một thông tin khá quan trọng. Vì vậy, công việc của bạn là viết một hàm hoặc một chương trình lấy kích thước hypercube n
một đỉnh bắt đầu a[0]
làm đầu vào và xuất số lượng đỉnh trong vòng lặp kết quả.
Các trường hợp thử nghiệm
n a[0] Output
-----------------
3 0 6
14 0 50
5 6 8
17 3 346
Quy tắc
- Sơ hở tiêu chuẩn bị cấm
- Đầu ra / Đầu vào có thể ở bất kỳ định dạng phù hợp
- Bạn có thể giả sử
a[0]
là một đỉnh hợp lệ
Chấm điểm
Mã ngắn nhất trong byte thắng.
Nếu bạn có bất kỳ thông tin bổ sung nào về chủ đề này, tôi rất vui được nghe!
a[m]
là trên hypercube, a[m+1]
cũng sẽ như vậy. Và vì bạn có thể giả sử a[0]
là một đỉnh hợp lệ, bạn không cần phải quan tâm đến bất kỳ công cụ hypercube nào và chỉ cần tuân theo quy tắc.
a[m+1] = xor(a[m], 2^mod(a[m],n))
, sẽ không liên quan nếu các đỉnh thuộc về một hypercube, phải không?