Day 2 Part 2
This commit is contained in:
parent
87b30e106f
commit
a6af9ede81
4 changed files with 1056 additions and 1 deletions
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
My (attempted) solutions to [Advent of Code 2020](https://adventofcode.com/2020) in Elixir.
|
My (attempted) solutions to [Advent of Code 2020](https://adventofcode.com/2020) in Elixir.
|
||||||
|
|
||||||
<img width="976" alt="image" src="https://user-images.githubusercontent.com/498229/100701084-45b44680-33e2-11eb-9fb9-11c6161a49ef.png">
|
<img width="973" alt="image" src="https://user-images.githubusercontent.com/498229/100832848-05b99600-34ac-11eb-931f-4b3a95d428f7.png">
|
||||||
|
|
||||||
## Strategy
|
## Strategy
|
||||||
|
|
||||||
|
|
28
day2/README
Normal file
28
day2/README
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
Day 2 Notes
|
||||||
|
|
||||||
|
------
|
||||||
|
Part1:
|
||||||
|
------
|
||||||
|
|
||||||
|
$ elixir day2part1.exs
|
||||||
|
414
|
||||||
|
|
||||||
|
Thoughts:
|
||||||
|
|
||||||
|
Use a regex to parse the input
|
||||||
|
Huh, can't iterate a string with Enum. Split into a list with Enum.graphemes/1
|
||||||
|
|
||||||
|
------
|
||||||
|
Part1:
|
||||||
|
------
|
||||||
|
|
||||||
|
$ elixir day2part2.exs
|
||||||
|
413
|
||||||
|
|
||||||
|
Thoughts:
|
||||||
|
|
||||||
|
Convert indices to be zero-based.
|
||||||
|
No xor operator without importing Bitwise? Just write it manually.
|
||||||
|
Initially misread the problem - thought first position must match, and second position must not match,
|
||||||
|
which caused some confusion.
|
||||||
|
Probably rebound to the same variable names a bit too much - should work on clearer variable names.
|
27
day2/day2part2.exs
Normal file
27
day2/day2part2.exs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
defmodule Day2Part2 do
|
||||||
|
def run do
|
||||||
|
regex = ~r/\A(\d+)-(\d+) (\w): (\w+)\z/
|
||||||
|
|
||||||
|
File.read!("input")
|
||||||
|
|> String.trim()
|
||||||
|
|> String.split("\n")
|
||||||
|
|> Enum.map(&Regex.run(regex, &1, capture: :all_but_first))
|
||||||
|
|> Enum.map(fn [first, second, char, password] ->
|
||||||
|
{
|
||||||
|
String.to_integer(first) - 1,
|
||||||
|
String.to_integer(second) - 1,
|
||||||
|
char,
|
||||||
|
String.graphemes(password)
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|> Enum.filter(fn {first, second, char, password} ->
|
||||||
|
first = Enum.at(password, first) == char
|
||||||
|
second = Enum.at(password, second) == char
|
||||||
|
(first && !second) || (!first && second)
|
||||||
|
end)
|
||||||
|
|> Enum.count()
|
||||||
|
|> IO.puts()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Day2Part2.run()
|
1000
day2/input
Normal file
1000
day2/input
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue