소개:
3x3x3 루빅스 큐브가 약 43이다 가능한 순열, quintillion을 . 이 번호에 대해 들어 본 적이 있지만 실제로 어떻게 계산됩니까?
3x3x3 Rubik 's Cube에는 6 개의면이 있으며 각각 9 개의 스티커가 있습니다. 그러나 스티커 대신 (외부) 조각을 보면 가운데 조각이 6 개 있습니다. 8 개의 모서리 조각; 그리고 12 개의 가장자리 조각. 중심을 이동할 수 없으므로 계산에서 중심을 무시할 수 있습니다. 모서리와 가장자리에 관해서 :
- 개가 있습니다( ) 8 코너를 정렬하는 방법. 각 구석에는 3 가지 가능한 방향이 있지만, 8 가지 중 7 가지만 독립적으로 방향을 지정할 수 있습니다. 8 / 8 / 최종 코너의 방향은 ( ) 가능성을 감안할 때 앞의 7 개에 달려 있습니다.
- 있다 ( 열두 가장자리를 준비하는) 방법. 에서 절반모서리가있을 때 모서리가 항상 균등 한 순열을 유지 해야하기 때문 입니다. ( )의 가능성이 주어지면, 앞의 11에 따라 12 번째 / 최종 가장자리의 플립으로 11 개의 모서리를 독립적으로 뒤집을 수 있습니다 .2112,048
이를 종합하면 다음과 같은 공식이 있습니다.
이것은 이미 꽤 복잡해 보일 수 있지만 3x3x3 큐브의 경우 여전히 간단합니다. 큐브조차도 공식이 약간 다릅니다. 이것은 4x4x4 큐브의 공식입니다.
그리고 더 큰 NxNxN 큐브 (즉, 현재 세계 기록 33x33x33)의 경우 수식이 약간 확장됩니다. 그러나이 소개를 너무 오래 만들지 않기 위해 대신 4x4x4 큐브 및 다른 크기의 NxNxN 큐브의 순열을 결과 수식으로 설명하는 링크를 여기에 넣습니다.
x x 큐브에 대해 을 기반으로 한 일반 공식이 있습니까? 확실히있다. 다음은 완전히 다른 3 가지 알고리즘으로, 기준으로 동일한 결과를 제공합니다 .
1 : 크리스 하드윅의 공식 :
2 : Christopher Mowla의 삼각 공식 :
3 : Christopher Mowla의 소수 공식 :
여기서 은 입니다.
출처 : Cubers-reddit-위치 수, 하나님의 수 등의 수학적 계산 공식
도전:
범위 의 입력 정수 이 주어지면 올바른 결과를 출력하는 이 세 가지 공식 중 하나 (또는 자신의 파생)를 선택하여 구현 하십시오.
도전 규칙 :
- 이 세 가지 이외의 다른 수식을 자유롭게 사용할 수 있지만이 세 가지가 정확하다는 것을 명심하십시오. 다른 수식을 사용하는 경우 수식의 위치에 대한 링크를 추가하십시오 (또는 수식이있는 경우 자세한 설명을 추가하십시오). 그리고 출력이 올바른 경우 범위의 모든 정수를 확인합니다. 이 순서 에 대한 oeis 에서 영감을 얻을 수있을 것입니다 : A075152 .
- 만약 당신의 언어가 자동적으로 과학적인 결과물을 출력한다면 (즉 , 4x4x4 공식 다음의 숫자 대신에 ) 이것이 허용됩니다. 그러나 코드에 수식을 실행하는 동안 부동 소수점 정밀도로 인한 반올림 오류가 허용되지 않으므로 결과에 과학적 반올림을 정확한 출력으로 변환하는 추가 코드를 추가하여 결과를 확인할 수 있습니다. 실제 결과는 정확한.
- 프로그램 / 함수는 범위의 입력에 대해 정확해야합니다 ( 이미 엄청난 수의 숫자 를 생성하기 때문에이를 출력 할 수 있으면 더 큰 도 잘 작동 할 것입니다) 하나 올바르게).
- 카운터로 모든 가능한 순열을 반복 할 수는 없습니다. 카운터를 사용하면 합리적인 시간 내에 아무것도 출력하지 않기 때문입니다. 수식 (제공된 세 가지 중 하나, 그 중 하나의 파생어 또는 완전히 새로운 수식) 또는 적절한 시간 내에 정확한 결과를 제공하는 다른 방법 (하드 코딩없이) 만 구현 )가 허용됩니다. 나는 이것을 시행하기 위해 제한된 시간 을 추가하는 것에 대해 생각 했지만 code-golf 와 함께 제한된 시간 에 개인적으로 맞지 않으므로 그렇게하지 않을 것입니다. 그래도 프로그램이 답변을 제공하는지 확인하고 어떤 이유로 TIO에 너무 느리다면 로컬 컴퓨터의 출력과 함께 스크린 샷을 확인으로 추가하십시오.
일반적인 규칙:
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오. - 표준 규칙 은 기본 I / O 규칙으로 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 반환 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
- 기본 허점 은 금지되어 있습니다.
- 가능하면 코드 테스트와 링크를 추가하십시오 (예 : TIO ).
- 또한 답변에 대한 설명을 추가하는 것이 좋습니다.
테스트 사례 :
다음은 범위의 에 대한 테스트 사례입니다 (더 큰 테스트 사례에는 WolframAlpha 링크를 사용하십시오).
n=2
3674160
n=3
43252003274489856000
n=4
7401196841564901869874093974498574336000000000
n=5
282870942277741856536180333107150328293127731985672134721536000000000000000
n=6
157152858401024063281013959519483771508510790313968742344694684829502629887168573442107637760000000000000000000000000
n=7
19500551183731307835329126754019748794904992692043434567152132912323232706135469180065278712755853360682328551719137311299993600000000000000000000000000000000000
n=8
35173780923109452777509592367006557398539936328978098352427605879843998663990903628634874024098344287402504043608416113016679717941937308041012307368528117622006727311360000000000000000000000000000000000000000000000000
n=9
14170392390542612915246393916889970752732946384514830589276833655387444667609821068034079045039617216635075219765012566330942990302517903971787699783519265329288048603083134861573075573092224082416866010882486829056000000000000000000000000000000000000000000000000000000000000000
n=10
82983598512782362708769381780036344745129162094677382883567691311764021348095163778336143207042993152056079271030423741110902768732457008486832096777758106509177169197894747758859723340177608764906985646389382047319811227549112086753524742719830990076805422479380054016000000000000000000000000000000000000000000000000000000000000000000000000000000000
참고 : 이것은 코드 골프 과제이므로 기본적으로 다음 세 가지 수식 중 하나를 구현하십시오.
floor