diff options
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | AoC2022.fsproj | 10 | ||||
-rw-r--r-- | Program.fs | 14 | ||||
-rw-r--r-- | solutions/day1.fs | 19 |
4 files changed, 47 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d3592bd --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.vscode +bin/ +obj/ +inputs/ \ No newline at end of file diff --git a/AoC2022.fsproj b/AoC2022.fsproj new file mode 100644 index 0000000..ab87952 --- /dev/null +++ b/AoC2022.fsproj @@ -0,0 +1,10 @@ +<Project Sdk="Microsoft.NET.Sdk"> + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net6.0</TargetFramework> + </PropertyGroup> + <ItemGroup> + <Compile Include="solutions/day1.fs" /> + <Compile Include="Program.fs" /> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/Program.fs b/Program.fs new file mode 100644 index 0000000..a16ec03 --- /dev/null +++ b/Program.fs @@ -0,0 +1,14 @@ +open Solutions +exception NotImplementedYet of string + +let args = System.Environment.GetCommandLineArgs() + +assert (Array.length args = 3) + +let day, part = int args[1], int args[2] + +match (day, part) with +| (1, 1) -> Day1.part1 () |> printf "%A\n" +| (1, 2) -> Day1.part2 () |> printf "%A\n" +| _ -> raise (NotImplementedYet("not implemented yet")) +|> printf "%A\n" \ No newline at end of file diff --git a/solutions/day1.fs b/solutions/day1.fs new file mode 100644 index 0000000..0b2c519 --- /dev/null +++ b/solutions/day1.fs @@ -0,0 +1,19 @@ +namespace Solutions + +module Day1 = + open System.IO + + let lines = File.ReadLines("inputs/day1.txt") + let totalWeights = seq { + let mutable subseq = 0 + + for line in lines do + if line.Equals("") then + yield subseq + subseq <- 0 + else + subseq <- subseq + int line + } + + let part1 () = totalWeights |> Seq.max + let part2 () = totalWeights |> Seq.sortDescending |> Seq.take 3 |> Seq.sum |