Finished day 6

This commit is contained in:
Andrew R. M 2022-12-06 17:01:11 -05:00
parent b53a8a48ee
commit 37ca7ee1c3
8 changed files with 125 additions and 4 deletions

View File

@ -30,6 +30,7 @@ library
Day3Lib
Day4Lib
Day5Lib
Day6Lib
other-modules:
Paths_aoc2022
hs-source-dirs:
@ -150,6 +151,28 @@ executable Day5Part2
, split
default-language: Haskell2010
executable Day6Part1
main-is: Day6Part1.hs
hs-source-dirs:
day6
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N -main-is Day6Part1
build-depends:
aoc2022
, base >=4.7 && <5
, split
default-language: Haskell2010
executable Day6Part2
main-is: Day6Part2.hs
hs-source-dirs:
day6
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N -main-is Day6Part2
build-depends:
aoc2022
, base >=4.7 && <5
, split
default-language: Haskell2010
test-suite Day1-test
type: exitcode-stdio-1.0
main-is: Day1.hs

View File

@ -2,9 +2,6 @@ module Day5Part1 (main) where
import Day5Lib
convertToString :: Int -> String
convertToString = show
main :: IO ()
main = do
input <- getContents

12
day6/Day6Part1.hs Normal file
View File

@ -0,0 +1,12 @@
module Day6Part1 (main) where
import Day6Lib
convertToString :: Int -> String
convertToString = show
main :: IO ()
main = do
input <- getContents
putStrLn $ convertToString $ day6 input

12
day6/Day6Part2.hs Normal file
View File

@ -0,0 +1,12 @@
module Day6Part2 (main) where
import Day6Lib
convertToString :: Int -> String
convertToString = show
main :: IO ()
main = do
input <- getContents
putStrLn $ convertToString $ day6' input

1
day6/input Normal file
View File

