Skip to content

Commit

Permalink
Solve 2023/6
Browse files Browse the repository at this point in the history
  • Loading branch information
code-shoily committed Dec 4, 2023
1 parent f603785 commit 10deed5
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 4 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@ The stats, both in `<year>/README.md` and the bottom part of `README.md` are aut

Note that you can call those commands independently and also set up pre-commit hooks to run it for you.

## :trophy: 257/400
## :trophy: 259/400

| Day | [2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](lib/2021) | [2022](lib/2022) | [2023](lib/2023)
|:---:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| :star2: | 48 | 22 | 34 | 15 | 15 | 44 | 24 | 45 | 10 |
| :star2: | 48 | 22 | 34 | 15 | 15 | 44 | 24 | 45 | 12 |
| 1 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
| 2 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
| 3 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
| 4 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
| 5 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
| 6 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
| 6 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
| 7 | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
| 8 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | |
| 9 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
Expand Down
3 changes: 2 additions & 1 deletion lib/2023/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | 2023


## :trophy: 10/50
## :trophy: 12/50

| Day | Problem Page | Status | Solution Page | Test Page |
| :---: | :------: | ---: | :---: | :---: |
Expand All @@ -15,4 +15,5 @@
| 3 | [Gear Ratios](https://adventofcode.com/2023/day/3) | :1st_place_medal: | [day_03.ex](/lib/2023/day_03.ex) | [day_03_test.exs](/test/2023/day_03_test.exs) |
| 4 | [Scratchcards](https://adventofcode.com/2023/day/4) | :1st_place_medal: | [day_04.ex](/lib/2023/day_04.ex) | [day_04_test.exs](/test/2023/day_04_test.exs) |
| 5 | [If You Give A Seed A Fertilizer](https://adventofcode.com/2023/day/5) | :1st_place_medal: | [day_05.ex](/lib/2023/day_05.ex) | [day_05_test.exs](/test/2023/day_05_test.exs) |
| 6 | [Wait For It](https://adventofcode.com/2023/day/6) | :1st_place_medal: | [day_06.ex](/lib/2023/day_06.ex) | [day_06_test.exs](/test/2023/day_06_test.exs) |

42 changes: 42 additions & 0 deletions lib/2023/day_06.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
defmodule AdventOfCode.Y2023.Day06 do
@moduledoc """
--- Day 6: Wait For It ---
Problem Link: https://adventofcode.com/2023/day/6
Difficulty: xs
Tags: algebra
"""
alias AdventOfCode.Helpers.{InputReader, Transformers}

def input, do: InputReader.read_from_file(2023, 6)

def run(input \\ input()) do
input = parse(input)
{run_1(input), run_2(input)}
end

defp run_1(input), do: Enum.reduce(input, 1, &(&2 * s(&1)))
defp run_2(input), do: input |> join_numbers() |> s()

def parse(data \\ input()) do
data
|> Transformers.lines()
|> Enum.map(&extract/1)
|> then(fn [times, records] -> Enum.zip(times, records) end)
end

defp extract(data),
do: ~r{\d+} |> Regex.scan(data) |> List.flatten() |> Enum.map(&String.to_integer/1)

defp s({time, record}) do
delta = :math.sqrt(time * time - 4 * record)
floor((time + delta) / 2) - ceil((time - delta) / 2) + 1
end

defp join_numbers(data) do
data
|> Enum.unzip()
|> Tuple.to_list()
|> Enum.map(&(&1 |> Enum.join() |> String.to_integer()))
|> List.to_tuple()
end
end
2 changes: 2 additions & 0 deletions priv/input_files/2023_6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Time: 42 68 69 85
Distance: 284 1005 1122 1341
12 changes: 12 additions & 0 deletions test/2023/day_06_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
defmodule AdventOfCode.Y2023.Day06Test do
@moduledoc false

use ExUnit.Case
@moduletag :y2306

alias AdventOfCode.Y2023.Day06, as: Solution

test "Year 2023, Day 6 run/1" do
assert Solution.run() == {440_000, 26_187_338}
end
end

0 comments on commit 10deed5

Please sign in to comment.