似乎不太适合代码打高尔夫球的鲜为人知的编程范例之一是面向重叠编程(OOP) *。当编写部分相同的代码时,只需将相同的部分重叠并以某种方式记住两条原始代码行的开头,就可以节省许多字节。您的任务是编写两个重叠的程序或函数compress
,decompress
并遵循以下规范:
*请不要在生产代码中使用。
compress
compress
以任何方便的格式获取两个字符串,并尽可能地将它们重叠。即s
返回的字符串的长度最小,这样两个输入字符串都是的子字符串s
。此外,返回一些标识两个字符串的开始和结束索引的输出。
示例:(具体的IO格式由您决定)
compress("abcd", "deab") -> "deabcd" ((2,5),(0,3))
compress("abcd", "bc") -> "abcd" ((0,3),(1,2))
compress("abc", "def") -> "abcdef" ((0,2),(3,5)) or "defabc" ((3,5),(0,2))
decompress
decompress
计算的反函数compress
,给定一个字符串和两个开始和结束索引(以您的返回格式compress
),返回两个原始字符串。您只需要处理有效的输入。以下等式适用于所有字符串s1
,s2
:
(s1, s2) == decompress (compress (s1, s2))
示例:(compress
示例的反向)
decompress "deabcd" ((2,5),(0,3)) -> "abcd" "deab"
decompress "abcd" ((0,3),(1,2)) -> "abcd" "bc"
decompress "abcdef" ((0,2),(3,5)) -> "abc" "def"
or (whichever version your "compress" generates)
decompress "defabc" ((3,5),(0,2)) -> "abc" "def"
计分
您的分数是通过调用返回的字符串的大小compress("<code of compress>", "<code of decompress>")
。由于这是代码高尔夫球,因此分数越低越好。
例:
假设代码为你的功能compress
是c=abcd
,为代码decompress
IS d=efghi
。然后compress("c=abcd", "d=efghi")
产生收益"c=abcd=efghi"
(以及指数,但那些指数不会影响得分),因此得分为length "c=abcd=efghi" = 12
。
附加规则
- 本着挑战的精神,您
compress
和您decompress
必须在至少一个字符上重叠。您可以通过添加注释来轻松实现此目的,但请注意,这样做会增加得分,并且使用内在重叠的代码可能会缩短解决方案。 compress
并且decompress
应该能够处理包含任何可打印ASCII字符以及用于定义compress
和的所有字符的字符串decompress
。- 索引可以是零索引或一索引。
- 您的程序或函数不必实际命名为
compress
和decompress
。