挑战:
编写一个接受布尔值列表并返回True的所有范围的函数或程序。
测试用例:
f [F] = []
f [T] = [[0,0]]
f [T,T,F,T] = [[0,1],[3,3]]
f [F,T,T,F,F,T,T,T] = [[1,2],[5,7]]
f [F,T,T,F,F,F,T,T,T,T] = [[1,2],[6,9]]
f [T,T,F,F,F,T,T,T,T,T,T,T,T,T,T,F] = [[0,1],[5,14]]
f [F,F,T,T,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T] = [[2,3],[12,19],[33,54],[93,94]]
规则:
- 您可以选择输入的编码方式,例如列表,数组,字符串等。
- 必须将输出编码为类似列表的类似列表或显示这样的字符串,因此数组,列表,元组,矩阵,向量等。
- 布尔值必须被编码为常量,否则可以将T / F进行任何简单的转换为所需的常量
- 编辑:允许在运行时评估或类似评估。
- 不要忘记解释如何将输入传递给程序/函数并给出测试用例的输入/输出
- 转换为所需的输入格式不计在内
- 不允许出现标准漏洞
- 如果您的语言具有执行此功能的功能,则不允许
- 我不会接受我自己的提交
- 编辑:输出格式是灵活的。如果未打印列表或类似内容,则范围值必须用一个非数字字符分隔,并且也必须分隔范围。
得分:
- 分数以字节为单位,除非不适合您的语言(例如Piet中的代码)
- 最低分获胜
输入和输出具有很大的灵活性,但是不允许将T / F替换为可以完成所有工作的功能的解决方案。
调试:
如果您用Haskell编写您的代码或可以从Haskell调用它,则以下内容将检查您的函数/程序:
import Test.QuickCheck
tf = cycle [True,False]
gen l = foldl (++) [] $ map (\i -> [tf!!i | x<-[1..i]]) l
putIn (a,b) l = zipWith (||) l [(a <= p) && (p <= b) | p <- [0..length l]]
putAllIn rs len = foldr putIn [False|i<-[1..len]] rs
main = print $ quickCheck (check functionNameGoesHere)