Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2023
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.20 KB | None | 0 0
  1. defmodule AdventOfCode.Day01 do
  2.   def part1(args) do
  3.     number_regex = ~r/([0-9])/
  4.  
  5.     args
  6.     |> String.split(~r/\n/, trim: true)
  7.     |> Enum.map(&first_and_last_number(&1, number_regex))
  8.     |> Enum.map(&number_list_to_integer/1)
  9.     |> Enum.sum()
  10.   end
  11.  
  12.   def part2(args) do
  13.     number_regex = ~r/(?=(one|two|three|four|five|six|seven|eight|nine|[0-9]))/
  14.  
  15.     args
  16.     |> String.split(~r/\n/, trim: true)
  17.     |> Enum.map(&first_and_last_number(&1, number_regex))
  18.     |> Enum.map(fn number -> Enum.map(number, &replace_word_with_number/1) end)
  19.     |> Enum.map(&number_list_to_integer/1)
  20.     |> Enum.sum()
  21.   end
  22.  
  23.   defp first_and_last_number(string, regex) do
  24.     matches = Regex.scan(regex, string)
  25.     [_, first] = List.first(matches)
  26.     [_, last] = List.last(matches)
  27.  
  28.     [first, last]
  29.   end
  30.  
  31.   defp number_list_to_integer(list) do
  32.     list
  33.     |> List.to_string()
  34.     |> String.to_integer()
  35.   end
  36.  
  37.   defp replace_word_with_number(string) do
  38.     numbers = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
  39.  
  40.     String.replace(string, numbers, fn x ->
  41.       (Enum.find_index(numbers, &(&1 == x)) + 1)
  42.       |> Integer.to_string()
  43.     end)
  44.   end
  45. end
  46.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement