Finished day 6
This commit is contained in:
parent
b53a8a48ee
commit
37ca7ee1c3
@ -30,6 +30,7 @@ library
|
|||||||
Day3Lib
|
Day3Lib
|
||||||
Day4Lib
|
Day4Lib
|
||||||
Day5Lib
|
Day5Lib
|
||||||
|
Day6Lib
|
||||||
other-modules:
|
other-modules:
|
||||||
Paths_aoc2022
|
Paths_aoc2022
|
||||||
hs-source-dirs:
|
hs-source-dirs:
|
||||||
@ -150,6 +151,28 @@ executable Day5Part2
|
|||||||
, split
|
, split
|
||||||
default-language: Haskell2010
|
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
|
test-suite Day1-test
|
||||||
type: exitcode-stdio-1.0
|
type: exitcode-stdio-1.0
|
||||||
main-is: Day1.hs
|
main-is: Day1.hs
|
||||||
|
|||||||
@ -2,9 +2,6 @@ module Day5Part1 (main) where
|
|||||||
|
|
||||||
import Day5Lib
|
import Day5Lib
|
||||||
|
|
||||||
convertToString :: Int -> String
|
|
||||||
convertToString = show
|
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
input <- getContents
|
input <- getContents
|
||||||
|
|||||||
12
day6/Day6Part1.hs
Normal file
12
day6/Day6Part1.hs
Normal 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
12
day6/Day6Part2.hs
Normal 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
1
day6/input
Normal file
@ -0,0 +1 @@
|
|||||||
|
zdrrgvvntvtzzssgcgqqbvqqzmqmrrprjjpmpwpvpqpwppfqqnvvjbjcbbrnnvwnvnqnncvvqnvqvmmdzdrzzjmmfzmztzczzjpjllgzgnzgznzpzhhvppmjjtbjbjgbjjpfphfhthpprbbzzhbzzvjjsttjwtjwjllzplzlhlqlfqfvflfvlvqvqsshccgffvzzqllpjllcqcpqcpqccbgcccvwvlldclcppcggjhhtbhbrbwbllldndhnnmnmcccvfvtftrfttlhttgltlflgflfrrftrtrgrmggbccnvccvssbmsmnsmszmmsbshbhpbhhtccnmngmnnntznttwnnmffdccrhrshhzhszslzlqqqsqhhrrvmrrhrmhrrdppshpssjhhhtzhzpzzzbrrqqhhtltgltgghlhpphmmbllczcgcrgcrcmmdjdvdssdbsshqqrprhrfrqrlldggpglplqlgqqvfqqwhqqclcwwbrbwbzzmcczqqpzpzhpzprrsbsfsgscsvsdsnntssgzsgzzdpdmmvnnnnfgngnqntnqnhqnhnrrdvrdvvhcvhcvvmffmccdndhhpghgwwdpwwsbwwwcpchcmmznnvtvfffzgffmfdmdsdrrsjjblbglgrrnllzrlrnnrzztnnnqlnlhnllnflllvjjdpdnngfnnlzlrzllrnlnznszzhhvggbqqcmqqvhqhhzfznnhthlhfllqwwghwgwnnnrcchffqnqjjmhjmjsjrjjrwjrrhbhfbhffprprhrddscddbbrzrvrcclttppvrvrlrplpffdwffwrwvvmssgjjbttpgpfplffgfwfnnmhhwghhpfptprtrzzwlwnwmwzzbmbrrdjrjzjpzpggftffglgzzdgzgbbzwzrrdzdhdbhhfppvrvrrrshrrzwwhjwwtjjhbhgbbhjhmmcvvchcfczfcffgttzbzssdqqjwjbbhthgthghthghmhlmmjwmwccfftnnddlffntnhtnhhnnldlhlthhqvhqvhhcgclcmmcnnwnqqzgzczccftfzfrrnhnjhhnlljdjhjghhchvchvchcphpnnnznhnjjlmjlmlbmmsbmbnnmqmvmhhcrcvvqffjpjzpjzjnnhsnhsslqlqvqzzmffdtfdffjrfjrjcjzjnjfjdfjfvjvddtntcttcwcqwqlqjqlqrrzccsgsgffwddrldrrhlllgppghphddqttdwtwnwlnlccmwwfnngvnvddwvwttjjsgghcchjjnvnccjljcljcljjjrttdstsmsggdbdbnddqpddbqqpbpdpgdpdnpnbnffcfrfrfhfcfgcfgcffvjvccgscshhvthvthtbhtbbmppjjrjqrjqjmjzjjjvffmbbfppndngnrnsnnmbbcmcddfzdfzdffqssfwsfwwpzpfpmpqpjqjwqqzwqwvvsddvrrdsrszrrrjqrjjqtqftthhmpmhpmhphggjsggjpppmhmzzdllcscpsswsqqjsqsvvlffmwgtmbthswfqqppsdflzhmdbcnzgdrlzccsdtptgmhfhwtbwqdhptvsvgdfdsmvsrtjjthchmbrjpmrwhgrdllphnfhrfdlgqmbrtdwcmcbphrzthflcswnhqmfhwprbgczbmsmjvbwjftgfqhbhqgzsvcpplzgctzggfljbmhsmwcwltllqgqtvhlbnpzpccbsbhpvhttdjvcnbqhlccdcclwfvcqnttlzzhqpltnnzzlnwtgppwfvmjhtmlzbzdrgbpbbmwlczdwmfhsvpnhpcqwzlnzslncdcqblvlpqfzhhszzrssvhglsllbbmjngfjlpjjvjbzbrlrmwfvzbgtzvcrshtsswhjrjvtwwbrqvtqnndndthfgfcnprpwwtffcvmllngsftrnwnjmwfljjtwnqqmphdlctvdpnsmbrhmljzmfvhcpblmwjjgqvslgslpbjzqzgzpwgssljztmztbwbqlfwrwgvwrjzvpvncqpdspgpzsjnvcrtzpnspvmnvssbgmsbpdsmcvjmtczczzsjcqcfhvcmsbsjfsssvzpvrtmmgptpcsrjslgvclflhjdpwtsmrgjjcftjmjrzrpwqlqvrqjpflbgrfhswbpcnvrrwpzqtzmqjspqqpwlcwgwgclpnwhhrrmzvvnjrjgjfqftlwjrggjgsdfvqhghmshczbbcvrmsgfdqhhmpfzqtbqwsmwfnwfwndjtlntzbbhlzlhrlzgljlmlbcwcdzbctlbqjmfpdwfcfnrbztvlwjhgmfvjcclcrwwwwvqshnfthtcccnswnfzlznlfcmcfrrsjqfvrwjvtbrwggzmdglcbzfdflrdqsjhzcjpghdmwhzrshnqqtsrccbhnlqcsclwmnvjpfqjszwrqnvbgmcdsvhntqmmnrdpbtpqwvhztmtjfvdplgzhhgsrnbwggnwzbtzwcsbrftzhvwtrwvcqrbcnqnrcmbmsvlcfbmzfcvqpwsmmfdgssnhghwjlsslmgnrqgpmbhpqzfnvztsjzjqgrzbbdpvtprwdzdszlhpcgwvdfvhtbtpfjnqnpzwplrwnfdpdclwgnrjlzzshhcchswtzrcmrfpgwjvttqfbbsdnctrtnmwqsmnfsgfgplphcrhglcrnrbzvcfrdfhdtsjmnvfwslcntttqzvhhbljzmpmlsrsblhvmvphppdmjfzwfmflcfwwtdfcndqzgsbrcppsngqfnnjtccnmfjqzhdpnnrqvhrmnrwntqrvmlzfrdszhctzjjdwqrrldtqgrztrvdfrpgprqhqrbnmpfzzlprrpqgtqmzshpcdbwgmrqhrvvgwvspqzmsrvprvsclffwhzlvgfgcsjtmnmthwfmdnfccvlbwbcrlsghhpzcvcnffvccsqjtnhhnbwgfjmqczbrfmjtmmbznspmvtcvdllbgrcvtdzpgzcjzqdjpglhbbnbvwztrdhcrcvrpbshwlmdbmpdgzzflglwgfhvngcgpwshfhzsbrmnhrftmcfqdhnmfmdzbzfgggrzchtzrhgtjpqhdglgdhdqzqpmqmtsbbjjgvtrngdvghwdmgnmdlwsvpmldlsjrtwhltfpbmqlngncwspcptphdppdmjfvtnmdrpbwzrdzcqjdnprpcddjqjhpllsrqzdpcpnplmnmwfqjtnfmnwljbsfgwlgjpwdbbqblvsqcvvgmbrhsqjcscsflcfdzbnrflmrpzhzdhzqhgvmtfjpwtfqnclplgwrjtfvrncjlqtqlrrnjsrvpwbrdcppvnjfzdrzhcltpdfgfndvqtqzvvztgzssdsvvvjwrtjmqcchbjmppqzmgwqdvmmdqbcpbmcnjsvjlwmmnvmnlzdsnsjpldgpjgsbqmpcdsvhdfhgpbggqmrdhbhvvpnzdpqtmldmfqdfchzdfgddzgvcdzgcwjlhnzjwhpwlfwhgjthjshqtzbblhflmsfvtwplfpmpndgjmhndqlhcvfhmjmmqgnjstrzqvshzbbsfqwszwccmrcjnmlsplqzwrgrcwqbmrfwljmlqtqztscrhgjdqzhvmhncvssfznpgrbrjvchsgnjjnnqqrqwsqsrgmltvgtjvpztwmsspjtqdwrbftzrbcmdthmztmnqtmmnffqjjzbvwghrsdmbbjsnnhbdcbqsbcdmwqqppcvsndzbfnsgtpptdftrfthdclqrqvmhnddmjzlnfgscfdwjljjgjnddcrzvclfqbdhprttwpmsnzvdgzwmnzznpqhlhhslwgzlczlgvbjbgqdczztzjnswphllncbsqdmbsbqqsltzmmhmhfnngbttvdsmfrpgthwpfdhsstrjssghlrrlhbmgdsvhzvlhhfvtcrrhlndgrjjcgmjwgnjtlmpmzgqgpnpsvlnthgrvsdfcnmzmthqzfpjdqjbhgmjqsqvvdldrgqwlghdlwqdbfmffgvzmptqhnvbrdbqtcjmsdnjljpbrtcvvnffvztbwfnmtvdbnshlbgvbnljntlrldbwqvqmblnvhwtw
|
||||||
24
package.yaml
24
package.yaml
@ -158,6 +158,30 @@ executables:
|
|||||||
dependencies:
|
dependencies:
|
||||||
- aoc2022
|
- 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:
|
tests:
|
||||||
Day1-test:
|
Day1-test:
|
||||||
main: Day1.hs
|
main: Day1.hs
|
||||||
|
|||||||
@ -1,4 +1,7 @@
|
|||||||
module Day5Lib where
|
module Day5Lib
|
||||||
|
( day5,
|
||||||
|
day5Alternate
|
||||||
|
) where
|
||||||
|
|
||||||
import Data.List (transpose)
|
import Data.List (transpose)
|
||||||
import Data.List.Split
|
import Data.List.Split
|
||||||
|
|||||||
49
src/Day6Lib.hs
Normal file
49
src/Day6Lib.hs
Normal 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
|
||||||
Loading…
x
Reference in New Issue
Block a user