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