https://www.codewars.com/kata/545a4c5a61aa4c6916000755/train/haskell
题目翻译
本题中你需要写个函数,输入一个三元组,输出三个树中既不是最大的也不是最小的那个数字的下标。
样例
gimme (2, 3, 1) = 0
gimme (5, 10, 14) = 1
题解
只使用maximum
和minimum
的方法,这是我写的一个比较奇怪的方法。。
gimme :: Ord a => (a, a, a) -> Int
gimme (a, b, c) = 3 - snd (minimum l) - snd (maximum l)
where l = zip [a, b, c] [0..]
当然正常人都会想到排序的。
gimme :: Ord a => (a, a, a) -> Int
gimme (a, b, c) = snd . (!! 1) . sort $ zip [a,b,c] [0..]
还有更厉害的,不用库函数的方法:
gimme :: Ord a => (a, a, a) -> Int
gimme (a, b, c)
| b <= a && a <= c || c <= a && a <= b = 0
| otherwise = 1 + gimme (b, c, a)