Better program

This commit is contained in:
Smaug123
2023-12-03 17:19:12 +00:00
parent a48aaa78b1
commit 4a1d9d1cae

View File

@@ -5,6 +5,7 @@
#nowarn "9" #nowarn "9"
#endif #endif
open System
open System.Diagnostics open System.Diagnostics
open System.IO open System.IO
@@ -18,49 +19,73 @@ module Program =
let endToEnd = Stopwatch.StartNew () let endToEnd = Stopwatch.StartNew ()
endToEnd.Restart () endToEnd.Restart ()
let dir = DirectoryInfo argv.[0]
let sw = Stopwatch.StartNew () let sw = Stopwatch.StartNew ()
sw.Restart ()
let contents = File.ReadAllBytes argv.[0]
sw.Stop ()
System.Console.Error.WriteLine ("Reading file (us): " + (toUs sw.ElapsedTicks).ToString ())
sw.Restart () do
let resultArr, len, lineCount = Day3.parse contents sw.Restart ()
let input = Path.Combine (dir.FullName, "day1.txt") |> File.ReadAllText
let part1 = Day1.part1 input
sw.Stop ()
Console.WriteLine (part1.ToString ())
Console.Error.WriteLine ((1_000.0 * float sw.ElapsedTicks / float Stopwatch.Frequency).ToString () + "ms")
sw.Restart ()
let part2 = Day1.part2 input
sw.Stop ()
Console.WriteLine (part2.ToString ())
Console.Error.WriteLine ((1_000.0 * float sw.ElapsedTicks / float Stopwatch.Frequency).ToString () + "ms")
sw.Stop () do
System.Console.Error.WriteLine ("Populating array (us): " + (toUs sw.ElapsedTicks).ToString ()) let input = Path.Combine (dir.FullName, "day2.txt") |> File.ReadAllText
sw.Restart ()
let part1 = Day2.part1 input
sw.Stop ()
Console.WriteLine (part1.ToString ())
Console.Error.WriteLine ((1_000.0 * float sw.ElapsedTicks / float Stopwatch.Frequency).ToString () + "ms")
sw.Restart ()
let part2 = Day2.part2 input
sw.Stop ()
Console.WriteLine (part2.ToString ())
Console.Error.WriteLine ((1_000.0 * float sw.ElapsedTicks / float Stopwatch.Frequency).ToString () + "ms")
do
let input = Path.Combine (dir.FullName, "day3.txt") |> File.ReadAllBytes
sw.Restart ()
let resultArr, len, lineCount = Day3.parse input
sw.Stop ()
Console.Error.WriteLine (
(1_000.0 * float sw.ElapsedTicks / float Stopwatch.Frequency).ToString ()
+ "ms parse"
)
#if DEBUG #if DEBUG
let contents = let contents =
{ {
Elements = Array.take len resultArr Elements = Array.take len resultArr
Width = len / lineCount Width = len / lineCount
} }
#else #else
use ptr = fixed resultArr use ptr = fixed resultArr
let contents = let contents =
{ {
Elements = ptr Elements = ptr
Length = len Length = len
Width = len / lineCount Width = len / lineCount
} }
#endif #endif
// |> Array.map (fun s -> Array.init s.Length (fun i -> if s.[i] = '.' then 100uy elif s.[i] = '*' then 255uy elif '0' <= s.[i] && s.[i] <= '9' then byte s.[i] - byte '0' else 254uy)) let part1 = Day3.part1 contents
sw.Stop ()
sw.Restart () Console.WriteLine (part1.ToString ())
let part1 = Day3.part1 contents Console.Error.WriteLine ((1_000.0 * float sw.ElapsedTicks / float Stopwatch.Frequency).ToString () + "ms")
sw.Stop () sw.Restart ()
System.Console.Error.WriteLine ("Part 1 (us): " + (toUs sw.ElapsedTicks).ToString ()) let part2 = Day3.part2 contents
System.Console.WriteLine (part1.ToString ()) Console.WriteLine (part2.ToString ())
Console.Error.WriteLine ((1_000.0 * float sw.ElapsedTicks / float Stopwatch.Frequency).ToString () + "ms")
sw.Restart ()
let part2 = Day3.part2 contents
sw.Stop ()
System.Console.Error.WriteLine ("Part 2 (us): " + (toUs sw.ElapsedTicks).ToString ())
System.Console.WriteLine (part2.ToString ())
endToEnd.Stop () endToEnd.Stop ()
System.Console.Error.WriteLine ("Total (us): " + (toUs endToEnd.ElapsedTicks).ToString ()) Console.Error.WriteLine ((1_000.0 * float endToEnd.ElapsedTicks / float Stopwatch.Frequency).ToString () + "ms total")
0 0