Anda diberi satu set pernyataan logika. Tantangan Anda adalah menghapus yang bertentangan dengan yang lain, tetapi dengan cara yang optimal (yaitu menghapus jumlah pernyataan minimal).
Tantangan
Anda akan menulis program atau fungsi yang mengambil sebagai input daftar pernyataan, menghilangkan jumlah minimal pernyataan sehingga ada solusi dan output sisanya.
Logika
Pernyataan terdiri dari variabel A-Z
dan operator di antara mereka.
Ada 5 operator : -
(tidak), v
(atau), ^
(dan), ->
(jika) dan <->
(iff).
Meja kebenaran:
A | B | -A | AvB | A^B | A->B | A<->B
0 | 0 | 1 | 0 | 0 | 1 | 1
0 | 1 | 1 | 1 | 0 | 1 | 0
1 | 0 | 0 | 1 | 0 | 0 | 0
1 | 1 | 0 | 1 | 1 | 1 | 1
Operator - operator ini dapat digabungkan bersama dengan tanda kurung ()
:
A | B | -(AvB) | Av(-A) | A^(-A) | (AvB)->(-B)
0 | 0 | 1 | 1 | 0 | 1
0 | 1 | 0 | 1 | 0 | 0
1 | 0 | 0 | 1 | 0 | 1
1 | 1 | 0 | 1 | 0 | 0
Sistem logika terdiri dari 1 pernyataan atau lebih .
Sebuah solusi untuk sistem logika adalah suatu keadaan dimana semua pernyataan yang bersamaan benar.
Contoh sistem logika:
AvB
-(A<->B)
(AvB)->(-B)
Satu-satunya solusi adalah A = 1, B = 0
.
A^B
-(B<->A)
Yang ini tidak punya solusi ; tanpa kombinasi A
dan B
kedua pernyataan itu benar.
Memasukkan
Anda akan menerima serangkaian pernyataan sebagai masukan. Ini dapat diambil melalui STDIN atau argumen fungsi, diformat sebagai larik (dalam format yang mudah) atau string yang dipisahkan baris atau dipisahkan oleh spasi.
Pernyataan tersebut akan dalam bentuk berikut (di hampir ABNF ):
statement = variable / operation
operation = not-operation / binary-operation
not-operation = "-" operand
binary-operation = operand binary-operator operand
operand = variable / "(" operation ")"
variable = "A"-"Z"
binary-operator = "v" / "^" / "->" / "<->"
Pernyataan contoh:
A
Av(-B)
(A<->(Q^C))v((-B)vH)
Keluaran
Anda harus mengembalikan seperangkat pernyataan yang dikurangi (mungkin), dalam bentuk persis seperti yang Anda terima. Sekali lagi, daftar dapat diformat sebagai array string atau string yang dipisahkan oleh baris atau spasi.
Aturan
- Anda harus selalu menghapus jumlah minimal pernyataan. Jika ada beberapa solusi yang mungkin, keluarkan salah satunya.
- Anda dapat mengasumsikan bahwa input selalu mengandung setidaknya 1 pernyataan dan tidak ada pernyataan yang diulang dalam input.
- Anda tidak boleh berasumsi bahwa output selalu berisi pernyataan. (lihat contoh)
- Menggunakan celah standar bertentangan dengan jawaban Anda yang valid, dan salah satunya harus dihapus.
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Contohnya
Memasukkan:
A^(-A)
Keluaran:
(nothing)
Memasukkan:
A^B A<->(-B) A<->B
Keluaran:
A^B A<->B
Memasukkan:
["AvB","A^B"]
Keluaran:
["AvB","A^B"]
(AvB)->-B
seharusnya(AvB)->(-B)
)A<->(Q^C))v((-B)vH
tumbuk.Jawaban:
Ruby,
299298283279 byteTidak Terkumpul:
sumber
Python 3, 431 byte
Tidak terlalu bermain golf sekarang, tetapi saya pikir saya akan mendapatkan bola dengan jawaban. Coba di sini ,
g()
adalah fungsi utamanya.sumber
v
begituor
.