[Haskell] CodeWars|Find the middle element

来源:互联网 发布:人工智能教学百度云 编辑:程序博客网 时间:2024/05/18 02:47

https://www.codewars.com/kata/545a4c5a61aa4c6916000755/train/haskell

题目翻译

本题中你需要写个函数,输入一个三元组,输出三个树中既不是最大的也不是最小的那个数字的下标。

样例

gimme (2, 3, 1) = 0gimme (5, 10, 14) = 1

题解

只使用maximumminimum的方法,这是我写的一个比较奇怪的方法。。

gimme :: Ord a => (a, a, a) -> Intgimme (a, b, c) = 3 - snd (minimum l) - snd (maximum l)    where l = zip [a, b, c] [0..]

当然正常人都会想到排序的。

gimme :: Ord a => (a, a, a) -> Intgimme (a, b, c) = snd . (!! 1) . sort $ zip [a,b,c] [0..]

还有更厉害的,不用库函数的方法:

gimme :: Ord a => (a, a, a) -> Intgimme (a, b, c) | b <= a && a <= c || c <= a && a <= b = 0 | otherwise = 1 + gimme (b, c, a)