目的
编写一个例程,该例程接受可打印的ASCII字符s字符串,并返回包含与s相同字符的字符串,并重新排序,以使两个字符的子字符串不会出现多次。该程序必须在一台现代计算机上在不到一分钟的时间内处理所有基准字符串(见下文)。我还将向得分最低的答案(在不到一分钟的时间内处理任何有效的30个字符的字符串)颁发50 rep的特别奖励。
例如,给定input Mississippi
,有效输出将是issiMspiips
(两个字符的子字符串不会出现两次),而无效输出将是ipMsispiiss
(因为子字符串is
出现两次)。
该例程可以采用以下形式:
- 从
stdin
(或等效项)或命令行读取完整的程序,并输出至stdout
(或等效项) - 接受单个字符串参数并返回字符串的函数
您可以假设输入字符串始终允许至少一个有效输出。
挑战
您的例程必须包含5行或更多行的代码,并用换行符分隔。空行(包括仅包含空格的行)在所有上下文中都将被忽略,并且不会计入总行数。
在源代码中交换任何两行都必须产生致命错误。所谓“致命错误”,是指以下任何一种情况:
- 源代码无法编译,编译器/解释器声明了致命错误
- 例程因运行时致命错误或未处理的运行时异常而中止
- 例程被迫突然终止,异常程序终止,除了可能的错误消息和/或堆栈转储之外,不产生任何形式的输出
或者,可以使用不包含换行符的连续代码块代替行。这些块应分别在源文件中的各自行上显示,并应理解在编译/解释源代码之前应删除换行符。
例如,代码
aaaa
bbbb
cccc
会凝结为
aaaabbbbcccc
在评估之前。
在这种模式下,致命错误条件适用于交换任何两个代码块(因此适用于交换源代码中的行,然后再去除换行符)。因此,在上面的示例中,例程aaaaccccbbbb
,bbbbaaaacccc
和ccccbbbbaaaa
必须在编译时或运行时都产生致命错误。
使用此替代模式的提交应声明其使用。
计分
让Ñ是在源文件中的非空的文本行的个数,与Ñ ≥5令Ç是由所包含的字节数最长的TextLine在源文件(由字节长度)不计算任何尾随换行符。
提交的分数由c(n + 10)给出。
得分最低的提交者为获胜者。
祝你好运。;)
基准字符串
Abracadabra Alacazam
Is Miss. Mississauga Missing?
Ask Alaska's Alaskans
GGGGAAAATTTTCCCCgggaaatttccc
A Man A Plan A Canal Panama
Mspiisiipss
有效,因为唯一的重复是ii
不会发生的Mississippi
?
CooliO
,输出oOoCli
?