Giả sử chúng ta xác định một ma trận vô hạn M
, bật N^2 -> {0, 1}
(nơi N
bắt đầu từ 1
thay vì 0
) theo cách này:
M(1, 1)
=0
.Với mọi
x > 1
,M(x, 1)
=1
nếux
là số nguyên tố, và0
nếu không.Với mọi
y > 1
,M(1, y)
= số hạngy
thứ trongThue-Morse sequence
.Với mọi
x, y > 1
,M(x, y)
=M(x, y-1) + M(x-1, y) mod 2
.
Phần trên cùng bên trái 16x16
của ma trận này trông giống như (với x
các hàng và y
là các cột):
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
1 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1
1 1 0 1 1 1 1 0 0 0 0 1 0 0 1 0
0 1 1 0 1 0 1 1 1 1 1 0 0 0 1 1
1 0 1 1 0 0 1 0 1 0 1 1 1 1 0 1
0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1
1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 1
0 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1
0 1 0 1 0 1 1 1 1 1 0 0 0 0 0 1
0 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0
1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 1
0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1
1 1 0 0 1 0 1 1 0 1 1 1 0 1 1 0
0 1 1 1 0 0 1 0 0 1 0 1 1 0 1 1
0 1 0 1 1 1 0 0 0 1 1 0 1 1 0 1
0 1 1 0 1 0 0 0 0 1 0 0 1 0 0 1
Nhiệm vụ của bạn là xây dựng một chương trình sẽ đánh giá giá trị của một mục tùy ý trong ma trận này càng chính xác càng tốt.
Chương trình của bạn sẽ lấy hai số nguyên x
và y
làm đầu vào, dưới bất kỳ hình thức nào bạn chọn và trả về M(x, y)
, sẽ là một 0
hoặc 1
.
Mã của bạn có thể được viết bằng bất kỳ ngôn ngữ nào, nhưng không được vượt quá 64 kilobyte (65.536 byte) kích thước mã nguồn hoặc 2 MB (2.097.152 byte) trong tổng mức sử dụng bộ nhớ. Chương trình của bạn phải bắt đầu với bộ nhớ trống (nghĩa là nó không thể tải dữ liệu từ nơi khác) và chạy độc lập cho mỗi đầu vào (nghĩa là nó có thể không lưu trữ dữ liệu chung cho nhiều lần chạy). Chương trình của bạn cũng phải có khả năng đánh giá tất cả các mục trong 8192x8192
ô vuông trên cùng bên trái trong một khoảng thời gian hợp lý.
Chương trình đánh giá hầu hết các mục chính xác trong 8192 x 8192
ô vuông trên cùng bên trái sẽ là người chiến thắng, với mã ngắn hơn đóng vai trò là người phá vỡ.