Add day 2
This commit is contained in:
parent
76dee81b8c
commit
39551c066c
@ -1,11 +1,15 @@
|
||||
module advent_of_code.Program
|
||||
|
||||
open advent_of_code.tasks.day_1
|
||||
open advent_of_code.tasks
|
||||
|
||||
[<EntryPoint>]
|
||||
let main _ =
|
||||
let _, day1Star1 = Star1.main 50 0
|
||||
let _, day1Star1 = day_1.Star1.main 50 0
|
||||
printfn $"{day1Star1}"
|
||||
let _, day1Star2 = Star2.main 50 0
|
||||
let _, day1Star2 = day_1.Star2.main 50 0
|
||||
printfn $"{day1Star2}"
|
||||
let day2Star1 = day_2.Star1.main
|
||||
printfn $"{day2Star1}"
|
||||
let day2Star2 = day_2.Star2.main
|
||||
printfn $"{day2Star2}"
|
||||
0
|
||||
|
||||
24
advent-of-code/tasks/day-2/Star1.fs
Normal file
24
advent-of-code/tasks/day-2/Star1.fs
Normal file
@ -0,0 +1,24 @@
|
||||
module advent_of_code.tasks.day_2.Star1
|
||||
|
||||
open System.IO
|
||||
|
||||
let stream = new StreamReader("tasks/day-2/input.txt")
|
||||
|
||||
let convertToString (i: int64) = i |> string
|
||||
|
||||
let isInvalid (id: string) =
|
||||
let individualCount = id.Length / 2
|
||||
let firstHalf, secondHalf = id[0..individualCount - 1], id[individualCount..]
|
||||
if firstHalf = secondHalf then id |> int64 else 0
|
||||
|
||||
let rec getInvalid (lines: string list) =
|
||||
let line, tail = lines.Head, lines.Tail
|
||||
let els = line.Split("-")
|
||||
let low, high = els[0] |> int64, els[1] |> int64
|
||||
let invalids = [low .. high] |> List.map convertToString |> List.map isInvalid
|
||||
|
||||
List.sum invalids + if tail.IsEmpty then 0 |> int64 else getInvalid tail
|
||||
|
||||
let main =
|
||||
let lines = stream.ReadLine().Split(",") |> Array.toList
|
||||
getInvalid lines
|
||||
41
advent-of-code/tasks/day-2/Star2.fs
Normal file
41
advent-of-code/tasks/day-2/Star2.fs
Normal file
@ -0,0 +1,41 @@
|
||||
module advent_of_code.tasks.day_2.Star2
|
||||
|
||||
open System.IO
|
||||
|
||||
let stream = new StreamReader("tasks/day-2/input.txt")
|
||||
|
||||
let convertToString (i: int64) = i |> string
|
||||
|
||||
let divideString (str: string) (n: int) =
|
||||
let count = str.Length / n
|
||||
let mutable parts = Set.empty
|
||||
for i in 0 .. count - 1 do
|
||||
let start = i * n
|
||||
parts <- parts.Add(str.Substring(start, n))
|
||||
parts
|
||||
|
||||
let rec isInvalid (id: string) (chars: int) =
|
||||
let biggerSlices = if chars = id.Length then 0 |> int64 else isInvalid id (chars + 1)
|
||||
if (chars = id.Length) then
|
||||
0
|
||||
else if (biggerSlices <> 0) then
|
||||
biggerSlices
|
||||
else if (id.Length % chars <> 0) then
|
||||
0
|
||||
else
|
||||
let parts = divideString id chars
|
||||
if parts.Count = 1 then id |> int64 else 0
|
||||
|
||||
let checkValid (id: string) = isInvalid id 1
|
||||
|
||||
let rec getInvalid (lines: string list) =
|
||||
let line, tail = lines.Head, lines.Tail
|
||||
let els = line.Split("-")
|
||||
let low, high = els[0] |> int64, els[1] |> int64
|
||||
let invalids = [low .. high] |> List.map convertToString |> List.map checkValid
|
||||
|
||||
List.sum invalids + if tail.IsEmpty then 0 |> int64 else getInvalid tail
|
||||
|
||||
let main =
|
||||
let lines = stream.ReadLine().Split(",") |> Array.toList
|
||||
getInvalid lines
|
||||
Loading…
x
Reference in New Issue
Block a user