Add day 7

This commit is contained in:
Malachy Byrne 2025-12-07 20:39:55 +00:00
parent 7389931fbf
commit 3efe77de07
Signed by: malmal200
GPG Key ID: 166F016E1182B99F
3 changed files with 95 additions and 24 deletions

View File

@ -4,28 +4,32 @@ open advent_of_code.tasks
[<EntryPoint>] [<EntryPoint>]
let main _ = let main _ =
let _, day1Star1 = day_1.Star1.main 50 0 // let _, day1Star1 = day_1.Star1.main 50 0
printfn $"{day1Star1}" // printfn $"{day1Star1}"
let _, day1Star2 = day_1.Star2.main 50 0 // let _, day1Star2 = day_1.Star2.main 50 0
printfn $"{day1Star2}" // printfn $"{day1Star2}"
let day2Star1 = day_2.Star1.main // let day2Star1 = day_2.Star1.main
printfn $"{day2Star1}" // printfn $"{day2Star1}"
let day2Star2 = day_2.Star2.main // let day2Star2 = day_2.Star2.main
printfn $"{day2Star2}" // printfn $"{day2Star2}"
let day3Star1 = day_3.Star1.main // let day3Star1 = day_3.Star1.main
printfn $"{day3Star1}" // printfn $"{day3Star1}"
let day3Star2 = day_3.Star2.main // let day3Star2 = day_3.Star2.main
printfn $"{day3Star2}" // printfn $"{day3Star2}"
let day4Star1 = day_4.Star1.main // let day4Star1 = day_4.Star1.main
printfn $"{day4Star1}" // printfn $"{day4Star1}"
let day4Star2 = day_4.Star2.main // let day4Star2 = day_4.Star2.main
printfn $"{day4Star2}" // printfn $"{day4Star2}"
let day5Star1 = day_5.Star1.main // let day5Star1 = day_5.Star1.main
printfn $"%A{day5Star1}" // printfn $"%A{day5Star1}"
let day5Star2 = day_5.Star2.main // let day5Star2 = day_5.Star2.main
printfn $"%A{day5Star2}" // printfn $"%A{day5Star2}"
let day6Star1 = day_6.Star1.main // let day6Star1 = day_6.Star1.main
printfn $"%A{day6Star1}" // printfn $"%A{day6Star1}"
let day6Star2 = day_6.Star2.main // let day6Star2 = day_6.Star2.main
printfn $"%A{day6Star2}" // printfn $"%A{day6Star2}"
let day7Star1 = day_7.Star1.main
printfn $"%A{day7Star1}"
let day7Star2 = day_7.Star2.main
printfn $"%A{day7Star2}"
0 0

View File

@ -0,0 +1,30 @@
module advent_of_code.tasks.day_7.Star1
open System.IO
let stream = new StreamReader("tasks/day-7/input.txt")
let containsSplit (s: string) =
s.Contains("^")
let split (row: string) (pos: int) =
if row[pos] = '^' then
[|pos-1; pos+1|] |> Set.ofArray, 1
else
[|pos|] |> Set.ofArray, 0
let rec getBeams (manifold: string array) (pos: Set<int>) =
if manifold.Length = 0 then
0
else
let row, tail = manifold[0], manifold[1..]
let mapRes = (pos |> Seq.map (split row))
let newPos = (mapRes |> Seq.map fst) |> Set.ofSeq |> Set.unionMany
let splits = mapRes |> Seq.map snd |> Seq.sum
getBeams tail newPos + splits
let main =
let allLines = stream.ReadToEnd().Split("\n")
let startLine, manifold = allLines[0], (allLines[1..] |> Array.filter containsSplit)
let startPos = startLine.IndexOf("S")
getBeams manifold ([|startPos|] |> Set.ofArray)

View File

@ -0,0 +1,37 @@
module advent_of_code.tasks.day_7.Star2
open System
open System.IO
let stream = new StreamReader("tasks/day-7/input.txt")
let containsSplit (s: string) =
s.Contains("^")
let split (oldTimelines: int64 array) (newTimelines: int64 array) (t: int * char) =
let index, item = t.Deconstruct()
let mutable timelines = newTimelines
if item = '^' then
timelines[index-1] <- oldTimelines[index] + newTimelines[index-1]
timelines[index+1] <- oldTimelines[index] + newTimelines[index+1]
else
timelines[index] <- oldTimelines[index] + newTimelines[index]
timelines
let rec getTimelines (manifold: string array) (prevTimelines: int64 array) =
if manifold.Length = 0 then
prevTimelines
else
let row, tail = manifold[0], manifold[1..]
let emptyTimeline = [1 .. row.Length] |> Seq.map (fun _ -> 0 |> int64) |> Array.ofSeq
let newTimeline = row |> seq |> Seq.mapi (fun index item -> index, item) |> Seq.fold (split prevTimelines) emptyTimeline
getTimelines tail newTimeline
let main =
let allLines = stream.ReadToEnd().Split("\n")
let startLine, manifold = allLines[0], (allLines[1..] |> Array.filter containsSplit)
let startPos = startLine.IndexOf("S")
let initialTimeline = [1..startLine.Length] |> Seq.map (fun _ -> 0 |> int64) |> Array.ofSeq
initialTimeline[startPos] <- 1
Array.sum (getTimelines manifold initialTimeline)