From f3d54ee9e83324da6c2c8fc90ea2b5d5d749b0a5 Mon Sep 17 00:00:00 2001 From: Brian Chu Date: Mon, 14 Feb 2022 22:16:43 -0800 Subject: solution for day 10 --- day10.fsx | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 day10.fsx diff --git a/day10.fsx b/day10.fsx new file mode 100644 index 0000000..da236d3 --- /dev/null +++ b/day10.fsx @@ -0,0 +1,39 @@ +open System.IO + +let revSublist nums pos n = + let c = Array.copy nums + for i in [0..n-1] do + nums.[(pos + i) % 256] <- c.[(pos + n - i - 1) % 256] + +let hash nRounds input = + let nums = [|0..255|] + let mutable pos = 0 + let mutable skipsize = 0 + + for _ in [1..nRounds] do + for n in input do + revSublist nums pos n + pos <- pos + n + skipsize + skipsize <- skipsize + 1 + nums + +let part1 (input: string) = + input.Split(',') + |> Array.map int + |> hash 1 + |> Array.take 2 + |> Array.reduce (*) + +let part2 (input: string) = + input + |> Seq.map (fun c -> byte c) + |> (fun a -> Seq.append a [|17uy; 31uy; 73uy; 47uy; 23uy|]) + |> Seq.map int + |> hash 64 + |> Array.chunkBySize 16 + |> Array.map (Array.reduce (^^^)) + |> Array.fold (fun str digit -> str + sprintf "%02x" digit) "" + +let lengths = File.ReadAllText "day10.txt" +part1 lengths |> printfn "%d" +part2 lengths |> printfn "%s" \ No newline at end of file -- cgit 1.4.1-2-gfad0