Haskell 如何使用带2个值的show函数
我正在努力解决HackerRank上的问题 问题是显示两个值,即最低分数和最高分数的记录被打破的次数 我写了算法来找到它。我被困于如何输出2个值 以下是我的解决方案。目前它显示的是打破的最高记录数。我想显示2个值,以便它通过hackerrank中的测试Haskell 如何使用带2个值的show函数,haskell,Haskell,我正在努力解决HackerRank上的问题 问题是显示两个值,即最低分数和最高分数的记录被打破的次数 我写了算法来找到它。我被困于如何输出2个值 以下是我的解决方案。目前它显示的是打破的最高记录数。我想显示2个值,以便它通过hackerrank中的测试 mxscore::(a,a,a)->a mxscore(u,a,u,u)=a mnscore::(a,a,a)->a mnscore(a,,,,,,=a lscore::(a,a,a)->a lscore(u,u,a,u)=a hscore::(
mxscore::(a,a,a)->a
mxscore(u,a,u,u)=a
mnscore::(a,a,a)->a
mnscore(a,,,,,,=a
lscore::(a,a,a)->a
lscore(u,u,a,u)=a
hscore::(a,a,a)->a
hscore(u,u,u,a)=a
main=interactive$show。解决问题。看地图。尾巴。话
求解::[Int]->(Int,Int,Int,Int)
解算(x:xs)=解算1 x xs
其中solve1 d dx=foldl(\acc x->if x>mxscore acc
然后(mnscore acc、x、lscore acc、hscore acc+1)
否则,如果x
当前解决方案的工作原理如下
*Main> solve [10, 5, 20, 20, 4, 5, 2, 25, 1]
(1,25,4,2)
其中4是最低记录被破坏的时间数
2是最高记录被打破的次数
*Main> solve [3, 4, 21, 36, 10, 28, 35, 5, 24, 42]
(3,42,0,4)
其中0是最低记录被破坏的时间数
4是最高记录被打破的次数
*Main> solve [3, 4, 21, 36, 10, 28, 35, 5, 24, 42]
(3,42,0,4)
第一个数字是分数
第二行是分数
输入:
九,
1052020425251
输出:
2 4
答:解释2是最高分数打破记录的时间
4是最低分数的记录被打破的次数我找到了问题的答案。我又创建了一个函数来覆盖该显示
mxscore::(a,a,a,a) -> a
mxscore (_,a,_,_) = a
mnscore::(a,a,a,a) -> a
mnscore (a,_,_,_) = a
lscore :: (a, a,a,a) -> a
lscore (_,_,a,_) = a
hscore :: (a, a,a,a) -> a
hscore (_,_,_,a) = a
main = interact $ show1 .solve . map read . tail . words
show1::(Int, Int, Int, Int) -> String
show1 (_,_,a,b) = show b ++ " " ++ show a
solve::[Int] -> (Int, Int, Int, Int)
solve (x:xs) = solve1 x xs
where solve1 d dx = foldl(\acc x -> if x > mxscore acc
then (mnscore acc, x, lscore acc, hscore acc + 1)
else if x < mnscore acc then (x, mxscore acc, lscore acc + 1, hscore acc) else acc ) (d,d,0,0) dx
mxscore::(a,a,a)->a
mxscore(u,a,u,u)=a
mnscore::(a,a,a)->a
mnscore(a,,,,,,=a
lscore::(a,a,a)->a
lscore(u,u,a,u)=a
hscore::(a,a,a)->a
hscore(u,u,u,a)=a
main=interactive$show1.solve。看地图。尾巴。话
show1::(Int,Int,Int,Int)->字符串
show1(u,u,a,b)=showb++++++showa
求解::[Int]->(Int,Int,Int,Int)
解算(x:xs)=解算1 x xs
其中solve1 d dx=foldl(\acc x->if x>mxscore acc
然后(mnscore acc、x、lscore acc、hscore acc+1)
否则,如果x
谢谢您的
solve
函数在我看来是正确的(尽管如果您在4元组acc
上使用模式匹配,会更简洁、更容易阅读)。你能解释一下什么不起作用吗?是否有一个特定的测试用例失败?我想显示tuple的最后一个和最后第二个值。例如4和2。目前,我可以使用showCan显示最高值。请您明确说明输入和输出应该是什么。我承认我没有理解你对main
的定义,只是把你的solve
示例当作应该发生的事情。请告诉我们main
的输入应该是什么,以及相应的输出应该是什么。更新了问题底部的问题我已经提供了输入和输出。