Memecahkan varian dari teka-teki mata biru

8

Teka-teki asli "Mata Biru" diberikan di sini (dan di bawah).

Sekelompok orang dengan berbagai macam warna mata hidup di sebuah pulau. Mereka semua adalah ahli logika yang sempurna - jika suatu kesimpulan dapat disimpulkan secara logis, mereka akan langsung melakukannya. Tidak ada yang tahu warna mata mereka. Setiap malam tengah malam, sebuah feri berhenti di pulau itu. Penduduk pulau yang mengetahui warna mata mereka sendiri kemudian meninggalkan pulau, dan sisanya tinggal. Setiap orang dapat melihat orang lain setiap saat dan menghitung jumlah orang yang mereka lihat dengan masing-masing warna mata (tidak termasuk diri mereka sendiri), tetapi mereka tidak dapat berkomunikasi. Semua orang di pulau itu tahu semua aturan dalam paragraf ini.

Di pulau ini ada 100 orang bermata biru, 100 orang bermata coklat, dan sang Guru (dia kebetulan memiliki mata hijau). Jadi setiap orang yang bermata biru dapat melihat 100 orang dengan mata cokelat dan 99 orang dengan mata biru (dan satu dengan hijau), tetapi itu tidak memberi tahu dia warna matanya sendiri; sejauh yang dia tahu totalnya bisa 101 cokelat dan 99 biru. Atau 100 coklat, 99 biru, dan dia bisa memiliki mata merah.

Guru diizinkan berbicara satu kali (misalkan pada siang hari), pada suatu hari di tahun-tahun tanpa akhir mereka di pulau itu. Berdiri di depan penduduk pulau, ia mengatakan yang berikut:

"Aku bisa melihat seseorang yang memiliki mata biru."

Siapa yang meninggalkan pulau itu, dan pada malam apa?

The Jawabannya adalah bahwa mereka semua meninggalkan pada hari keseratus. Ini disebabkan oleh logika berikut:

Jika hanya ada satu orang bermata biru saja, ia akan pergi pada hari pertama. Jika hanya ada orang bermata dua saja, tidak ada yang pergi pada hari pertama. Setelah ini, mereka berdua pergi pada hari kedua. Sekarang jika ada 3 orang biru orang-orang, tidak ada yang pergi pada hari ke-1. Sekarang semua orang tahu bahwa ada 3 orang bermata biru, karena jika hanya ada satu, dia akan pergi pada hari 1 dan jika ada dua, mereka berdua akan pergi pada hari 2. Oleh karena itu semua 3 pergi pada hari 3.

Kita sekarang dapat menulis bukti induktif bahwa jika n orang bermata biru membutuhkan n hari untuk mengetahui warna mata mereka dan pergi, maka n +1 orang bermata biru membutuhkan n +1 hari untuk melakukan hal yang sama.

Namun, kode yang Anda tulis harus mampu memecahkan tidak hanya teka-teki asli, tetapi juga beberapa varian yang memerlukan langkah induktif yang sedikit berbeda.

Anda akan diberi tahu berapa banyak penduduk pulau yang memiliki mata biru dan berapa banyak yang tidak. Anda juga akan diberikan pernyataan oleh oracle (sistem persamaan / ketidaksetaraan) yang didengar semua orang di pulau itu. Anda perlu menentukan kapan pulau itu akan bebas dari orang-orang bermata biru.

Pernyataan oracle akan digunakan buntuk jumlah orang bermata biru dan runtuk jumlah orang yang tidak bermata biru. Persamaan dapat mencakup < > <= >= = + -dan semua bilangan bulat.

Uji kasus

Berdasarkan ini set varian

50 50
b>=1
b<b+r

Keluaran: 50

Persamaan kedua tidak memberikan informasi baru, maka masalah ini menjadi persis sama dengan teka-teki asli.

100 50
b+3>=r+4

Keluaran: 25

100 0
b-2>8+1-1

Keluaran: 90

50 50
b>=10
b<=75

Keluaran: 41

ghosts_in_the_code
sumber
@ Dennis Apakah tidak apa-apa sekarang?
ghosts_in_the_code
Aku pikir begitu. Satu klarifikasi kecil: Itu tidak terlihat seperti dari kasus uji, tetapi dapatkah persamaan (dalam) mencakup perkalian implisit seperti 3b<2r?
Dennis
@ Dennis Tidak, tapi itu bisa ditulis sebagai b+b+b < r+rgantinya.
ghosts_in_the_code
Kasus uji ketiga mengklaim didasarkan pada "Paling tidak 10 dari Anda bermata biru", tetapi sebenarnya disederhanakan menjadi b>10, bukan b>=10, jadi hasilnya seharusnya 90, bukan 91.
Anders Kaseorg
@AndersKaseorg Terlalu malas untuk memeriksa tetapi saya percaya Anda, karenanya diedit.
ghosts_in_the_code

Jawaban:

1

Python 2 , 60 48 byte

f=lambda b,r,c:all(map(eval,c))and-~f(b-1,r+1,c)

Cobalah online!

Bagaimana itu bekerja

Dengan induksi:

  • Jika komposisi pulau adalah ( b , r ) dan diketahui bahwa ( b - 1, r + 1) tidak memungkinkan, maka pada hari 1, penduduk pulau bermata biru, melihat ( b - 1, r ), akan menyimpulkan bahwa mereka bermata biru dan pergi.
  • Jika komposisi pulau adalah ( b , r ) dan diketahui bahwa penduduk pulau bermata biru akan pergi pada hari n jika komposisinya adalah ( b - 1, r + 1), maka pada hari n + 1, blue- penduduk pulau bermata, melihat ( b - 1, r ), akan menyimpulkan bahwa mereka bermata biru dan pergi.

Kesimpulan kedua ini gagal jika b = 1, tetapi dalam kasus itu, penduduk pulau bermata biru tidak akan pernah pergi jika mereka belum melakukannya, dan kasus uji akan menjadi tidak valid.

Perhatikan bahwa penduduk pulau yang tidak bermata biru tidak akan pernah pergi, dalam versi teka-teki ini, karena walaupun mereka menggunakan logika yang sama untuk menyimpulkan bahwa mereka bukan bermata biru, mereka masih tidak tahu warna yang bukan biru mata mereka. .

Anders Kaseorg
sumber