写一个D * mn明确的审查员


16

审查器是互连网上使用的常用工具。但是他们经常审查太多的单词,因此使读者感到模棱两可。有时,他们没有进行足够的审查,因此这些词仍然令人反感。您的任务是解决该问题。

你的任务

编写一个包含两个列表和一个字符串的程序/函数/程序。第一个列表将是您语言中所有单词的字典,例如:["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代码获胜!

附言:有人抓住比利时的参考吗?; 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******" ,对吗?
杰里·耶利米

@JerryJeremiah已修复。
马蒂森(Maltysen)2015年

5
非常感谢您将诸如“ B * lgium”之类的言论限制为艺术性的言论。
历史学家

2
@orlp我想我的问题还不够清楚。这些审查邮件的“阅读者”不知道审查清单的存在。他们只知道主要命令。
马蒂森(Maltysen)

1
@Maltysen-即使Zaphod本人也足够勇敢,可以在纯文本中使用b ******之类的词,即使在解释问题时也是如此。我感到震惊。你绝对不是胡闹!
Alchymist 2015年

Answers:


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

一个非常大的功能。我猜测可以删除一些字节,但是除非我完全改变它的工作方式,否则它不会太多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.