From cb4706e89639f6719aef9e4b0ee265f8d128609b Mon Sep 17 00:00:00 2001 From: Malachy Byrne Date: Mon, 1 Dec 2025 16:44:44 +0000 Subject: [PATCH] Add day one solutions --- advent-of-code/Program.fs | 11 +++++++++++ advent-of-code/tasks/day-1/Star1.fs | 23 +++++++++++++++++++++++ advent-of-code/tasks/day-1/Star2.fs | 28 ++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 advent-of-code/Program.fs create mode 100644 advent-of-code/tasks/day-1/Star1.fs create mode 100644 advent-of-code/tasks/day-1/Star2.fs diff --git a/advent-of-code/Program.fs b/advent-of-code/Program.fs new file mode 100644 index 0000000..a77ede8 --- /dev/null +++ b/advent-of-code/Program.fs @@ -0,0 +1,11 @@ +module advent_of_code.Program + +open advent_of_code.tasks.day_1 + +[] +let main _ = + let _, day1Star1 = Star1.main 50 0 + printfn $"{day1Star1}" + let _, day1Star2 = Star2.main 50 0 + printfn $"{day1Star2}" + 0 diff --git a/advent-of-code/tasks/day-1/Star1.fs b/advent-of-code/tasks/day-1/Star1.fs new file mode 100644 index 0000000..929ea1a --- /dev/null +++ b/advent-of-code/tasks/day-1/Star1.fs @@ -0,0 +1,23 @@ +module advent_of_code.tasks.day_1.Star1 + +open System.IO + +let stream = new StreamReader("tasks/day-1/input.txt") + +let diff (line: string) = + let direction = if line.StartsWith("R") then 1 else -1 + let count = (line.[1..] |> int) + direction * count + +let solve (line: string) (start: int) = + let change = diff line + let newPos = (start + change) % 100 + (newPos, if newPos = 0 then 1 else 0) + +let rec main start zeroes = + let line = stream.ReadLine() + let newPos, newZeroes = solve line start + if stream.EndOfStream then + (newPos, zeroes + newZeroes) + else + main newPos (zeroes + newZeroes) \ No newline at end of file diff --git a/advent-of-code/tasks/day-1/Star2.fs b/advent-of-code/tasks/day-1/Star2.fs new file mode 100644 index 0000000..ef55aec --- /dev/null +++ b/advent-of-code/tasks/day-1/Star2.fs @@ -0,0 +1,28 @@ +module advent_of_code.tasks.day_1.Star2 + +open System.IO + +let stream = new StreamReader("tasks/day-1/input.txt") + +let diff (line: string) = + let direction = if line.StartsWith("R") then 1 else -1 + let count = (line.[1..] |> int) + // if (direction = -1) then + // printfn $"Turning left: {line} produces {count}" + direction * count + +let solve (line: string) (start: int) = + let change = diff line + let changeMod100 = change % 100 + let newPos = start + changeMod100 + // printfn $"Line {line} produces change of {change} turns {changeMod100} moving from {start} to {newPos}" + let zeroesFound = (abs change / 100) + (if start <> 0 && (newPos <= 0 || newPos >= 100) then 1 else 0) + (newPos % 100 + (if newPos < 0 then 100 else 0), zeroesFound) + +let rec main start zeroes = + let line = stream.ReadLine() + let newPos, newZeroes = solve line start + if stream.EndOfStream then + (newPos, zeroes + newZeroes) + else + main newPos (zeroes + newZeroes) \ No newline at end of file