diff --git a/app/Day2.hs b/app/Day2.hs index 80e4d78..8a1d12c 100644 --- a/app/Day2.hs +++ b/app/Day2.hs @@ -1,13 +1,13 @@ module Main where +import Debug.Trace import System.Environment (getArgs) main :: IO () main = do input <- readFile . head =<< getArgs print $ part1 input - --- print $ part2 input + print $ part2 input part1 :: String -> Int part1 = sum . filter invalid . concat . map ids . map parse . splitOn ',' @@ -36,4 +36,21 @@ invalid i = half = take (len `div` 2) s in s == half ++ half +part2 :: String -> Int +part2 = sum . filter invalid2 . concat . map ids . map parse . splitOn ',' + +invalid2 :: Int -> Bool +invalid2 i = + let s = show i + len = length s + facs = factors len + in or [(repeatN (len `div` n) $ take n s) == s | n <- facs] + +-- needs to get the primes instead of all factors +factors :: Int -> [Int] +factors i = filter ((== 0) . (mod i)) [1 .. i `div` 2] + +repeatN :: Int -> [a] -> [a] +repeatN i = concat . replicate i + testInput = "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124"