为了提高我的 Haskell 技能,我正在尝试解决Code 2018的出现。正如预期的那样,我已经被困在第 1 天,特别是第 2 部分:
- - 第二部分 - -
您会注意到设备一遍又一遍地重复相同的频率更改列表。
要校准设备,您需要找到它达到的第一个频率两次。
例如,使用上面相同的更改列表,设备将循环如下:
当前频率0,变化+1;结果频率 1。
当前频率1,变化-2;结果频率-1。
当前频率-1,变化+3;结果频率 2。
当前频率2,变化+1;结果频率 3.
(此时,设备从列表的开头继续。)
当前频率3,变化+1;结果频率 4.
当前频率4,变化-2;结果频率 2,这已经被看到了。
在这个例子中,第一个达到两次的频率是
2。请注意,在找到重复频率之前,您的设备可能需要多次重复其频率更改列表,并且在处理列表的过程中可能会发现重复项。以下是其他示例:
+1, -1 首先达到 0 两次。
+3、+3、+4、-2、-4 首先达到 10 两次。
-6、+3、+8、+5、-6 首先达到 5 两次。
+7, +7, -2, -7, -4 首先两次达到 14。
您的设备达到两次的第一个频率是多少?
基本上,我有一个非常大的列表vals::[Int],其中包括上面提到的所有频率变化。
这是我为解决此问题而编写的函数:
-- [1] The list of frequency changes
-- [2] The first repeat frequency
-- [1] [2]
part2helper :: [Int] …Run Code Online (Sandbox Code Playgroud)