|
|
|
 |
|
Pencari Kebenaran Penunjuk Kebenaran
Pencari Kebenaran
Mencari ekspresi boolean untuk satu set hasil di tabel kebenaran.
Kadang-kadang anda mungkin mempunyai sebuah ekspresi boolean yang panjang di dalam kode anda yang variabelnya diulang beberapa kali. Ekspresi seperti ini akan menjadi lebih efisien dan elegan apabila dapat direduksi atau disederhanakan menjadi suatu ekspresi boolean yang lebih sederhana.
Misalnya, ekspresi boolean
result = a & (b | c) ^ a & ~b | ~c ;
mempunyai variabel a, b, dan c yang masing-masing diulang 2 kali, jadi kita dapat berharap dapat menggantinya dengan suatu ekspresi boolean yang lebih sederhana seperti
result = a & b | ~c ;
Ketika map Karnaugh (atau diagram Veitch) akan menolong untuk memahami ekspresi boolean anda dengan baik, tool ini mungkin akan menolong anda untuk menghemat waktu bila anda beruntung :). Pertama-tama, buatlah tabel kebenaran untuk ekspresi boolean anda dengan Penunjuk Kebenaran, dan cari ekspresi yang lebih sederhana untuk hasil anda tersebut.
Perhatikan bahwa urutan preseden untuk operator bitwise di javascript adalah ~, &, ^, |. Sehingga ekspresi a|~b&c^d akan berarti a|(((~b)&c))^d) atau secara logika a || (((!b) && c) XOR d) dsb. Tetapi javascript tidak mensupport logika XOR, jadi anda dapat mensimulasinya dengan a XOR b = (a || b) && !(a && b).
Contoh
Saya telah membuat tool ini ketika sedang bekerja di tool lain yang lebih sederhana, Pengkode HTML. Di pusat fungsi pengkodean ia akan mencek apakah sebuah karakter mempunyai entri di dalam tabel kode HTML, dan mengembalikannya kalau ada atau karakter itu sendiri kalau tidak ada. Lebih jauh lagi apabila karakter itu adalah spasi, pengguna dapat memilih untuk mengkodenya atau tidak. Ini memerlukan kode percabangan berikut untuk melakukan fungsinya:
return spc ? (html ? html : c) : (c==' ' ? c : (html ? html : c)) ;
Percabangan ini dapat dianggap sebagai sebuah ekspresi boolean dengan tabel kebenaran seperti
| spc | html | c==' ' | hasil | |
| 1 | 1 | 1 | 1 | (html) |
| 1 | 1 | 0 | 1 | (html) |
| 1 | 0 | 1 | 0 | (c) |
| 1 | 0 | 0 | 0 | (c) |
| 0 | 1 | 1 | 0 | (c) |
| 0 | 1 | 0 | 1 | (html) |
| 0 | 0 | 1 | 0 | (c) |
| | 0 | 0 | 0 | 0 | (c) |
Sekarang saya ingin mengganti percabangan di atas dengan ekspresi boolean yang lebih sederhana yang memberikan hasil yang sama persis. Semua yang harus saya lakukan adalah mencari untuk hasil '11000100' dengan 3 variabel. Saya tidak mendapatkan hasil apapun ketika panjang ekspresi diset ke 3, tetapi dengan panjang 4 ditemukan dua ekspresi berikut:
(b & c & ~a) ^ b
(b & ~c) | (a & b)
Karena javascript tidak mempunyai logika XOR maka saya menggunakan ekspresi terakhir untuk mengganti percabangan menjadi seperti di bawah:
return ((html && !(c==' ')) | (spc && html)) ? html : c ;
Kebanyakan pengunjung yang menggunakan tool ini juga memanfaatkan IP - Nama host (100.0%) |
|