Sự miêu tả
Viết hàm f(m, G)
chấp nhận làm đối số của nó một ánh xạ m
và một tập hợp / danh sách các số nguyên riêng biệt, không âm G
.
m
nên ánh xạ các cặp số nguyên vào G
số nguyên mới trong G
. ( G
, m
) được đảm bảo để tạo thành một nhóm abelian hữu hạn , nhưng bất kỳ yếu tố nào G
có thể là danh tính.
Có một định lý quan trọng nói rằng:
f
phải trả về một danh sách các quyền hạn [p1, ... pn]
theo thứ tự tăng dần sao cho
Ví dụ
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])
nên trả về[4]
, như các tham số mô tả nhóm Z 4 .f((a, b) → a xor b, [0, 1, 2, 3])
sẽ trả về[2, 2]
, vì các tham số mô tả một nhóm đẳng cấu với Z 2 × Z 2 .f((a, b) → a, [9])
nên trả về[]
, như các tham số mô tả nhóm tầm thường; tức là sản phẩm của các nhóm không tuần hoàn.Xác định
m
như sau:(a, b) → (a mod 3 + b mod 3) mod 3 + ((floor(a / 3) + floor(b / 3)) mod 3) * 3 + ((floor(a / 9) + floor(b / 9)) mod 9) * 9
Sau đó
f(m, [0, 1, ..., 80])
sẽ quay trở lại[3, 3, 9]
, vì nhóm này là đẳng cấu với Z 3 × Z 3 × Z 9
Quy tắc
m
có thể là một hàm (hoặc con trỏ hàm cho một số hàm)Int × Int → Int
hoặc một cặp ánh xạ từ điểnG × G
thành các phần tử mới củaG
.f
có thể lấy tham số của nó theo thứ tự ngược lại, tức là bạn cũng có thể thực hiệnf(G, m)
.Về mặt lý thuyết, việc triển khai của bạn nên hoạt động đối với các đầu vào lớn tùy ý, nhưng thực sự không cần phải hiệu quả.
Không có giới hạn về việc sử dụng bất kỳ loại tích hợp nào.
Luật golf tiêu chuẩn được áp dụng. Mã ngắn nhất trong byte thắng.
Bảng xếp hạng
Để điểm số của bạn xuất hiện trên bảng, nó phải ở định dạng này:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)
).
AABC
, coi chúng là bộ ba (A, B, C)
, với modulo bổ sung theo cặp (9, 3, 3)
.
m
được phép làm từ điển, bạn có thể cung cấp các trường hợp thử nghiệm như từ điển không?