Tugasnya adalah menulis kode yang dapat menemukan formula logis kecil untuk jumlah bit.
Tantangan keseluruhan adalah untuk kode Anda untuk menemukan formula logis proposisional sekecil mungkin untuk memeriksa apakah jumlah variabel biner 0/1 sama dengan beberapa nilai x. Biarkan kami memanggil variabel x1, x2, x3, x4 dll. Ekspresi Anda harus sama dengan jumlah. Artinya, rumus logis harus benar jika dan hanya jika jumlahnya sama dengan x.
Ini adalah cara naif untuk melakukannya sejak awal. Katakan y = 15 dan x = 5. Pilih semua 3003 cara yang berbeda untuk memilih 5 variabel dan untuk masing-masing membuat klausa baru dengan DAN dari variabel-variabel tersebut DAN dan dari negasi dari variabel yang tersisa. Anda berakhir dengan 3003 klausa yang masing-masing panjangnya tepat 15 dengan total biaya 45054.
Jawaban Anda harus berupa ekspresi logis dari jenis yang hanya dapat disisipkan ke python, katakanlah, jadi saya bisa mengujinya. Jika dua orang mendapatkan ekspresi ukuran yang sama, kode yang menjalankan kemenangan tercepat.
Anda diizinkan untuk memperkenalkan variabel baru ke dalam solusi Anda. Jadi dalam hal ini rumus logis Anda terdiri dari variabel biner y, x dan beberapa variabel baru. Seluruh rumus akan memuaskan jika dan hanya jika jumlah variabel y sama dengan x.
Sebagai latihan awal beberapa orang mungkin ingin memulai dengan y = 5 variabel menambahkan ke x = 2. Metode naif kemudian akan memberikan biaya 50.
Kode harus mengambil dua nilai y dan x sebagai input dan output rumus dan ukurannya sebagai output. Biaya solusi hanyalah hitungan mentah variabel dalam outputnya. Jadi (a or b) and (!a or c)
diperhitungkan sebagai 4. Satu-satunya operator yang diizinkan adalah and
, or
dan not
.
Pembaruan Ternyata ada metode pintar untuk menyelesaikan masalah ini ketika x = 1, setidaknya secara teori.
z[0] = y[0] and y[1]
, bagaimana Anda ingin ini ditunjukkan?
z[0]
mewakili y[0] or y[1]
maka saya hanya perlu memperkenalkan klausa yang terlihat seperti (y[0] or y[1]) or not z[0]
(atau pernyataan yang setara menggunakan 3 operator diperbolehkan).