open System.IO let isCaught offset pos = let time, length = pos (time + offset) % ((length - 1) * 2) = 0 let severity positions offset = Array.filter (isCaught offset) positions |> Array.map (fun (t, n) -> t * n) |> Array.sum let notCaught positions offset = Array.filter (isCaught offset) positions |> Array.length |> (fun x -> x = 0) let () = let scanners = File.ReadAllLines "day13.txt" |> Array.map (fun x -> x.Split(':')) |> Array.map (fun x -> int x[0], int x[1]) severity scanners 0 |> printfn "%d" Seq.initInfinite id |> Seq.filter (notCaught scanners) |> Seq.head |> printfn "%d"