WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions 2020/Day14.fs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ module Day14 =

let applyMask bitMask (value: int64) =
let b = Convert.ToString(value, 2).PadLeft(36, '0').ToCharArray()
bitMask
|> Seq.iteri (fun i x -> if x <> 'X' then b.[i] <- x)
bitMask |> Seq.iteri (fun i x -> if x <> 'X' then b.[i] <- x)
Convert.ToInt64(Array.map string b |> String.concat "", 2)

let getAll arr =
Expand Down
6 changes: 4 additions & 2 deletions 2020/Day15.fs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ module Day15 =
| x :: xs ->
turn (turnNumber + 1) { game with Turns = Map.add x (0, turnNumber) game.Turns; LastSpoken = Some x; First = not (Map.containsKey x game.Turns) } endTurn xs

let part1() = (turn 1 { Turns = Map.empty; LastSpoken = None; First = false } 2020 numbers)
let part2() = (turn 1 { Turns = Map.empty; LastSpoken = None; First = false } 30000000 numbers)
let initState = { Turns = Map.empty; LastSpoken = None; First = false }

let part1() = turn 1 initState 2020 numbers
let part2() = turn 1 initState 30000000 numbers

let solve () = printDay 2020 15 part1 part2
17 changes: 8 additions & 9 deletions 2020/Day16.fs
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,17 @@ module Day16 =
if value >= min && value <= max then if reverse then Some value else None
else findInvalidValue value reverse xs

let rec findCandidates value candidateFields = function
| [] -> candidateFields
| RangeRule(field, min, max) :: xs ->
if value >= min && value <= max then findCandidates value (field :: candidateFields) xs
else findCandidates value candidateFields xs

let part1() =
ticketTranslator.Tickets
|> List.collect (fun values -> values |> List.choose (fun value -> findInvalidValue value false ticketTranslator.Rules))
|> List.sum

let rec findCandidates value candidateFields = function
| [] -> candidateFields
| RangeRule(field, min, max) :: xs ->
if value >= min && value <= max then findCandidates value (field :: candidateFields) xs
else findCandidates value candidateFields xs

let part2() =
let myTicket = List.head ticketTranslator.Tickets
let validNearbyTickets =
Expand Down Expand Up @@ -66,11 +66,10 @@ module Day16 =
|> List.sortBy (snd >> List.length)
|> List.fold (fun map (field, candidates) ->
candidates
|> List.filter (fun idx -> not (Map.containsKey idx map))
|> List.head
|> List.find (fun idx -> not (Map.containsKey idx map))
|> fun idx -> Map.add idx field map) Map.empty
|> Map.toList
|> List.filter (fun (_, field) -> field.Contains("departure"))
|> List.filter (fun (_, field) -> field.StartsWith("departure"))
|> List.map (fun (idx, _) -> int64 (List.item idx myTicket))
|> List.reduce (*)

Expand Down
9 changes: 9 additions & 0 deletions 2020/Day17.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Year2020

module Day17 =
open Utilities

let part1() = 0
let part2() = 0

let solve () = printDay 2020 17 part1 part2
3 changes: 3 additions & 0 deletions 2020/input/day17.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.#.
..#
###
2 changes: 1 addition & 1 deletion Program.fs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ let main argv =
((2020, 7), Year2020.Day07.solve); ((2020, 8), Year2020.Day08.solve); ((2020, 9), Year2020.Day09.solve)
((2020, 10), Year2020.Day10.solve); ((2020, 11), Year2020.Day11.solve); ((2020, 12), Year2020.Day12.solve)
((2020, 13), Year2020.Day13.solve); ((2020, 14), Year2020.Day14.solve); ((2020, 15), Year2020.Day15.solve)
((2020, 16), Year2020.Day16.solve)
((2020, 16), Year2020.Day16.solve); ((2020, 17), Year2020.Day17.solve)
]

match argv |> List.ofArray with
Expand Down
1 change: 1 addition & 0 deletions aoc.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
<Compile Include="2020/Day14.fs" />
<Compile Include="2020/Day15.fs" />
<Compile Include="2020/Day16.fs" />
<Compile Include="2020/Day17.fs" />
<Compile Include="Program.fs" />
</ItemGroup>

Expand Down