blob: da236d382a3cf619ce51967d397b793306f3a389 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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"
|