您今天面临的挑战是如何实现t9t9功能。
您将实现一个只有2个参数的函数。
您将收到一个字符串中的1个电话号码和文本文件的内容,其中包含一个单词列表(不要采用特定的换行符)。
您可以使用链接https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt测试功能,也可以使用/usr/share/dict/words (查看包含单词列表的文本文件[已关闭]获取更多信息)。
你可以假设你总能收到至少两个号码。
给定数字,您将从单词列表中读取单词,并返回从字母映射到这些单词的单词。这意味着输入应该是从2到9之间的数字。
如果收到无效输入,您可以做任何想做的事情。
如果没有找到匹配项,则可以返回空列表null/nil或0。
请记住,手机钥匙被映射到它们对应的字符:
示例:
f('52726')
//returns ["Japan","japan","Japanee","Japanese","Japanesque"...,"larbowlines"]
f('552')
//returns ["Kjeldahl","kjeldahlization","kjeldahlize"...,"Lleu","Llew"]
f('1234')
//makes demons fly out your nose or divide by 0
f('9999')
//returns ["Zyzzogeton"]
f('999999')
//returns [] or null/nil or 0在运行您的函数之后,您可以以任意方式打印它。
规则:
null/nil,如果不返回某些内容,Javascript也将返回undefined,因此这是一条规则。innerText/textContent将作为第二个参数传递。var的变量会使代码无效。f评分:
下面是一个使用Javascript实现的示例:
function f(phone, words)
{
var keypad=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];
var regex='';
for(var i=0,l=phone.length;i<l;i++)
{
regex+='['+keypad[phone[i]]+']';
}
var regexp=new RegExp('\\s('+regex+'[a-z]*)\\s','gi');
return words.match(regexp);
}要运行它,打开列表链接并运行,例如:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]此示例在Windows 7 64位上的Opera12.17 64位下进行了测试和工作。
发布于 2014-12-06 21:18:16
q~{el{'h-_9/-D+3/}%s1$#!},p;以"<number>" [<list of words>]的形式接受输入
示例:
"52726" ["Japan" "japan" "Japanee" "Japanese" "Japanesque" "larbowlines" "ablution" "ablutionary" "abluvion" "ably" "abmho" "Abnaki" "abnegate"]输出:
["Japan" "japan" "Japanee" "Japanese" "Japanesque" "larbowlines"]暂时不去拿任何奖金。
在这里尝试在线代码,但是对于实际的时间测量,请在Java编译器上运行它
请注意,CJam表示空列表,如""
若要将原始code列表转换为CJam列表,请使用以下代码将code列表作为输入:
qN/p发布于 2014-12-07 03:40:41
这就形成了基于每个数字所允许的字母的正则化模式,然后在.*的末尾插入以匹配以下任何字符。
这是金色的版本:
static ArrayList<String> f(String n,ArrayList<String> d){String[] k={"","","([A-Ca-c])","([D-Fd-f])","([G-Ig-i])","([J-Lj-l])","([M-Om-o])","([P-Sp-s])","([T-Vt-v])","([W-Zw-z])"};String r="";for(int i=0;i<n.length();++i)r+=k[n.charAt(i)-'0'];r += ".*";Pattern p=Pattern.compile(r);ArrayList<String> a=new ArrayList<String>();for(String w:dictionary)if(p.matcher(w).matches())a.add(w);return a;}这是阅读能力的非黄金版本。
public static ArrayList<String> f(String phoneNumber, ArrayList<String> dictionary) {
String[] KEY_VALUES = {"", "", "([A-Ca-c])", "([D-Fd-f])", "([G-Ig-i])",
"([J-Lj-l])", "([M-Om-o])", "([P-Sp-s])",
"([T-Vt-v])", "([W-Zw-z])"};
String regex = "";
for (int i = 0; i < phoneNumber.length(); ++i) {
regex += KEY_VALUES[phoneNumber.charAt(i) - '0'];
}
regex += ".*";
Pattern p = Pattern.compile(regex);
ArrayList<String> answers = new ArrayList<String>();
for (String word : dictionary) {
if (p.matcher(word).matches()) {
answers.add(word);
}
}
return answers;
}发布于 2014-12-08 10:44:29
这应该是可行的:
IEnumerable<string>F(string n,string d){IEnumerable<string>w=d.Split(null).ToList();string[]a={"","","abc","def","ghi", "jkl","mno","pqrs","tuv","wxyz"};foreach(var i in n){w=w.Where(x=>x.IndexOfAny(a[i-'0'].ToArray())>0);}return w;}https://codegolf.stackexchange.com/questions/42220
复制相似问题