Add day 6
This commit is contained in:
parent
6d6f4c3e1b
commit
7389931fbf
@ -24,4 +24,8 @@ let main _ =
|
||||
printfn $"%A{day5Star1}"
|
||||
let day5Star2 = day_5.Star2.main
|
||||
printfn $"%A{day5Star2}"
|
||||
let day6Star1 = day_6.Star1.main
|
||||
printfn $"%A{day6Star1}"
|
||||
let day6Star2 = day_6.Star2.main
|
||||
printfn $"%A{day6Star2}"
|
||||
0
|
||||
|
||||
32
advent-of-code/tasks/day-6/Star1.fs
Normal file
32
advent-of-code/tasks/day-6/Star1.fs
Normal file
@ -0,0 +1,32 @@
|
||||
module advent_of_code.tasks.day_6.Star1
|
||||
|
||||
open System.IO
|
||||
|
||||
let stream = new StreamReader("tasks/day-6/input.txt")
|
||||
|
||||
let splitSpaces (line: string) =
|
||||
line.Split() |> Array.toList
|
||||
|
||||
let isNotNull (s: string) =
|
||||
s.Length > 0
|
||||
|
||||
let convertToInt64 (s: string) =
|
||||
s |> int64
|
||||
|
||||
let rec applyOps (allNumbers: string array list) (ops: string list) =
|
||||
if allNumbers.Length <> 0 then
|
||||
let currNumbers, numbersTail = allNumbers.Head |> Array.map convertToInt64, allNumbers.Tail
|
||||
let currOp, opsTail = ops.Head, ops.Tail
|
||||
let result =
|
||||
match currOp with
|
||||
| "*" -> currNumbers |> Array.fold (*) (1 |> int64)
|
||||
| "+" -> Array.sum currNumbers
|
||||
result + applyOps numbersTail opsTail
|
||||
else
|
||||
0 |> int64
|
||||
|
||||
let main =
|
||||
let lines = ((stream.ReadToEnd().Split("\n") |> Array.toList) |> List.map splitSpaces) |> List.map (List.filter isNotNull)
|
||||
let numbers = lines[.. lines.Length - 2] |> List.map List.toArray |> Array.transpose |> Array.toList
|
||||
let ops = lines[lines.Length - 1]
|
||||
applyOps numbers ops
|
||||
43
advent-of-code/tasks/day-6/Star2.fs
Normal file
43
advent-of-code/tasks/day-6/Star2.fs
Normal file
@ -0,0 +1,43 @@
|
||||
module advent_of_code.tasks.day_6.Star2
|
||||
|
||||
open System.IO
|
||||
|
||||
let stream = new StreamReader("tasks/day-6/input.txt")
|
||||
|
||||
let isNotNull (s: string) =
|
||||
s.Length > 0
|
||||
|
||||
let convertToInt64 (s: string) =
|
||||
s |> int64
|
||||
|
||||
let trimString (s: string) =
|
||||
s.Trim()
|
||||
|
||||
let rec buildArray (numberArray: string array array) (lineArray: string array) =
|
||||
if lineArray.Length = 0 then
|
||||
numberArray
|
||||
else
|
||||
let head, tail = lineArray[0], lineArray[1..]
|
||||
if lineArray[0] = "" then
|
||||
buildArray (Array.append numberArray [| [||] |]) tail
|
||||
else
|
||||
buildArray (Array.append numberArray[.. numberArray.Length - 2] [|(Array.append numberArray[numberArray.Length - 1] [| head |])|]) tail
|
||||
|
||||
let rec applyOps (allNumbers: string array array) (ops: string array) =
|
||||
if allNumbers.Length <> 0 then
|
||||
let currNumbers, numbersTail = allNumbers[0] |> Array.map convertToInt64, allNumbers[1..]
|
||||
let currOp, opsTail = ops[0], ops[1..]
|
||||
let result =
|
||||
match currOp with
|
||||
| "*" -> currNumbers |> Array.fold (*) (1 |> int64)
|
||||
| "+" -> Array.sum currNumbers
|
||||
result + applyOps numbersTail opsTail
|
||||
else
|
||||
0 |> int64
|
||||
|
||||
let main =
|
||||
let lines = stream.ReadToEnd().Split("\n")
|
||||
let ops = lines[lines.Length - 1].Split() |> Array.filter isNotNull
|
||||
let numberLines = (Array.transpose (lines[.. lines.Length - 2] |> Array.map Seq.toArray)) |> Array.map System.String |> Array.map trimString
|
||||
let numbers = buildArray [|[||]|] numberLines
|
||||
applyOps numbers ops
|
||||
Loading…
x
Reference in New Issue
Block a user