diff options
-rw-r--r-- | aoc-2022-dotnet/Common/Common.fsproj | 16 | ||||
-rw-r--r-- | aoc-2022-dotnet/Common/Library.fs | 8 | ||||
-rw-r--r-- | aoc-2022-dotnet/Day04/Day04.fsproj | 4 | ||||
-rw-r--r-- | aoc-2022-dotnet/Day04/Program.fs | 5 | ||||
-rw-r--r-- | aoc-2022-dotnet/Day05/Day05.fsproj | 4 | ||||
-rw-r--r-- | aoc-2022-dotnet/Day05/Program.fs | 17 | ||||
-rw-r--r-- | aoc-2022-dotnet/Day06/Program.fs | 4 | ||||
-rw-r--r-- | aoc-2022-dotnet/Day07/Day07.fsproj | 4 | ||||
-rw-r--r-- | aoc-2022-dotnet/Day07/Program.fs | 8 | ||||
-rw-r--r-- | aoc-2022-dotnet/aoc-2022-dotnet.sln | 8 |
10 files changed, 57 insertions, 21 deletions
diff --git a/aoc-2022-dotnet/Common/Common.fsproj b/aoc-2022-dotnet/Common/Common.fsproj new file mode 100644 index 0000000..c8a185a --- /dev/null +++ b/aoc-2022-dotnet/Common/Common.fsproj @@ -0,0 +1,16 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net7.0</TargetFramework> + <GenerateDocumentationFile>true</GenerateDocumentationFile> + </PropertyGroup> + + <ItemGroup> + <Compile Include="Library.fs" /> + </ItemGroup> + + <ItemGroup> + <PackageReference Include="FParsec" Version="1.1.1" /> + </ItemGroup> + +</Project> diff --git a/aoc-2022-dotnet/Common/Library.fs b/aoc-2022-dotnet/Common/Library.fs new file mode 100644 index 0000000..7354509 --- /dev/null +++ b/aoc-2022-dotnet/Common/Library.fs @@ -0,0 +1,8 @@ +module Common + +open FParsec + +let parse parser input = + match run parser input with + | Success (result, _, _) -> result + | _ -> failwith "Invalid input format!" diff --git a/aoc-2022-dotnet/Day04/Day04.fsproj b/aoc-2022-dotnet/Day04/Day04.fsproj index 44c3fba..358ef88 100644 --- a/aoc-2022-dotnet/Day04/Day04.fsproj +++ b/aoc-2022-dotnet/Day04/Day04.fsproj @@ -19,4 +19,8 @@ <PackageReference Include="FParsec" Version="1.1.1" /> </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Common\Common.fsproj" /> + </ItemGroup> + </Project> diff --git a/aoc-2022-dotnet/Day04/Program.fs b/aoc-2022-dotnet/Day04/Program.fs index 25cc3b6..2221a4a 100644 --- a/aoc-2022-dotnet/Day04/Program.fs +++ b/aoc-2022-dotnet/Day04/Program.fs @@ -6,10 +6,7 @@ open FParsec let parseLine line = let prange = pint32 .>> pstring "-" .>>. pint32 let ppair = prange .>> pstring "," .>>. prange .>> eof - - match run ppair line with - | Success (result, _, _) -> result - | _ -> failwith "Invalid line format!" + Common.parse ppair line let fullyOverlap ((a, b), (c, d)) = (a <= c && d <= b) || (c <= a && b <= d) diff --git a/aoc-2022-dotnet/Day05/Day05.fsproj b/aoc-2022-dotnet/Day05/Day05.fsproj index 44c3fba..358ef88 100644 --- a/aoc-2022-dotnet/Day05/Day05.fsproj +++ b/aoc-2022-dotnet/Day05/Day05.fsproj @@ -19,4 +19,8 @@ <PackageReference Include="FParsec" Version="1.1.1" /> </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Common\Common.fsproj" /> + </ItemGroup> + </Project> diff --git a/aoc-2022-dotnet/Day05/Program.fs b/aoc-2022-dotnet/Day05/Program.fs index e15f53d..f471a31 100644 --- a/aoc-2022-dotnet/Day05/Program.fs +++ b/aoc-2022-dotnet/Day05/Program.fs @@ -1,4 +1,6 @@ -open System +module Day05 + +open System open System.IO open FParsec @@ -9,10 +11,7 @@ type Move = let dec n = n - 1 let pPart str = pstring str >>. pint32 let pMove = tuple3 (pPart "move ") (pPart " from " |>> dec) (pPart " to " |>> dec) - - match run pMove str with - | Success (result, _, _) -> Move result - | _ -> failwith "Invalid move format!" + Common.parse pMove str |> Move static member execute order stacks (Move (n, fi, ti)) = List.mapi @@ -33,12 +32,8 @@ let parseStacks str = let pCrateLine = sepBy pCrate (pchar ' ') .>> skipNewline let pHeader = many pCrateLine - let parsed = - match run pHeader str with - | Success (result, _, _) -> result - | _ -> failwith "Invalid header format!" - - parsed + str + |> Common.parse pHeader |> List.transpose |> List.map (List.choose id) diff --git a/aoc-2022-dotnet/Day06/Program.fs b/aoc-2022-dotnet/Day06/Program.fs index 75a5ffb..c9f6568 100644 --- a/aoc-2022-dotnet/Day06/Program.fs +++ b/aoc-2022-dotnet/Day06/Program.fs @@ -1,4 +1,6 @@ -open System.IO +module Day06 + +open System.IO let solution n = Seq.windowed n diff --git a/aoc-2022-dotnet/Day07/Day07.fsproj b/aoc-2022-dotnet/Day07/Day07.fsproj index 44c3fba..358ef88 100644 --- a/aoc-2022-dotnet/Day07/Day07.fsproj +++ b/aoc-2022-dotnet/Day07/Day07.fsproj @@ -19,4 +19,8 @@ <PackageReference Include="FParsec" Version="1.1.1" /> </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Common\Common.fsproj" /> + </ItemGroup> + </Project> diff --git a/aoc-2022-dotnet/Day07/Program.fs b/aoc-2022-dotnet/Day07/Program.fs index 89cd728..7e16cb6 100644 --- a/aoc-2022-dotnet/Day07/Program.fs +++ b/aoc-2022-dotnet/Day07/Program.fs @@ -1,4 +1,6 @@ -open System.IO +module Day07 + +open System.IO open FParsec let fileSizeThreshold = 100_000 @@ -26,9 +28,7 @@ let parseCommands input = let pcmd = pcd <|> pls let pinput = many pcmd - match run pinput input with - | Success (result, _, _) -> result - | _ -> failwith "Invalid input format!" + Common.parse pinput input let combine = function diff --git a/aoc-2022-dotnet/aoc-2022-dotnet.sln b/aoc-2022-dotnet/aoc-2022-dotnet.sln index 88eab36..0a2fc9a 100644 --- a/aoc-2022-dotnet/aoc-2022-dotnet.sln +++ b/aoc-2022-dotnet/aoc-2022-dotnet.sln @@ -22,7 +22,9 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Day05", "Day05\Day05.fsproj EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Day06", "Day06\Day06.fsproj", "{24E41736-93F0-4222-810F-47B9A740E599}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Day07", "Day07\Day07.fsproj", "{5816A6D4-F70A-419E-AB40-C41C0AB5364F}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Day07", "Day07\Day07.fsproj", "{5816A6D4-F70A-419E-AB40-C41C0AB5364F}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Common", "Common\Common.fsproj", "{3148A67C-BDDB-4660-83E6-C2C6D6016A47}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -58,6 +60,10 @@ Global {5816A6D4-F70A-419E-AB40-C41C0AB5364F}.Debug|Any CPU.Build.0 = Debug|Any CPU {5816A6D4-F70A-419E-AB40-C41C0AB5364F}.Release|Any CPU.ActiveCfg = Release|Any CPU {5816A6D4-F70A-419E-AB40-C41C0AB5364F}.Release|Any CPU.Build.0 = Release|Any CPU + {3148A67C-BDDB-4660-83E6-C2C6D6016A47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3148A67C-BDDB-4660-83E6-C2C6D6016A47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3148A67C-BDDB-4660-83E6-C2C6D6016A47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3148A67C-BDDB-4660-83E6-C2C6D6016A47}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE |