Banyak topik penting dalam aljabar abstrak melibatkan fungsi biner yang bekerja pada suatu set. Sejumlah properti dari fungsi-fungsi tersebut telah didefinisikan dalam penyelidikan topik-topik tersebut.
Tantangan Anda adalah menentukan apakah fungsi biner yang diberikan pada domain tertentu memiliki lima properti ini.
Properti
Fungsi biner ditutup jika setiap output yang mungkin ada dalam domain.
Fungsi biner asosiatif jika urutan fungsi diterapkan ke serangkaian input tidak mempengaruhi hasilnya. Artinya, $
asosiatif jika (a $ b) $ c
selalu sama a $ (b $ c)
. Perhatikan bahwa karena nilai (a $ b)
digunakan sebagai input, fungsi asosiatif harus ditutup.
Fungsi biner komutatif jika menukar urutan input tidak mengubah hasilnya. Dengan kata lain, jika a $ b
selalu sama b $ a
.
Fungsi biner memiliki elemen identitas jika ada beberapa elemen e
di domain sehingga a $ e = a = e $ a
untuk semua yang ada a
di domain.
Fungsi biner idempoten jika menerapkannya pada dua input identik memberikan angka sebagai output. Dengan kata lain, jika a $ a = a
untuk semua ada a
di domain.
Memasukkan
Anda akan diberi fungsi dalam bentuk matriks, dan domain fungsi tersebut adalah angka 0 ... n-1
, di mana n
panjang sisi matriks.
Nilai (a $ b)
dikodekan dalam matriks sebagai elemen a
ke - th baris b
. Jika matriks inputnya adalah Q
, maka a $ b
=Q[a][b]
Misalnya, fungsi eksponensial ( **
dalam Python) pada domain [0, 1, 2]
dikodekan sebagai:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Domain kiri dan kanan adalah sama, sehingga matriks akan selalu persegi.
Anda dapat menggunakan format matriks yang mudah digunakan sebagai input, seperti daftar daftar, daftar tunggal dalam urutan baris atau kolom, objek matriks asli bahasa Anda, dll. Namun, Anda tidak boleh menggunakan fungsi secara langsung sebagai input.
Untuk kesederhanaan, semua entri matriks akan menjadi bilangan bulat. Anda dapat berasumsi bahwa mereka cocok dengan tipe integer asli bahasa Anda.
Keluaran
Anda dapat menunjukkan properti mana di atas yang menahan format apa pun yang Anda pilih, termasuk daftar boolean, string dengan karakter yang berbeda untuk setiap properti, dll. Namun, harus ada output yang unik dan unik untuk masing-masing dari 24 himpunan bagian yang mungkin dari properti. Output ini harus mudah dibaca manusia.
Contohnya
Fungsi maksimum pada domain n = 4:
[[0, 1, 2, 3]
[1, 1, 2, 3]
[2, 2, 2, 3]
[3, 3, 3, 3]]
Fungsi ini memiliki sifat penutupan, asosiatif, komutatif, identitas, dan idempotensi.
Fungsi eksponensial pada domain n = 3:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Fungsi ini tidak memiliki properti di atas.
Fungsi penambahan pada domain n = 3:
[[0, 1, 2]
[1, 2, 3]
[2, 3, 4]]
Fungsi ini memiliki sifat komutatif dan identitas.
K Combinator pada domain n = 3:
[[0, 0, 0]
[1, 1, 1]
[2, 2, 2]]
Fungsi ini memiliki sifat closure, associativity dan idempotence.
Fungsi perbedaan mutlak pada domain n = 3:
[[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
Fungsi ini memiliki sifat penutupan, komutatifitas dan identitas.
Fungsi rata-rata, pembulatan ke genap, pada domain n = 3:
[[0, 0, 1]
[0, 1, 2]
[1, 2, 2]]
Fungsi ini memiliki sifat penutupan, komutatifitas, identitas dan idempoten.
Fungsi kesetaraan pada domain n = 3:
[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
Fungsi ini memiliki sifat penutupan dan komutatif.
Tantangan
Ini golf kode. Celah standar berlaku. Paling tidak byte menang.
c=all(l>)
?