Thách thức là viết mã nhanh nhất có thể để tính toán vĩnh viễn của ma trận .
Vĩnh viễn của một n
-by- n
matrix A
= ( a
i,j
) được định nghĩa là
Ở đây S_n
đại diện cho tập hợp tất cả các hoán vị của [1, n]
.
Ví dụ (từ wiki):
Trong câu hỏi này, ma trận đều là hình vuông và sẽ chỉ có các giá trị -1
và 1
trong đó.
Ví dụ
Đầu vào:
[[ 1 -1 -1 1]
[-1 -1 -1 1]
[-1 1 -1 1]
[ 1 -1 -1 1]]
Dài hạn:
-4
Đầu vào:
[[-1 -1 -1 -1]
[-1 1 -1 -1]
[ 1 -1 -1 -1]
[ 1 -1 1 -1]]
Dài hạn:
0
Đầu vào:
[[ 1 -1 1 -1 -1 -1 -1 -1]
[-1 -1 1 1 -1 1 1 -1]
[ 1 -1 -1 -1 -1 1 1 1]
[-1 -1 -1 1 -1 1 1 1]
[ 1 -1 -1 1 1 1 1 -1]
[-1 1 -1 1 -1 1 1 -1]
[ 1 -1 1 -1 1 -1 1 -1]
[-1 -1 1 -1 1 1 1 1]]
Dài hạn:
192
Đầu vào:
[[1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1],
[1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1],
[-1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1],
[-1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1],
[-1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1],
[1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1],
[1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1],
[1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1],
[1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1],
[-1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1],
[-1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1],
[1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1],
[-1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1],
[1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1],
[1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1],
[1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1],
[-1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1],
[1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1],
[1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1],
[-1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1]]
Dài hạn:
1021509632
Nhiệm vụ
Bạn nên viết mã đó, đưa ra một n
bằng n
ma trận, kết quả đầu ra lâu dài của nó.
Vì tôi sẽ cần kiểm tra mã của bạn, sẽ rất hữu ích nếu bạn có thể đưa ra một cách đơn giản để tôi đưa ra một ma trận làm đầu vào cho mã của bạn, ví dụ bằng cách đọc từ tiêu chuẩn.
Được cảnh báo rằng vĩnh viễn có thể lớn (ma trận tất cả 1 giây là trường hợp cực đoan).
Điểm và quan hệ
Tôi sẽ kiểm tra mã của bạn trên các ma trận ngẫu nhiên + -1 có kích thước tăng dần và dừng lần đầu tiên mã của bạn mất hơn 1 phút trên máy tính của tôi. Các ma trận cho điểm sẽ phù hợp với tất cả các bài nộp để đảm bảo sự công bằng.
Nếu hai người có cùng số điểm thì người chiến thắng là người nhanh nhất với giá trị đó n
. Nếu những cái đó trong vòng 1 giây với nhau thì đó là cái được đăng đầu tiên.
Ngôn ngữ và thư viện
Bạn có thể sử dụng bất kỳ ngôn ngữ và thư viện có sẵn nào bạn thích nhưng không có chức năng có sẵn để tính toán vĩnh viễn. Nếu khả thi, sẽ rất tốt để có thể chạy mã của bạn, vì vậy vui lòng bao gồm một lời giải thích đầy đủ về cách chạy / biên dịch mã của bạn trong Linux nếu có thể.
Tham khảo thực hiện
Đã có một câu hỏi câu hỏi về codegolf với rất nhiều mã trong các ngôn ngữ khác nhau để tính toán vĩnh viễn cho các ma trận nhỏ. Mathematica và Maple cũng có các triển khai vĩnh viễn nếu bạn có thể truy cập chúng.
Máy của tôi Thời gian sẽ được chạy trên máy 64 bit của tôi. Đây là bản cài đặt Ubuntu tiêu chuẩn với RAM 8GB, Bộ xử lý tám lõi AMD FX-8350 và Radeon HD 4250. Điều này cũng có nghĩa là tôi cần có khả năng chạy mã của bạn.
Thông tin cấp thấp về máy của tôi
cat /proc/cpuinfo/|grep flags
cho
cờ f16c lahf_lm
Tôi sẽ hỏi một câu hỏi tiếp theo đa ngôn ngữ có liên quan chặt chẽ mà không gặp phải vấn đề Int lớn để những người yêu thích Scala , Nim , Julia , Rust , Bash cũng có thể thể hiện ngôn ngữ của họ.
Ban lãnh đạo
- n = 33 (45 giây. 64 giây cho n = 34). TonMedel trong C ++ với g ++ 5.4.0.
- n = 32 (32 giây). Dennis trong C với gcc 5.4.0 bằng cờ gcc của TonMedel.
- n = 31 (54 giây). Christian Sievers ở Haskell
- n = 31 (60 giây). primo trong rpython
- n = 30 (26 giây). ezrast ở Rust
- n = 28 (49 giây). xnor với Python + pypy 5.4.1
- n = 22 (25 giây). Shebang với Python + pypy 5.4.1
Lưu ý . Trong thực tế, thời gian cho Dennis và TonMedel rất khác nhau vì những lý do bí ẩn. Ví dụ, chúng dường như nhanh hơn sau khi tôi tải trình duyệt web! Thời gian được trích dẫn là nhanh nhất trong tất cả các bài kiểm tra tôi đã thực hiện.