-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday25_part01.fs
41 lines (35 loc) · 1.34 KB
/
day25_part01.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
37
38
39
40
41
module day25_part01
open System
open AdventOfCode_2022.Modules
let path = "day25/day25_input.txt"
let convertToDecimal (snuffvalue: string) =
let svaluesIdx = snuffvalue.ToCharArray() |> Array.rev |> Array.mapi(fun idx v -> (idx, (string)v))
let parts =
seq {
for (idx, v) in svaluesIdx do
let p =
match v with
| "1" -> 1. * Math.Pow(5, idx)
| "2" -> 2. * Math.Pow(5, idx)
| "-" -> -1. * Math.Pow(5, idx)
| "="-> -2. * Math.Pow(5, idx)
| _ -> 0.
yield p
}
bigint(parts |> Seq.sum)
let rec convertToSnuff (current: string) (decvalue: bigint) =
if decvalue = 0I then String.Concat(current.ToCharArray() |> Array.rev)
else
let check = (decvalue + 2I) % 5I - 2I
let newdigit =
if check = 0I then "0"
elif check = 1I then "1"
elif check = 2I then "2"
elif check = -2I then "="
elif check = -1I then "-"
else ""
convertToSnuff (current + newdigit) ((decvalue + 2I) / 5I)
let execute =
let inputLines = LocalHelper.GetLinesFromFile(path)
let totalsumdec = bigint.Parse((inputLines |> Array.map convertToDecimal |> Array.sum).ToString())
convertToSnuff "" totalsumdec