2025-12-07 01:17:19 +00:00

33 lines
1.0 KiB
Forth

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