Day 6 Part 2

This commit is contained in:
Nathan McCarty 2022-12-06 01:43:12 -05:00
parent ca66dc8740
commit f62207d5de
Signed by: thatonelutenist
GPG Key ID: D70DA3DD4D1E9F96
1 changed files with 37 additions and 18 deletions

View File

@ -13,30 +13,44 @@ windows {n} xs =
Nothing => []
(Just x) => x :: windows tail
findStartOfPacket : List Char -> Maybe Nat
findStartOfPacket cs =
let segments = windows {n = 4} cs
in case findIndex (\x => let ( p ** _ ) = nub x in p == 4) segments of
findStart : Nat -> List Char -> Maybe Nat
findStart n cs =
let segments = windows {n} cs
in case findIndex (\x => let ( p ** _ ) = nub x in p == n) segments of
Nothing => Nothing
(Just x) => Just $ finToNat x + 4
(Just x) => Just $ finToNat x + n
testCases : List (String, Nat)
testCases = [("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 7),
("bvwbjplbgvbhsrlpgdmjqwftvncz",5),
("nppdvjthqldpwncqszvftbrmjlhg",6),
("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg",10),
("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw",11)]
findStartOfPacket : List Char -> Maybe Nat
findStartOfPacket = findStart 4
testCase : (String, Nat) -> IO Bool
testCase (string, start) =
findStartOfMessage : List Char -> Maybe Nat
findStartOfMessage = findStart 14
testCases : List (String, Nat, Nat)
testCases = [("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 7, 19),
("bvwbjplbgvbhsrlpgdmjqwftvncz", 5, 23),
("nppdvjthqldpwncqszvftbrmjlhg", 6, 23),
("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 10, 29),
("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 11, 26)]
testCase : (String, Nat, Nat) -> IO Bool
testCase (string, start, message) =
do putStrLn $ "Test Case: " ++ string
putStrLn $ "Expected Start: " ++ show start
putStrLn $ "Expected Start of packet: " ++ show start
putStrLn $ "Expected Start of message: " ++ show message
let result = findStartOfPacket (unpack string)
putStrLn $ "Evaluated start: " ++ show result
let messageResult = findStartOfMessage (unpack string)
putStrLn $ "Evaluated start of packet: " ++ show result
putStrLn $ "Evaluated start of message: " ++ show messageResult
let result = not (result == Just start)
if result
then putStrLn "Test Failed!!!"
else putStrLn "Test Passed"
result <- if result
then do putStrLn "Test Failed!!!"
pure True
else if messageResult == Just message
then do putStrLn "Test Passed"
pure False
else do putStrLn "Test Failed!!!"
pure True
putStrLn ""
pure result
@ -53,4 +67,9 @@ main =
putStrLn $ case findStartOfPacket (unpack contents) of
Just start => show start
Nothing => "Failed to find start"
putStr "Part 2: "
putStrLn $ case findStartOfMessage (unpack contents) of
Just start => show start
Nothing => "Failed to find start"
Left err => printLn err