p2.tri
1 import "trilogy:debug" use dbg 2 import "trilogy:io" use readline 3 import "trilogy:core" use to_string, to_array 4 import "trilogy:parsec" use apply, parse, sep_by, integer, char 5 import "trilogy:array" use length, take, chunks 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 arr = 16 it::range 1 (length arr // 2) 17 |> it::any (fn n. 18 it::all ((==) (take n arr)) 19 <| it::from 20 <| chunks n arr 21 ) 22 23 proc main!() { 24 let ranges = parse (sep_by (char ',') range) readline!() 25 let mut total = 0 26 for low:high in ranges { 27 total += it::range low high 28 |> it::filter (is_invalid << to_array << to_string) 29 |> it::sum 30 } 31 dbg!(total) 32 }