0부터 30까지 번호를 붙인 점에서 다섯 개씩 골라 묶는다. 한 묶음을 만들면 모든 번호에 1을 더한 묶음, 2를 더한 묶음도 함께 넣고, 31에 도달한 번호는 다시 0으로 돌아온다. 이렇게 회전시킨 묶음들을 모으되, 어떤 세 점도 서로 다른 두 묶음에 동시에 들어가면 안 된다. 기본이 되는 묶음을 얼마나 많이 고를 수 있을까.
이 순환 패킹 문제에서 반사대칭까지 유지하는 경우를 따로 다뤘다. 기본 블록 궤도 12개로 가능한 구성을 확인하고, 같은 대칭 조건에서 13개 이상이 불가능하다는 완전탐색을 정리했다. 조건을 없앤 원문제의 최댓값은 이 결과만으로 정해지지 않으며, 확보한 범위는 여전히 12 또는 13이다.
회전과 반사는 서로 다른 조건이다
다섯 점의 묶음을 블록이라고 한다. 예를 들어 {0,1,3,7,15}에 모든 수를 같은 만큼 더하면 같은 모양이 31개 위치에서 나타난다. 이들을 하나의 이동 궤도로 세며, 한 궤도를 대표하는 묶음이 기본 블록이다. 점의 수 31이 소수이고 블록 크기가 5이므로, 각 궤도에는 정확히 31개의 서로 다른 블록이 있다.
반사는 번호 x를 −x로 보내는 연산이다. 계산은 모두 31로 나눈 나머지로 하므로 1은 30으로, 2는 29로 바뀐다. 반사대칭 조건은 블록 하나하나가 제자리로 돌아와야 한다는 뜻이 아니다. 전체 블록 모음을 반사했을 때 같은 모음이 되면 된다. 어떤 궤도는 스스로 돌아오고, 어떤 궤도는 다른 궤도와 짝을 이룬다.
나는 가능한 구성을 확인하는 검사와 더 큰 구성이 없다는 탐색을 나눠 정리했다. 구성 예 하나가 맞으면 ‘적어도 그만큼은 가능하다’는 하한이 생기지만, 최대라는 결론에는 나머지 후보를 빠뜨리지 않았다는 근거가 더 필요하다.
12개 구성에서 실제로 검사한 것
공개 패키지에는 {0,1,3,7,15}를 포함한 기본 블록 12개를 모두 담았다. 각 블록을 31번 이동시켜 얻은 블록은 12×31=372개이며 중복이 없다. 블록 하나에 포함된 세 점의 조합은 10개여서, 전체 3,720개 조합이 서로 다른지도 검사했다. 같은 세 점이 두 블록에 등장하지 않아야 한다는 조건을 직접 확인한 것이다.
다른 방식으로도 같은 조건을 확인했다. 372개 블록에서 서로 다른 두 블록을 고르는 69,006개 경우를 비교해, 공통으로 들어간 점이 두 개를 넘지 않는지 살폈다. 세 점이 겹치는 블록 쌍이 없다면 앞의 세 점 조합도 반복될 수 없다. 또 전체를 반사해도 같은 블록 모음이 남는지 확인했다. 31개 점에서 고른 465개 점 쌍은 이 구성에서 각각 정확히 여덟 번 나타난다.
여기서 12라는 하한 자체를 새 기록으로 세지는 않았다. Brouwer의 부호 표와 공개 구성에는 이미 길이 31, 무게 5, 최소 거리 6인 순환 이진 부호 372개가 있다. 1이 놓인 다섯 위치를 블록으로 읽으면 이 문제의 12개 궤도 구성과 연결된다. 두 부호의 거리는 10에서 공통 위치 수의 두 배를 뺀 값이므로, 거리 6 이상은 공통점이 두 개 이하라는 조건과 같다. 다만 그 기존 구성과 이번에 검사한 반사대칭 구성은 구별했다.
왜 다음 목표가 13개인가
일반적인 상한은 점 두 개를 고정하면 얻을 수 있다. 그 둘과 함께 세 점 조합을 만들 수 있는 다른 점은 29개다. 고정한 두 점을 포함하는 다섯 점 블록 하나가 그중 세 개를 쓰고, 같은 세 점 조합은 다시 쓸 수 없으므로 그 점 쌍이 들어가는 블록은 최대 아홉 개다.
블록마다 점 쌍 10개가 있으므로, 전체 블록 수를 D라고 하면 10D ≤ 9×465다. 기본 블록 궤도 수가 m일 때 D=31m이어서 m≤13이 나온다. 12개 구성과 이 상한 사이에 남는 것은 13개가 가능한지다. 이 중 반사대칭인 후보들을 빠짐없이 다루는 쪽으로 탐색 범위를 정했다.
대칭인 후보를 그래프로 옮겼다
다섯 점 블록의 이동 궤도는 모두 5,481개다. 먼저 같은 궤도 안에서 이미 세 점 조합이 반복되는 것을 빼면 4,761개가 남는다. 반사대칭인 전체 모음을 만들려면, 반사에 의해 생기는 짝을 함께 골라야 한다. 짝 내부에서 충돌하는 경우까지 제외하면 선택 단위는 348개로 줄어든다. 그중 75개는 궤도 하나짜리, 273개는 궤도 두 개짜리다.
이 선택 단위를 그래프의 꼭짓점으로 삼고, 두 단위를 함께 넣어도 세 점 조합이 겹치지 않을 때 선을 연결했다. 선은 17,553개다. 서로 모두 연결된 꼭짓점 집합을 고르면 함께 사용할 수 있는 블록들이 얻어진다. 이런 집합을 클리크라고 하며, 꼭짓점마다 담고 있는 궤도 수인 1 또는 2를 가중치로 줬다. 이제 찾아야 할 것은 가중치 합이 13 이상인 클리크다.
이 변환이 맞는지도 두 방식으로 대조했다. 하나는 블록을 비트마스크로 표현해 31가지 상대 이동에서 겹치는 점을 세고, 다른 하나는 세 점 조합의 이동 궤도 145개 중 무엇을 사용하는지 비교한다. 후보 궤도, 반사 묶음, 그래프의 모든 연결에서 두 판정이 일치했다. 충돌은 언제나 두 블록 사이의 반복된 세 점에서 생기므로, 이 그래프의 쌍별 호환 조건이 전체 패킹 조건도 보장한다.
탐색 종료가 상한이 되려면
C++ 탐색은 꼭짓점 번호가 증가하는 순서로만 선택해 같은 클리크를 중복 세지 않는다. 한 꼭짓점을 고른 뒤에는 이미 고른 것들과 모두 연결되는 후보만 남긴다. 그 후보들의 가중치를 전부 더해도 목표에 못 미치면 가지를 잘라도 된다. 남은 후보를 실제로 모두 함께 고를 수 있다고 가정한 값조차 부족하기 때문이다.
공개 실행 기록에서는 이 탐색이 318,709개 재귀 노드를 거친 뒤 가중치 13 이상의 클리크 없이 종료됐다. 시간 제한으로 중단한 결과가 아니다. 별도로 작성한 JavaScript 구현은 다른 후보 순서와 그래프 색칠 상한을 사용해 41,939개 노드에서 같은 결론에 도달했다. 두 숫자는 탐색 방법에 따른 방문 횟수이며, 전체 패킹 개수나 속도 개선 효과를 뜻하지 않는다. 빠짐없는 후보 대응과 안전한 가지치기, 실제 종료 기록을 함께 두어 상한의 근거로 삼았다.
따라서 반사대칭 조건에서는 구성으로 얻은 하한 12와 탐색 상한이 일치한다. 이동에 닫힌 모음에서는 x→−x+c 형태의 반사도 x→−x와 동등하므로, 13개 궤도 구성이 존재한다면 이런 반사대칭은 가질 수 없다. 임의의 다른 대칭까지 배제하거나, 반사 조건 없는 13개 구성의 존재 여부를 해결한 것은 아니다.
공개 패키지와 기여 범위
이 결과는 격자 기울기 문제 F03과 함께 한 편의 프리프린트에 서로 다른 정리로 실었다. 소스, 구성 예, 그래프와 실행 로그를 함께 공개했으며, 재현 환경은 Linux 또는 WSL의 Python 3.10 이상과 C++17 컴파일러다. 별도 구현의 기록 환경은 Node.js 24.19.0이다. 네트워크나 최적화 솔버는 재현에 필요하지 않다. 구성 JSON의 order:10은 승수 15의 모듈로 31 곱셈 위수이며, 점이 10개라는 뜻이 아니다.
문제 자료를 제공하고 프로젝트 방향과 공개 범위를 정했다. ChatGPT Pro와 Codex는 수학적 환원, 탐색 코드, 계산·재현과 초안 작성에 실질적으로 기여했다. 별도 구현과 실행 대조는 내부 계산 검증이며, 외부 인간 심사나 형식 증명 시스템의 인증으로 부르지 않는다. TheoremDB의 F01 연구 기록 R11764도 현재 partial / computational로 분류되어 있다. 대칭 제한 계산 결과를 기록한 것으로, 조건 없는 원문제의 공식 종결이나 상금 성과를 뜻하지 않는다.