@ -0,0 +1 @@
zdrrgvvntvtzzssgcgqqbvqqzmqmrrprjjpmpwpvpqpwppfqqnvvjbjcbbrnnvwnvnqnncvvqnvqvmmdzdrzzjmmfzmztzczzjpjllgzgnzgznzpzhhvppmjjtbjbjgbjjpfphfhthpprbbzzhbzzvjjsttjwtjwjllzplzlhlqlfqfvflfvlvqvqsshccgffvzzqllpjllcqcpqcpqccbgcccvwvlldclcppcggjhhtbhbrbwbllldndhnnmnmcccvfvtftrfttlhttgltlflgflfrrftrtrgrmggbccnvccvssbmsmnsmszmmsbshbhpbhhtccnmngmnnntznttwnnmffdccrhrshhzhszslzlqqqsqhhrrvmrrhrmhrrdppshpssjhhhtzhzpzzzbrrqqhhtltgltgghlhpphmmbllczcgcrgcrcmmdjdvdssdbsshqqrprhrfrqrlldggpglplqlgqqvfqqwhqqclcwwbrbwbzzmcczqqpzpzhpzprrsbsfsgscsvsdsnntssgzsgzzdpdmmvnnnnfgngnqntnqnhqnhnrrdvrdvvhcvhcvvmffmccdndhhpghgwwdpwwsbwwwcpchcmmznnvtvfffzgffmfdmdsdrrsjjblbglgrrnllzrlrnnrzztnnnqlnlhnllnflllvjjdpdnngfnnlzlrzllrnlnznszzhhvggbqqcmqqvhqhhzfznnhthlhfllqwwghwgwnnnrcchffqnqjjmhjmjsjrjjrwjrrhbhfbhffprprhrddscddbbrzrvrcclttppvrvrlrplpffdwffwrwvvmssgjjbttpgpfplffgfwfnnmhhwghhpfptprtrzzwlwnwmwzzbmbrrdjrjzjpzpggftffglgzzdgzgbbzwzrrdzdhdbhhfppvrvrrrshrrzwwhjwwtjjhbhgbbhjhmmcvvchcfczfcffgttzbzssdqqjwjbbhthgthghthghmhlmmjwmwccfftnnddlffntnhtnhhnnldlhlthhqvhqvhhcgclcmmcnnwnqqzgzczccftfzfrrnhnjhhnlljdjhjghhchvchvchcphpnnnznhnjjlmjlmlbmmsbmbnnmqmvmhhcrcvvqffjpjzpjzjnnhsnhsslqlqvqzzmffdtfdffjrfjrjcjzjnjfjdfjfvjvddtntcttcwcqwqlqjqlqrrzccsgsgffwddrldrrhlllgppghphddqttdwtwnwlnlccmwwfnngvnvddwvwttjjsgghcchjjnvnccjljcljcljjjrttdstsmsggdbdbnddqpddbqqpbpdpgdpdnpnbnffcfrfrfhfcfgcfgcffvjvccgscshhvthvthtbhtbbmppjjrjqrjqjmjzjjjvffmbbfppndngnrnsnnmbbcmcddfzdfzdffqssfwsfwwpzpfpmpqpjqjwqqzwqwvvsddvrrdsrszrrrjqrjjqtqftthhmpmhpmhphggjsggjpppmhmzzdllcscpsswsqqjsqsvvlffmwgtmbthswfqqppsdflzhmdbcnzgdrlzccsdtptgmhfhwtbwqdhptvsvgdfdsmvsrtjjthchmbrjpmrwhgrdllphnfhrfdlgqmbrtdwcmcbphrzthflcswnhqmfhwprbgczbmsmjvbwjftgfqhbhqgzsvcpplzgctzggfljbmhsmwcwltllqgqtvhlbnpzpccbsbhpvhttdjvcnbqhlccdcclwfvcqnttlzzhqpltnnzzlnwtgppwfvmjhtmlzbzdrgbpbbmwlczdwmfhsvpnhpcqwzlnzslncdcqblvlpqfzhhszzrssvhglsllbbmjngfjlpjjvjbzbrlrmwfvzbgtzvcrshtsswhjrjvtwwbrqvtqnndndthfgfcnprpwwtffcvmllngsftrnwnjmwfljjtwnqqmphdlctvdpnsmbrhmljzmfvhcpblmwjjgqvslgslpbjzqzgzpwgssljztmztbwbqlfwrwgvwrjzvpvncqpdspgpzsjnvcrtzpnspvmnvssbgmsbpdsmcvjmtczczzsjcqcfhvcmsbsjfsssvzpvrtmmgptpcsrjslgvclflhjdpwtsmrgjjcftjmjrzrpwqlqvrqjpflbgrfhswbpcnvrrwpzqtzmqjspqqpwlcwgwgclpnwhhrrmzvvnjrjgjfqftlwjrggjgsdfvqhghmshczbbcvrmsgfdqhhmpfzqtbqwsmwfnwfwndjtlntzbbhlzlhrlzgljlmlbcwcdzbctlbqjmfpdwfcfnrbztvlwjhgmfvjcclcrwwwwvqshnfthtcccnswnfzlznlfcmcfrrsjqfvrwjvtbrwggzmdglcbzfdflrdqsjhzcjpghdmwhzrshnqqtsrccbhnlqcsclwmnvjpfqjszwrqnvbgmcdsvhntqmmnrdpbtpqwvhztmtjfvdplgzhhgsrnbwggnwzbtzwcsbrftzhvwtrwvcqrbcnqnrcmbmsvlcfbmzfcvqpwsmmfdgssnhghwjlsslmgnrqgpmbhpqzfnvztsjzjqgrzbbdpvtprwdzdszlhpcgwvdfvhtbtpfjnqnpzwplrwnfdpdclwgnrjlzzshhcchswtzrcmrfpgwjvttqfbbsdnctrtnmwqsmnfsgfgplphcrhglcrnrbzvcfrdfhdtsjmnvfwslcntttqzvhhbljzmpmlsrsblhvmvphppdmjfzwfmflcfwwtdfcndqzgsbrcppsngqfnnjtccnmfjqzhdpnnrqvhrmnrwntqrvmlzfrdszhctzjjdwqrrldtqgrztrvdfrpgprqhqrbnmpfzzlprrpqgtqmzshpcdbwgmrqhrvvgwvspqzmsrvprvsclffwhzlvgfgcsjtmnmthwfmdnfccvlbwbcrlsghhpzcvcnffvccsqjtnhhnbwgfjmqczbrfmjtmmbznspmvtcvdllbgrcvtdzpgzcjzqdjpglhbbnbvwztrdhcrcvrpbshwlmdbmpdgzzflglwgfhvngcgpwshfhzsbrmnhrftmcfqdhnmfmdzbzfgggrzchtzrhgtjpqhdglgdhdqzqpmqmtsbbjjgvtrngdvghwdmgnmdlwsvpmldlsjrtwhltfpbmqlngncwspcptphdppdmjfvtnmdrpbwzrdzcqjdnprpcddjqjhpllsrqzdpcpnplmnmwfqjtnfmnwljbsfgwlgjpwdbbqblvsqcvvgmbrhsqjcscsflcfdzbnrflmrpzhzdhzqhgvmtfjpwtfqnclplgwrjtfvrncjlqtqlrrnjsrvpwbrdcppvnjfzdrzhcltpdfgfndvqtqzvvztgzssdsvvvjwrtjmqcchbjmppqzmgwqdvmmdqbcpbmcnjsvjlwmmnvmnlzdsnsjpldgpjgsbqmpcdsvhdfhgpbggqmrdhbhvvpnzdpqtmldmfqdfchzdfgddzgvcdzgcwjlhnzjwhpwlfwhgjthjshqtzbblhflmsfvtwplfpmpndgjmhndqlhcvfhmjmmqgnjstrzqvshzbbsfqwszwccmrcjnmlsplqzwrgrcwqbmrfwljmlqtqztscrhgjdqzhvmhncvssfznpgrbrjvchsgnjjnnqqrqwsqsrgmltvgtjvpztwmsspjtqdwrbftzrbcmdthmztmnqtmmnffqjjzbvwghrsdmbbjsnnhbdcbqsbcdmwqqppcvsndzbfnsgtpptdftrfthdclqrqvmhnddmjzlnfgscfdwjljjgjnddcrzvclfqbdhprttwpmsnzvdgzwmnzznpqhlhhslwgzlczlgvbjbgqdczztzjnswphllncbsqdmbsbqqsltzmmhmhfnngbttvdsmfrpgthwpfdhsstrjssghlrrlhbmgdsvhzvlhhfvtcrrhlndgrjjcgmjwgnjtlmpmzgqgpnpsvlnthgrvsdfcnmzmthqzfpjdqjbhgmjqsqvvdldrgqwlghdlwqdbfmffgvzmptqhnvbrdbqtcjmsdnjljpbrtcvvnffvztbwfnmtvdbnshlbgvbnljntlrldbwqvqmblnvhwtw

