编写一个需要两个输入的程序或函数:
- 一条短信
- 此 Github文件中显示的英语词典(包含约60000个单词)
并输出消息中的拼写错误数(有关定义和测试用例,请参见下文)。
您可以将字典作为函数的参数,作为程序期望找到的预定义文件,以代码中的硬编码数据或任何其他明智的方式接收。
您的代码本身应该看起来像一条短信,并且拼写错误最少。因此,您将通过将代码本身作为输入输入来计算代码的分数。
获胜者是得分最低的代码(可能的最低得分为0)。如果有多个分数相同的答案,则获胜者取决于代码大小(以字符为单位)。如果仍然有两个答案,则获胜者是较早的一个。
如果需要,可以假定输入消息为ASCII码(字节32 ... 126),其中换行符以常规方式编码(1字节“ 10”或2字节“ 13 10”),并且为非空。但是,如果您的代码包含非ASCII字符,则它也应支持非ASCII输入(以便它可以计算自己的分数)。
字符分为以下几类:
- 字母 a ... z和A ... Z
- 空格(此处定义为空格字符或换行符)
- 标点
.
,
;
:
!
?
- 句子结束
.
!
?
- 句子结束
- 垃圾(其余所有)
甲字被定义为字母序列,这是最大的(即,既不,前面和后面通过一字母)。
甲句子被定义为不属于句结束字符的最大序列。
如果字符违反任何拼写规则,则表示拼写错误:
- 字母必须属于词典单词(或者换句话说:没有出现在词典中的每个长度为N的单词都算作N个拼写错误)
- 句子中的第一个字符(忽略任何开头的空白字符)必须是大写字母
- 除上一条规则指定的字母外,所有字母均必须小写
- 标点符号只能在字母或乱码之后使用
- 换行符只能在句子结尾的字符之后
- 消息开头和之后的空格字符不允许使用空格字符
- 不应有垃圾(或换句话说:每个垃圾字符计数是一个拼写错误)
另外,最后一句必须为空或仅由一个换行符组成(即,消息应以句子结尾字符和可选的换行符结尾-我们称之为规则8)。
测试用例(在每个字符下面是一个违反的规则;在后面=>
是必需的答案):
Here is my 1st test case!!
711 4 => 4
main(){puts("Hello World!");}
2 777 883 3 77 78 => 12
This message starts with two spaces
66 8 => 3
What ? No apostrophe's??
4 71 4 => 4
Extra whitespace is BAD!
66 661111111111 66 66333 => 21
Several
lines?
Must be used only to separate sentences.
=> 1 (first linebreak is en error: rule 5)
"Come here," he said.
73 7 => 3 (sentence starts with '"', not 'C')
2
我原本希望有一堆漏洞,但是您似乎已经涵盖了所有漏洞。向我+1。
—
内森·美林
我认为SPL是这里的赢家。
—
Gurupad Mamadapur
看到这个,我想到了“ Applescript”。但是,没有Mac。
—
PurkkaKoodari
@PeterTaylor我不希望规则变得过于复杂。您的测试用例很好;我将其添加到我的帖子中。
—
anatolyg