受我在Reddit上找到的链接的启发。
FuzzyFinder是许多文本编辑器的一个特性。当您开始键入文件路径S时,FuzzyFinder将启动并显示当前目录中包含您输入的字符串的所有文件,并按S在文件中的位置排序。
你的任务是实现一个模糊查找器。它应该是程序或函数(通过stdin、函数参数或命令行)、字符串S和字符串L列表(按您的意愿格式化),并返回或打印运行模糊查找器的结果。搜索应该区分大小写。S在多个字符串中处于相同位置的结果可以按您的意愿排序。
示例:
Input: mig, [imig, mig, migd, do, Mig]
Output:
[mig, migd, imig]
OR
[migd, mig, imig]这是密码高尔夫,所以最短的解决方案获胜。
发布于 2015-06-22 21:34:31
oxNzf}zTQ在线试用:游行示威
implicit: z = input string, Q = input list
f Q filter Q for elements T, which satisfy:
}zT z is substring of T
o order the remaining strings N by:
xNz the index of z in N发布于 2015-06-22 22:10:46
def f(s,l):g=lambda x:x.find(s)+1;print sorted(filter(g,l),key=g)表达式x.find(s)返回s第一次出现在x中的位置,给出不匹配的-1。我们将1添加到不匹配对应于0的结果中,允许将它们输出filter。然后,我们根据匹配位置进行排序,不受1的移动影响。
发布于 2015-06-22 19:42:09
(s,l,f=j=>j.indexOf(s))=>l.filter(w=>~f(w)).sort((a,b)=>f(a)>f(b))这是一个匿名函数,它接受参数s (文件路径字符串)和l (字符串数组)。下面的堆栈代码段包含转换为ES5的未使用的代码,这样更多的人可以轻松地测试它。(如果你有火狐,你可以使用edc65 65‘S更漂亮的测试套件,在他的回答中找到。)
f=function(s,l){
g=function(j){
return j.search(s)
}
return l.filter(function(w){
return ~g(w)
}).sort(function(a,b){
return g(a)>g(b)
})
}
id=document.getElementById;run=function(){document.getElementById('output').innerHTML=f(document.getElementById('s').value,document.getElementById('l').value.split(', ')).join(', ')};document.getElementById('run').onclick=run;run()<label>File path: <input type="text" id="s" value="mig" /></label><br />
<label>Files: <input type="text" id="l" value="imig, mig, migd, do, Mig" /></label><br />
<button id="run">Run</button><br />
Output: <output id="output"></output>https://codegolf.stackexchange.com/questions/52012
复制相似问题