p1.tri
1 import "trilogy:debug" use dbg 2 import "trilogy:io" use readline 3 import "trilogy:core" use to_string 4 import "trilogy:parsec" use apply, parse, sep_by, integer, char 5 import "trilogy:string" use length, take, skip 6 import "trilogy:iterator" as it 7 8 proc range!() { 9 let low = apply integer 10 apply <| char '-' 11 let high = apply integer 12 return low:high 13 } 14 15 func is_invalid str = 16 length str % 2 == 0 17 && take (length str // 2) str == skip (length str // 2) str 18 19 proc main!() { 20 let ranges = parse (sep_by (char ',') range) readline!() 21 let mut total = 0 22 for low:high in ranges { 23 total += it::range low high 24 |> it::filter (is_invalid << to_string) 25 |> it::sum 26 } 27 dbg!(total) 28 }