เขียน Censor D * mn ที่ไม่คลุมเครือ


16

การตรวจจับเป็นเครื่องมือทั่วไปที่ใช้กับ interwebs แต่พวกเขามักตรวจข่าวมากเกินไปและทำให้คำสาปแช่งคลุมเครือต่อผู้อ่าน และบางครั้งพวกเขาตรวจข่าวไม่เพียงพอดังนั้นคำเหล่านั้นจึงยังคงขุ่นเคือง งานของคุณคือแก้ไขมัน

งานของคุณ

เขียนโปรแกรม / ฟังก์ชั่น / อะไรก็ตามที่ใช้สองรายการและสตริง ["hello", "goodbye", "belgium", "offensive", "jumping", "hypercool"]รายการแรกจะเป็นในพจนานุกรมของทุกคำในภาษาของคุณเช่น: ต่อไปจะเป็นส่วนหนึ่งของรายการแรกที่มีทั้งหมดของความไม่พอใจ["belgium", "offensive"]คำในภาษา: คำในรายการเหล่านี้รับประกันว่าจะมีตัวอักษรตัวพิมพ์เล็กเท่านั้นของตัวอักษร

สตริงเป็นวลีที่คุณจะต้องตรวจสอบ มันจะทำจากคำจากพจนานุกรมคั่นด้วยช่องว่าง:"Goodbye offensive belgium"

ค่าส่งคืนจะถูกตรวจสอบวลีนั้น อย่างไรก็ตามคุณต้องเซ็นเซอร์ในวิธีที่แน่นอน โดยเฉพาะอย่างยิ่งสำหรับแต่ละคำในรายการที่ไม่เหมาะสมคุณต้องตรวจสอบตัวอักษรให้มากที่สุดเท่าที่จะเป็นไปได้ในขณะที่ยังคงชัดเจนในพจนานุกรมหลัก Goodbye o******** b******ดังนั้นที่นี่มันจะเป็น:

ชี้แจง

  • รหัสของคุณต้องตีความคำที่เป็นตัวพิมพ์ใหญ่ - เล็ก แต่กลับมาพร้อมกับการใช้อักษรตัวพิมพ์ใหญ่เริ่มต้น
  • หากมีคำตอบที่ดีที่สุดหลายข้อให้เลือกข้อใดข้อหนึ่ง
  • หากการเซ็นเซอร์ที่ไม่ชัดเจนนั้นเป็นไปไม่ได้ให้ตรวจสอบจดหมายฉบับเดียวที่มีการตีความที่เป็นไปได้น้อยที่สุด (หากเป็นไปได้หลายฉบับ

กรณีทดสอบ

["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*"

นี่คือดังนั้นรหัส d * mn สั้นที่สุดในหน่วยไบต์ชนะ!

PS ใครก็ตามที่อ้างอิงกับเบลเยี่ยม? ; P


ในคำอธิบายของคุณคุณพูด["hello", "goodbye", "belgium", "offensive"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye o******** b******"แต่กรณีทดสอบบอกว่า["hello", "goodbye", "belgium", "offensive"] ["belgium", "offensive"] "Goodbye offensive belgium" -> "Goodbye offensive b******" กรณีทดสอบผิดถูกต้อง?
Jerry Jeremiah

@JerryJeremiah แก้ไขแล้ว
Maltysen

5
ฉันขอขอบคุณคุณที่จะ จำกัด คำพูดเช่น "B * lgium" ให้เป็นงานศิลปะ
ชำนาญวิชาประวัติศาสตร์

2
@ หรือฉันคิดว่าคำถามของฉันยังไม่ชัดเจนพอ "ผู้อ่าน" ของข้อความที่ถูกเซ็นเซอร์เหล่านี้ไม่ทราบว่ามีรายการเซ็นเซอร์อยู่ พวกเขาเพิ่งรู้คำสั่งหลัก
Maltysen

1
@Maltysen - มีเพียง Zaphod เท่านั้นที่จะกล้าหาญพอที่จะใช้คำเช่น b ****** เป็นข้อความธรรมดาแม้ว่าจะอธิบายปัญหาก็ตาม ฉันตกใจ แน่นอนว่าคุณไม่ใช่คนขี้แพ้!
เล่นแร่แปรธาตุ

คำตอบ:


1

JavaScript ES7, 194 ไบต์

(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` `

ฟังก์ชั่นที่มีขนาดใหญ่มาก ฉันคาดเดาไม่กี่ไบต์ที่สามารถตีกอล์ฟได้ แต่ไม่มากนักเว้นแต่ฉันจะเปลี่ยนวิธีการทำงานของมันโดยสิ้นเชิง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.