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>)
?[i%i|i<-b]==b
,.CJam, 95 byte
Mencetak selanjutnya dari
*AC1I
.*
adalah simbol untuk penutupan ,A
untuk asosiatif ,C
untuk komutatif ,1
untuk identitas danI
untuk idempoten .Array input dibaca
q~
dan disimpan dalam A (:A
).Penutupan
Jika semua (
:*
) elemen dalam matriks (Ae_
) lebih kecilf<
dari B = ukuran (A) (A,:B
), cetak a*
('**
).Asosiatif
Hasilkan semua tiga kali lipat dalam domain (
B3m*
). Kami mencetakA
jika mereka semua memenuhi persyaratan ({...}%:*'A*
).Syaratnya adalah, untuk beberapa tripel
[i j k]
, melipat kiri daftar dengan A (_{A==}*
) dan melipat kiri kebalikannya[k j i]
(\W%
) dengan A op ({Az==}*
), versi terbalikA
, sama (=
).Komutatif
Sebuah harus sama transposnya:
A_z=
. Jika demikian, kami mencetakC
('C=
).Identitas
Identitas itu tentu unik, jadi kami hanya bisa mencetaknya
1
.Idempoten
Periksa apakah diagonal sama dengan
B,
. Jika demikian, cetak sebuahI
.sumber
Matlab, 226
Satu hal penting untuk diperhatikan adalah bahwa non-tertutup menyiratkan non-asosiatif. Banyak dari properti tersebut dapat dengan mudah diperiksa menggunakan beberapa properti dari matriks:
Input melalui notasi Matlab standar:
[a,b;c,d]
atau[[a,b];[c,d]]
atau[a b;c d]
dllOutput adalah vektor dari yang nol, 1 = benar, 0 = salah, untuk masing-masing properti dalam urutan yang diberikan.
Kode lengkap:
sumber
JavaScript (ES6) 165
Fungsi anonim mengembalikan array dengan lima nilai 0/1, yang dalam urutan Penutupan, Asosiasi, Komutatif, Identitas dan Idempotensi.
Kurang golf
Uji
sumber