this repo has no description
1# Day 02 2 3```elixir 4Mix.install([:kino_aoc]) 5``` 6 7## Parsing 8 9<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiIyIiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 10 11```elixir 12{:ok, puzzle_input} = 13 KinoAOC.download_puzzle("2025", "2", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 14``` 15 16```elixir 17ranges = 18 puzzle_input 19 |> String.trim() 20 |> String.split(",") 21 |> Enum.map(fn range -> 22 range 23 |> String.split("-") 24 |> Enum.map(&String.to_integer/1) 25 |> then(&apply(Range, :new, &1)) 26 end) 27``` 28 29## Implementation 30 31```elixir 32defmodule ElfRanges do 33 def valid?(num) do 34 len = floor(:math.log10(num)) + 1 35 36 valid_n?(num, len, 2) 37 end 38 39 def valid_any?(num) do 40 len = floor(:math.log10(num)) + 1 41 42 Enum.all?(2..len//1, &valid_n?(num, len, &1)) 43 end 44 45 def valid_n?(num, len, n) do 46 if rem(len, n) == 0 do 47 step = 10 ** div(len, n) 48 49 Stream.unfold(num, fn 50 0 -> nil 51 val -> {rem(val, step), div(val, step)} 52 end) 53 |> Enum.dedup() 54 |> then(&(not match?([_], &1))) 55 else 56 true 57 end 58 end 59end 60``` 61 62## Part 1 63 64```elixir 65ranges 66|> Stream.flat_map(& &1) 67|> Stream.reject(&ElfRanges.valid?/1) 68|> Enum.sum() 69``` 70 71## Part 2 72 73```elixir 74ranges 75|> Stream.flat_map(& &1) 76|> Stream.reject(&ElfRanges.valid_any?/1) 77|> Enum.sum() 78``` 79 80<!-- livebook:{"offset":1434,"stamp":{"token":"XCP.NoAgOlNzs9jV0M8QxQDrdfMwKQR_xYkBG2FLF06XnKPtJ5ps3S83JucEVQZ7fJF0utUaryiCOT7xPWESlw3lS3TI6Jujiw8uFAZdKEXUL_jmZMHVF37TxiY4vRwKjfwvfg","version":2}} -->