Tuliskan D * mn Sensor Tidak ambigu

16

Sensor adalah alat yang umum digunakan pada jalinan. Tetapi mereka sering menyensor terlalu banyak kata, dan dengan demikian membuat kutukan menjadi ambigu bagi pembaca. Dan kadang-kadang mereka tidak cukup menyensor, jadi kata-katanya masih menyinggung. Tugas Anda adalah memperbaikinya.

Tugas Anda

Tulis program / fungsi / apa pun yang membutuhkan dua daftar dan sebuah string. Daftar pertama akan menjadi kamus semua kata dalam bahasa Anda seperti: ["hello", "goodbye", "belgium", "offensive", "jumping", "hypercool"]. Selanjutnya akan subset dari daftar pertama yang berisi semua ofensif kata-kata dalam bahasa: ["belgium", "offensive"]. Kata-kata dalam daftar ini dijamin hanya berisi huruf kecil alfabet.

String adalah frasa yang harus Anda sensor. Ini akan dibuat dari kata-kata dari kamus, dipisahkan oleh spasi:"Goodbye offensive belgium"

Nilai pengembalian akan menjadi frasa yang disensor. Namun, Anda harus menyensor dengan cara tertentu. Khususnya, untuk setiap kata dalam daftar ofensif, Anda harus menyensor sebanyak mungkin huruf sambil tetap sama sekali tidak ambigu dalam kamus utama. Jadi di sini itu akan menjadi: Goodbye o******** b******.

Klarifikasi

  • Kode Anda harus menafsirkan kata-kata case-insensitive, tetapi kembali dengan huruf kapital awal.
  • Jika ada beberapa jawaban optimal, pilih salah satu dari mereka.
  • Jika penyensoran yang tidak ambigu tidak mungkin dilakukan, lakukan penyensoran satu huruf yang memiliki jumlah interpretasi yang paling sedikit (Jika banyak yang dimungkinkan, sekali lagi, pilih sendiri).

Uji Kasus

["hello", "goodbye", "belgium", "offensive", "jumping", "hypercool"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye o******** b******"
["word"] ["word"] "word" -> "****"
["hot", "hat", "bat", "had"] ["hat"] "hat" -> "*at" or "h*t" or "ha*"
https://gist.github.com/deekayen/4148741 ["quart"] "I am a quart" -> "I am a q**r*"

Ini adalah sehingga kode d * mn terpendek dalam byte menang!

PS Adakah yang menangkap referensi dengan Belgia? ; P

Maltysen
sumber
Dalam penjelasan Anda, Anda mengatakan ["hello", "goodbye", "belgium", "offensive"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye o******** b******"tetapi test case mengatakan ["hello", "goodbye", "belgium", "offensive"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye offensive b******" Test case salah, benar?
Jerry Jeremiah
@JerryJeremiah memperbaiki.
Maltysen
5
Saya berterima kasih kepada Anda untuk membatasi ucapan seperti "B * lgium" untuk sesuatu yang artistik.
histokrat
2
@ Atlp Saya kira pertanyaan saya tidak cukup jelas. "Pembaca" dari pesan yang disensor ini tidak mengetahui keberadaan daftar sensor. Mereka hanya tahu dict utama.
Maltysen
1
@Maltysen - hanya Zaphod sendiri yang akan cukup berani untuk menggunakan kata seperti b ****** dalam teks biasa, bahkan ketika menjelaskan masalah ini. Saya terkejut. Anda pasti bukan orang yang suka omong kosong!
Alchymist

Jawaban:

1

JavaScript ES7, 194 byte

(d,c,s,g=(a,b)=>[...b].reduce((z,l,i)=>z+(a[i]==l?1:0),0))=>[for(s of s.split` `)~d.indexOf(s)?[...c[(x=[for(i of c)g(i,s)]).indexOf(Math.max(...x))]].map((l,i)=>l!=s[i]?`*`:l).join``:s].join` `

Fungsi yang sangat besar. Saya kira beberapa byte dapat diputuskan tetapi tidak banyak kecuali saya benar-benar mengubah cara kerjanya.

Downgoat
sumber