Nhiều chủ đề quan trọng trong đại số trừu tượng liên quan đến một hàm nhị phân hoạt động trên một tập hợp. Một số tính chất của các chức năng như vậy đã được xác định trong quá trình điều tra các chủ đề đó.
Thách thức của bạn sẽ là xác định xem một hàm nhị phân nhất định trên một miền nhất định có sở hữu năm thuộc tính này hay không.
Tính chất
Một hàm nhị phân được đóng nếu mọi đầu ra có thể có trong miền.
Hàm nhị phân là kết hợp nếu thứ tự mà hàm được áp dụng cho một loạt các đầu vào không ảnh hưởng đến kết quả. Đó là, $
là kết hợp nếu (a $ b) $ c
luôn luôn bằng a $ (b $ c)
. Lưu ý rằng vì giá trị (a $ b)
được sử dụng làm đầu vào, các hàm kết hợp phải được đóng lại.
Hàm nhị phân là giao hoán nếu hoán đổi thứ tự của các yếu tố đầu vào không làm thay đổi kết quả. Nói cách khác, nếu a $ b
luôn luôn bằng nhau b $ a
.
Hàm nhị phân có thành phần nhận dạng nếu tồn tại một số phần tử e
trong miền sao a $ e = a = e $ a
cho tất cả a
trong miền.
Hàm nhị phân là idempotent nếu áp dụng nó cho hai đầu vào giống hệt nhau sẽ cho số đó làm đầu ra. Nói cách khác, nếu a $ a = a
cho tất cả a
trong miền.
Đầu vào
Bạn sẽ được cung cấp một hàm dưới dạng ma trận và miền của hàm sẽ là các số 0 ... n-1
, trong đó n
độ dài cạnh của ma trận.
Giá trị (a $ b)
được mã hóa trong ma trận dưới dạng phần tử thứ a
của hàng b
thứ. Nếu ma trận đầu vào là Q
, thì a $ b
=Q[a][b]
Ví dụ: hàm lũy thừa ( **
trong Python) trên miền [0, 1, 2]
được mã hóa thành:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Các miền trái và phải giống nhau, vì vậy ma trận sẽ luôn là hình vuông.
Bạn có thể sử dụng bất kỳ định dạng ma trận thuận tiện nào làm đầu vào, chẳng hạn như danh sách danh sách, danh sách đơn theo thứ tự chính hàng hoặc cột, đối tượng ma trận gốc của ngôn ngữ của bạn, v.v. Tuy nhiên, bạn không thể lấy hàm trực tiếp làm đầu vào.
Để đơn giản, tất cả các mục ma trận sẽ là số nguyên. Bạn có thể cho rằng chúng phù hợp với kiểu số nguyên của ngôn ngữ của bạn.
Đầu ra
Bạn có thể chỉ ra thuộc tính nào ở trên giữ bất kỳ định dạng nào bạn chọn, bao gồm danh sách booleans, chuỗi có ký tự khác nhau cho mỗi thuộc tính, v.v. Tuy nhiên, phải có một đầu ra riêng biệt, duy nhất cho mỗi trong số 24 tập hợp con có thể của các thuộc tính. Đầu ra này phải dễ đọc với con người.
Ví dụ
Hàm tối đa trên miền n = 4:
[[0, 1, 2, 3]
[1, 1, 2, 3]
[2, 2, 2, 3]
[3, 3, 3, 3]]
Hàm này có các thuộc tính của đóng, kết hợp, giao hoán, nhận dạng và idempotence.
Hàm số mũ trên miền n = 3:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Hàm này không có thuộc tính nào ở trên.
Hàm bổ sung trên miền n = 3:
[[0, 1, 2]
[1, 2, 3]
[2, 3, 4]]
Hàm này có các đặc tính của tính giao hoán và bản sắc.
Bộ kết hợp K trên miền n = 3:
[[0, 0, 0]
[1, 1, 1]
[2, 2, 2]]
Hàm này có các thuộc tính của đóng, kết hợp và idempotence.
Hàm khác biệt tuyệt đối trên miền n = 3:
[[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
Hàm này có các thuộc tính của đóng, giao hoán và nhận dạng.
Hàm trung bình, làm tròn theo hướng chẵn, trên miền n = 3:
[[0, 0, 1]
[0, 1, 2]
[1, 2, 2]]
Hàm này có các thuộc tính của đóng, giao hoán, nhận dạng và idempotence.
Hàm đẳng thức trên miền n = 3:
[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
Hàm này có các thuộc tính của đóng và giao hoán.
Thử thách
Đây là mã golf. Tiêu chuẩn áp dụng. Ít nhất là byte thắng.
c=all(l>)
?