module advent_of_code.tasks.day_6.Star1 open System.IO let stream = new StreamReader("tasks/day-6/input.txt") let splitSpaces (line: string) = line.Split() |> Array.toList let isNotNull (s: string) = s.Length > 0 let convertToInt64 (s: string) = s |> int64 let rec applyOps (allNumbers: string array list) (ops: string list) = if allNumbers.Length <> 0 then let currNumbers, numbersTail = allNumbers.Head |> Array.map convertToInt64, allNumbers.Tail let currOp, opsTail = ops.Head, ops.Tail let result = match currOp with | "*" -> currNumbers |> Array.fold (*) (1 |> int64) | "+" -> Array.sum currNumbers result + applyOps numbersTail opsTail else 0 |> int64 let main = let lines = ((stream.ReadToEnd().Split("\n") |> Array.toList) |> List.map splitSpaces) |> List.map (List.filter isNotNull) let numbers = lines[.. lines.Length - 2] |> List.map List.toArray |> Array.transpose |> Array.toList let ops = lines[lines.Length - 1] applyOps numbers ops