Giới thiệu:
Một khối Rubik có hoán vị có thể, tương đương khoảng 43 triệu . Bạn có thể đã nghe về con số này trước đây, nhưng nó thực sự được tính như thế nào?
Một khối Rubik 3x3x3 có sáu mặt, mỗi mặt có chín miếng dán. Tuy nhiên, nhìn vào các mảnh (bên ngoài) thay vì nhãn dán, chúng ta có sáu mảnh trung tâm; tám góc mảnh; và mười hai mảnh cạnh. Vì các trung tâm không thể được di chuyển, chúng tôi có thể bỏ qua những người trong tính toán. Đối với các góc và cạnh:
- Có( ) cách sắp xếp tám góc. Mỗi góc có ba hướng có thể, mặc dù chỉ có bảy (trong số tám) có thể được định hướng độc lập; định hướng của góc thứ tám / cuối cùng phụ thuộc vào bảy trước, cho ( ) khả năng.
- Có ( ) cách sắp xếp mười hai cạnh. Một nửa từlà bởi vì các cạnh phải luôn luôn nằm trong một hoán vị chính xác khi các góc. Mười một cạnh có thể được lật độc lập, với việc lật cạnh thứ mười hai / cuối cùng tùy thuộc vào mười một trước đó, đưa ra ( ) khả năng.
Đặt điều này cùng nhau, chúng ta có công thức sau đây:
Nguồn: Wikipedia - Hoán vị khối Rubik
Mặc dù điều này có thể trông khá phức tạp, nhưng nó vẫn khá đơn giản đối với Cube 3x3x3. Đối với các hình khối chẵn, công thức hơi khác nhau; đây là công thức cho một khối 4x4x4 chẳng hạn:
Đó là khoảng 7,40 quattuordecillion trên quy mô ngắn .
Và đối với các khối NxNxN lớn hơn (tức là Kỷ lục thế giới 33x33x33 hiện tại), công thức sẽ được mở rộng khá nhiều. Tuy nhiên, để không giới thiệu quá lâu, tôi đã đặt các liên kết này ở đây, trong đó các hoán vị của Khối 4 x 4 và một số khối NxNxN có kích thước khác được giải thích với một công thức kết quả:
Bây giờ bạn có thể tự hỏi: có một công thức chung dựa trên cho bất kỳ x x Cube nào không? Chắc chắn là có. Dưới đây là ba thuật toán hoàn toàn khác nhau, tất cả đều cho kết quả chính xác giống nhau dựa trên :
1: Công thức của Chris Hardwick:
2: Công thức trig của Christopher Mowla:
3: Công thức nguyên tố của Christopher Mowla:
trong đó là .
Nguồn: Cubers-reddit - Công thức đếm toán học về số lượng vị trí, số lượng của Chúa, v.v.
Thử thách:
Chọn và thực hiện một trong ba công thức này (hoặc đạo hàm của riêng bạn), đưa ra một số nguyên vào trong phạm vi , đưa ra kết quả chính xác.
Quy tắc thử thách:
- Bạn có thể tự do sử dụng một công thức khác ngoài ba công thức này, nhưng hãy nhớ rằng ba công thức này được chứng minh là đúng. Nếu bạn sử dụng một công thức khác, vui lòng thêm một liên kết về nơi bạn đã nhận nó (hoặc nếu bạn tự mình đưa ra một lời giải thích sâu sắc). Và tôi sẽ kiểm tra tất cả các số nguyên trong phạm vi nếu đầu ra là chính xác. Có lẽ cảm hứng có thể được tìm thấy trong oeis cho chuỗi này: A075152 .
- Nếu ngôn ngữ của bạn tự động xuất ra một đầu ra khoa học (tức là thay vì số sau công thức 4x4x4) thì điều này được cho phép. Nhưng vui lòng thêm mã bổ sung vào câu trả lời của bạn để chuyển đổi làm tròn khoa học này thành đầu ra chính xác để có thể xác minh kết quả, vì các lỗi làm tròn do độ chính xác của dấu phẩy động trong quá trình thực thi công thức trong mã của bạn là không được phép - kết quả thực tế phải là chính xác.
- Chương trình / chức năng của bạn phải chính xác cho ít nhất các đầu vào trong phạm vi (mặc dù, vì đã dẫn đến một số lượng lớn, bất kỳ lớn nào cũng có thể hoạt động tốt nếu bạn có thể đầu ra này một cách chính xác).
- Bạn không được phép lặp lại tất cả các hoán vị có thể có với một bộ đếm, vì điều đó sẽ không bao giờ xuất ra bất cứ thứ gì trong một khoảng thời gian hợp lý. Chỉ thực hiện một công thức (một trong ba công thức được cung cấp, một dẫn xuất của một trong số đó, hoặc một công thức hoàn toàn mới) hoặc một phương pháp khác sẽ cho kết quả chính xác trong một khoảng thời gian hợp lý (tất nhiên không cần mã hóa cứng ) được cho phép. Tôi đã nghĩ về việc thêm thời gian hạn chế để thực thi điều này, nhưng cá nhân tôi chống lại thời gian hạn chế kết hợp với môn đánh gôn , vì vậy tôi sẽ không. Tuy nhiên, vui lòng đảm bảo rằng chương trình của bạn đưa ra câu trả lời và vì lý do nào đó quá chậm đối với TIO vì một số lý do, hãy thêm một số ảnh chụp màn hình với đầu ra từ máy cục bộ của bạn để xác minh.
Quy tắc chung:
- Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte thắng.
Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'. - Quy tắc chuẩn áp dụng cho câu trả lời của bạn với quy tắc I / O mặc định , vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, chương trình đầy đủ. Cuộc gọi của bạn.
- Lỗ hổng mặc định bị cấm.
- Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn (ví dụ TIO ).
- Ngoài ra, thêm một lời giải thích cho câu trả lời của bạn rất được khuyến khích.
Các trường hợp thử nghiệm:
Ở đây các trường hợp thử nghiệm cho trong phạm vi (vui lòng sử dụng các liên kết WolframAlpha ở trên cho các trường hợp thử nghiệm lớn hơn):
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
LƯU Ý: Vì đây là một thử thách chơi gôn , về cơ bản, nó tập trung vào: thực hiện một trong ba công thức này (hoặc một công cụ phái sinh / phương pháp của riêng bạn mà vẫn tạo ra kết quả chính xác) càng ngắn càng tốt.
floor