-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday16_part02.fs
36 lines (29 loc) · 1 KB
/
day16_part02.fs
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
module day16_part02
open AdventOfCode_2016.Modules
let dragonCurve(input: char array) =
let replaced =
input
|> Array.rev
|> Array.map(fun c -> if c = '1' then '0' else '1')
Array.concat [input; [|'0'|]; (replaced)]
let checksum(input: char array) =
let mutable repeat = true
let mutable checksum = input
while repeat do
checksum <-
checksum
|> Array.chunkBySize 2
|> Array.map(fun r -> if r[0] = r[1] then '1' else '0')
if checksum.Length % 2 <> 0 then
repeat <- false
checksum
let fillDisk(size: int) (input: char array) =
let mutable dragonc = dragonCurve input
while dragonc.Length < size do
dragonc <- dragonCurve dragonc
checksum (dragonc |> Array.take(size))
let execute =
let path = "day16/day16_input.txt"
let content = (LocalHelper.GetContentFromFile path).ToCharArray()
let size = 35651584
String.concat "" ((fillDisk size content)|> Array.map string)