首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现t9类功能

实现t9类功能
EN

Code Golf用户
提问于 2014-12-06 20:01:19
回答 4查看 2.7K关注 0票数 11

您今天面临的挑战是如何实现t9t9功能。

您将实现一个只有2个参数的函数。

您将收到一个字符串中的1个电话号码和文本文件的内容,其中包含一个单词列表(不要采用特定的换行符)。

您可以使用链接https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt测试功能,也可以使用/usr/share/dict/words (查看包含单词列表的文本文件[已关闭]获取更多信息)。

你可以假设你总能收到至少两个号码。

给定数字,您将从单词列表中读取单词,并返回从字母映射到这些单词的单词。这意味着输入应该是从2到9之间的数字。

如果收到无效输入,您可以做任何想做的事情。

如果没有找到匹配项,则可以返回空列表null/nil0

请记住,手机钥匙被映射到它们对应的字符:

  • 0和1无效
  • 2匹配abc
  • 3匹配定义
  • 4匹配ghi
  • 5匹配jkl
  • 6匹配mno
  • 7匹配pqrs
  • 8匹配tuv
  • 9个匹配的wxyz

示例:

代码语言:javascript
复制
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,因此这是一条规则。
  • 您不能使用或重新实现他人的答案或复制我的实现。
  • 对于Javascript,您可以假设浏览器已经打开,自动元素的innerText/textContent将作为第二个参数传递。
  • 对于已编译语言,不能将特殊参数传递给编译器。
  • 您可以通过编译器参数接收文件名。
  • 变量、宏、全局变量、常量、非标准类以及函数内传递其他值的所有排序都将被视为无效。
  • 在Javascript中,没有关键字var的变量会使代码无效。
  • 您的函数将命名为f
  • 您只能并且只有两个函数的参数
  • 尽量将代码保持在500秒以下以运行。
  • 你不用担心空格
  • 您必须只使用ASCII,可打印的characters.异常是只使用不可打印字符的语言(APL和空格是两个示例)。

评分:

  • 最小字节数获胜
  • 在您的答案中有无效的ASCII可打印字符,将计算为在乌特夫-32中编码的答案--编码的异常将使您的答案按字符计数。
  • 只有函数体才能计数,不要计算你在它之外做的任何事情
  • 如果你建立一个基于邻域或最常用词汇的预测系统,奖金为-30%。
  • 如果您只返回与第一个数字对应的每个字母的前5个匹配项,则奖金为-20% (例如: 245将返回以'a‘开头的5个单词,以'b’开头的5个单词,以‘c’开头的第5个单词)。

下面是一个使用Javascript实现的示例:

代码语言: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);
}

要运行它,打开列表链接并运行,例如:

代码语言:javascript
复制
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]

此示例在Windows 7 64位上的Opera12.17 64位下进行了测试和工作。

EN

回答 4

Code Golf用户

回答已采纳

发布于 2014-12-06 21:18:16

CJam,28字节

代码语言:javascript
复制
q~{el{'h-_9/-D+3/}%s1$#!},p;

"<number>" [<list of words>]的形式接受输入

示例:

代码语言:javascript
复制
"52726" ["Japan" "japan" "Japanee" "Japanese" "Japanesque" "larbowlines" "ablution" "ablutionary" "abluvion" "ably" "abmho" "Abnaki" "abnegate"]

输出:

代码语言:javascript
复制
["Japan" "japan" "Japanee" "Japanese" "Japanesque" "larbowlines"]

暂时不去拿任何奖金。

在这里尝试在线代码,但是对于实际的时间测量,请在Java编译器上运行它

请注意,CJam表示空列表,如""

若要将原始code列表转换为CJam列表,请使用以下代码将code列表作为输入:

代码语言:javascript
复制
qN/p
票数 3
EN

Code Golf用户

发布于 2014-12-07 03:40:41

Java: 395

这就形成了基于每个数字所允许的字母的正则化模式,然后在.*的末尾插入以匹配以下任何字符。

这是金色的版本:

代码语言:javascript
复制
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;}

这是阅读能力的非黄金版本。

代码语言:javascript
复制
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;
}
票数 2
EN

Code Golf用户

发布于 2014-12-08 10:44:29

C# .NET 4.5 235

这应该是可行的:

代码语言:javascript
复制
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;}
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/42220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档