您已被聘请为听写应用程序编写一些代码,该应用程序从语音来源获取语音输入,将其解析为单词,然后将其写在屏幕上。
管理层并不真正相信您在项目中拥有如此强大的力量-不幸的是,您整天坐在那里闲逛,打高尔夫球,而不是去做工作,因此-他们只是给您执行一个非常简单的任务:将句点插入到正确格式化的句子中的句子,其中“正确格式化”的定义如下。
句子是输入字符串。单词是一组连续的非空格字符。标点符号是第一个字符为的单词
^
。如果单词的第一个字母不是小写字母(大写单词与regex匹配),则单词为大写
/[^a-z].*/
。句子的第一个字必须大写。
A
^COMMA
是逗号字符,
,在其后但没有前有一个空格。aaa ^COMMA bbb
成为aaa, bbb
。A
^COLON
是看起来像的逗号:
。A
^SEMICOLON
是看起来像的逗号;
。A
^PERIOD
是看起来像的逗号.
。后面的单词^PERIOD
必须大写。A
^BANG
是一个看起来像的时期!
。A
^DASH
是破折号字符-
,前后都有一个空格。A
^HYPHEN
也是破折号,-
但前后没有空格。An
^EMDASH
是拼写的连字符(而不是破折号!)--
。An
^OPENQUOTE
是一个引号字符"
,在其前面但后面没有空格。后面的单词^OPENQUOTE
必须大写。如果在^OPENQUOTE
之前加上非标点^COMMA
词,请在该词和之间添加一个^OPENQUOTE
。如果在^OPENQUOTE
的前面加上使下一个单词大写的标点符号,则会跳过^OPENQUOTE
到下一个单词。A
^CLOSEQUOTE
是有向图,"
,其后跟但前无空格。如果^CLOSEQUOTE
前面有一个^COMMA
,^PERIOD
或^BANG
,即标点消失,^CLOSEQUOTE
拼写,"
,."
或者!"
分别。如果消失的标点指定大写,则该大写仍必须出现在下一个可用单词上。必须删除完整最终结果中的开头或结尾空格,并且一行中两个或多个空格的任何字符串都必须全部折叠成一个空格字符。
上面未涉及的任何情况(例如
^COMMA ^COMMA
或^SEMICOLON ^CLOSEQUOTE
或^UNDEFINEDPUNCTUATION
)都不会出现在格式正确的输入中,因此是不确定的行为。
开发团队会通知您以下内容:
该项目以[您在这里的语言]语言编写,并且应尽可能短,以便在它是Android / iPhone应用程序时占用尽可能少的空间。您尝试解释这不是应用程序开发的工作原理,但他们不听。但是,嘿,真是巧合!您是[[您这里的语言]的出色高尔夫球手!
该应用程序将没有任何Web访问权限,并且不会安装任何库来为您执行此格式设置。您可以说服团队领导允许您使用正则表达式库(如果您的语言存在),但是如果您认为需要的话。
计划在应用程序的更高版本中支持正确使用双引号/单引号的嵌套引号,但现在不支持您正在使用的版本,因此不必担心。
管理层是测试驱动开发的忠实拥护者,因此开发团队已经让一些不幸的键盘猴子为您的程序部分编写了一些测试:(添加了换行符以提高可读性,将它们视为空格)
输入:
hello ^COMMA world ^BANG
输出:
Hello, world!
输入:
once upon a time ^COMMA there was a horse ^PERIOD that horse cost me $50 ^PERIOD ^OPENQUOTE eat your stupid oats ^COMMA already ^BANG ^CLOSEQUOTE I told the horse ^PERIOD the horse neighed back ^OPENQUOTE no ^CLOSEQUOTE and died ^PERIOD THE END
输出:
Once upon a time, there was a horse. That horse cost me $50. "Eat your stupid oats, already!" I told the horse. The horse neighed back, "No," and died. THE END
输入:
begin a ^PERIOD b ^COMMA c ^COLON d ^SEMICOLON e ^BANG f ^HYPHEN g ^DASH h ^EMDASH i ^OPENQUOTE j ^PERIOD ^OPENQUOTE k ^SEMICOLON ^OPENQUOTE l ^CLOSEQUOTE m ^BANG ^CLOSEQUOTE n ^PERIOD 0x6C6F6C end
输出:
Begin a. B, c: d; e! F-g - h--i, "j. "K; "l," m!" N. 0x6C6F6C end
这是代码高尔夫:最低分获胜。您可以编写一个字符串参数的函数,也可以编写从STDIN读取并写入STDOUT的程序。
prompt()
吗?