View Single Post
AoC 4. desember i Haskell (kun del 2)

SPOILER ALERT! Vis spoiler

Brukte som de før meg også set. Men kortslutter med en gang jeg finner en duplikat i stedet for å telle om de er like lange.

Kode

import Data.Bool
import Data.List
import qualified Data.Set as Set

main = do
    textBlob <- readFile "dec04.txt"
    let ls = lines textBlob
    print(solve ls)

solve ls = length $ filter (\x -> x) $ map isValidPassphrase ls

isValidPassphrase::String -> Bool
isValidPassphrase phrase = let sortedWords = map sort (words phrase)
    in not (anyDuplicates Set.empty sortedWords)    

anyDuplicates :: Set.Set String -> [String] -> Bool
anyDuplicates used [] = False
anyDuplicates used (w:ws) = isMember || (anyDuplicates (Set.insert w used) ws)
    where isMember = Set.member w used