From 6503a02d1e4cf3479265070244c1d023fcbdf10d Mon Sep 17 00:00:00 2001 From: Adam Millerchip Date: Thu, 7 Dec 2023 10:44:36 +0900 Subject: [PATCH] Day 6 Part 2 --- 2023/day6.exs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/2023/day6.exs b/2023/day6.exs index 58abdfc..6dd9be6 100755 --- a/2023/day6.exs +++ b/2023/day6.exs @@ -2,17 +2,22 @@ defmodule Day6 do def part1(input) do input - |> Enum.map(fn {race, record} -> - scores = for n <- 1..div(race, 2), do: n * (race - n) - [_middle | rev_no_middle] = reversed = Enum.reverse(scores) - scores = scores ++ if rem(race, 2) == 1, do: reversed, else: rev_no_middle - Enum.count(scores, fn score -> score > record end) - end) + |> Enum.map(fn line -> Enum.map(line, &String.to_integer/1) end) + |> Enum.zip() + |> Enum.map(fn {race, record} -> count_winning(race, record) end) |> Enum.product() end - def part2(_input) do - :ok + def count_winning(race, record) do + scores = for n <- 1..div(race, 2), do: n * (race - n) + [_middle | rev_no_middle] = reversed = Enum.reverse(scores) + scores = scores ++ if rem(race, 2) == 1, do: reversed, else: rev_no_middle + Enum.count(scores, fn score -> score > record end) + end + + def part2(input) do + [race, record] = Enum.map(input, fn line -> line |> Enum.join() |> String.to_integer() end) + count_winning(race, record) end def input do @@ -24,9 +29,7 @@ defmodule Day6 do line |> String.split() |> Enum.drop(1) - |> Enum.map(&String.to_integer/1) end) - |> Enum.zip() else _ -> :error end