View File

@ -158,6 +158,30 @@ executables:
dependencies:
- aoc2022
Day6Part1:
main: Day6Part1.hs
other-modules: []
source-dirs: day6
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
- -main-is Day6Part1
dependencies:
- aoc2022
Day6Part2:
main: Day6Part2.hs
other-modules: []
source-dirs: day6
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
- -main-is Day6Part2
dependencies:
- aoc2022
tests:
Day1-test:
main: Day1.hs

View File

@ -1,4 +1,7 @@
module Day5Lib where
module Day5Lib
( day5,
day5Alternate
) where
import Data.List (transpose)
import Data.List.Split

49
src/Day6Lib.hs Normal file
View File

@ -0,0 +1,49 @@
module Day6Lib where
-- ( day6,
-- day6'
-- ) where
import Data.List (nub, elemIndex)
import Data.Maybe (fromJust)
-- Using windows of 4 characters to solve this problem
type Window = [Char]
-- For start of packet markers
splitStringIntoWindows :: String -> [Window]
splitStringIntoWindows "" = []
splitStringIntoWindows (a:[]) = []
splitStringIntoWindows (a:b:[]) = []
splitStringIntoWindows (a:b:c:[]) = []
splitStringIntoWindows (a:b:c:d:[]) = [[a,b,c,d]]
splitStringIntoWindows string@(a:b:c:d:rest) = [a,b,c,d] : (splitStringIntoWindows $ tail string)
-- For start of message markers
-- This is non-exhaustive but there is no need to write all this out :/
splitStringIntoWindows' :: String -> [Window]
splitStringIntoWindows' "" = []
splitStringIntoWindows' (a:b:c:d:e:f:g:h:i:j:k:l:m:n:[]) = [[a,b,c,d,e,f,g,h,i,j,k,l,m,n]]
splitStringIntoWindows' string@(a:b:c:d:e:f:g:h:i:j:k:l:m:n:rest) =
[a,b,c,d,e,f,g,h,i,j,k,l,m,n] : (splitStringIntoWindows' $ tail string)
-- Use the nub function to eliminate duplicate elements and check lenght before/after
findAllUniqueWindow :: Window -> Bool
findAllUniqueWindow w = (length w) == (length $ nub w)
day6 :: String -> Int
day6 input = indexAdjustedForOffset
where
windows = splitStringIntoWindows input
uniqueWindows = filter findAllUniqueWindow windows
firstUniqueWindow = head uniqueWindows
index = fromJust $ elemIndex firstUniqueWindow windows
indexAdjustedForOffset = index + 4
day6' :: String -> Int
day6' input = indexAdjustedForOffset
where
windows = splitStringIntoWindows' input
uniqueWindows = filter findAllUniqueWindow windows
firstUniqueWindow = head uniqueWindows
index = fromJust $ elemIndex firstUniqueWindow windows
indexAdjustedForOffset = index + 14