Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何使用带2个值的show函数_Haskell - Fatal编程技术网

Haskell 如何使用带2个值的show函数

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::(

我正在努力解决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::(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
的输入应该是什么,以及相应的输出应该是什么。更新了问题底部的问题我已经提供了输入和输出。