use metaprogramming to reduce loc
This commit is contained in:
parent
750d7dc6a8
commit
dd0729091d
1 changed files with 37 additions and 56 deletions
|
@ -6,13 +6,13 @@ aoc 2023, 1 do
|
||||||
|
|
||||||
firsts =
|
firsts =
|
||||||
lines
|
lines
|
||||||
|> Stream.map(&to_digits/1)
|
|> Stream.map(&simple_to_digits/1)
|
||||||
|> Stream.map(&List.first/1)
|
|> Stream.map(&List.first/1)
|
||||||
|
|
||||||
lasts =
|
lasts =
|
||||||
lines
|
lines
|
||||||
|> Stream.map(&String.reverse/1)
|
|> Stream.map(&String.reverse/1)
|
||||||
|> Stream.map(&to_digits/1)
|
|> Stream.map(&simple_to_digits/1)
|
||||||
|> Stream.map(&List.first/1)
|
|> Stream.map(&List.first/1)
|
||||||
|
|
||||||
Stream.zip_with(firsts, lasts, &digits_to_number/2)
|
Stream.zip_with(firsts, lasts, &digits_to_number/2)
|
||||||
|
@ -24,13 +24,13 @@ aoc 2023, 1 do
|
||||||
|
|
||||||
firsts =
|
firsts =
|
||||||
lines
|
lines
|
||||||
|> Stream.map(&to_digits_2/1)
|
|> Stream.map(&to_digits/1)
|
||||||
|> Stream.map(&List.first/1)
|
|> Stream.map(&List.first/1)
|
||||||
|
|
||||||
lasts =
|
lasts =
|
||||||
lines
|
lines
|
||||||
|> Stream.map(&String.reverse/1)
|
|> Stream.map(&String.reverse/1)
|
||||||
|> Stream.map(&to_digits_3/1)
|
|> Stream.map(&to_digits_reversed/1)
|
||||||
|> Stream.map(&List.first/1)
|
|> Stream.map(&List.first/1)
|
||||||
|
|
||||||
Stream.zip_with(firsts, lasts, &digits_to_number/2)
|
Stream.zip_with(firsts, lasts, &digits_to_number/2)
|
||||||
|
@ -39,61 +39,42 @@ aoc 2023, 1 do
|
||||||
|
|
||||||
def digits_to_number(f, l), do: String.to_integer("#{f}#{l}")
|
def digits_to_number(f, l), do: String.to_integer("#{f}#{l}")
|
||||||
|
|
||||||
|
numbers = [
|
||||||
|
{"1", "one", 1},
|
||||||
|
{"2", "two", 2},
|
||||||
|
{"3", "three", 3},
|
||||||
|
{"4", "four", 4},
|
||||||
|
{"5", "five", 5},
|
||||||
|
{"6", "six", 6},
|
||||||
|
{"7", "seven", 7},
|
||||||
|
{"8", "eight", 8},
|
||||||
|
{"9", "nine", 9}
|
||||||
|
]
|
||||||
|
|
||||||
|
def simple_to_digits(""), do: []
|
||||||
|
|
||||||
|
for {n, _, v} <- numbers do
|
||||||
|
def simple_to_digits(unquote(n) <> rest), do: [unquote(v) | simple_to_digits(rest)]
|
||||||
|
end
|
||||||
|
|
||||||
|
def simple_to_digits(<<_::binary-size(1), rest::binary>>), do: simple_to_digits(rest)
|
||||||
|
|
||||||
def to_digits(""), do: []
|
def to_digits(""), do: []
|
||||||
def to_digits("1" <> rest), do: [1 | to_digits(rest)]
|
|
||||||
def to_digits("2" <> rest), do: [2 | to_digits(rest)]
|
for {n, w, v} <- numbers do
|
||||||
def to_digits("3" <> rest), do: [3 | to_digits(rest)]
|
def to_digits(unquote(n) <> rest), do: [unquote(v) | to_digits(rest)]
|
||||||
def to_digits("4" <> rest), do: [4 | to_digits(rest)]
|
def to_digits(unquote(w) <> rest), do: [unquote(v) | to_digits(rest)]
|
||||||
def to_digits("5" <> rest), do: [5 | to_digits(rest)]
|
end
|
||||||
def to_digits("6" <> rest), do: [6 | to_digits(rest)]
|
|
||||||
def to_digits("7" <> rest), do: [7 | to_digits(rest)]
|
|
||||||
def to_digits("8" <> rest), do: [8 | to_digits(rest)]
|
|
||||||
def to_digits("9" <> rest), do: [9 | to_digits(rest)]
|
|
||||||
def to_digits(<<_::binary-size(1), rest::binary>>), do: to_digits(rest)
|
def to_digits(<<_::binary-size(1), rest::binary>>), do: to_digits(rest)
|
||||||
|
|
||||||
def to_digits_2(""), do: []
|
def to_digits_reversed(""), do: []
|
||||||
def to_digits_2("1" <> rest), do: [1 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("one" <> rest), do: [1 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("2" <> rest), do: [2 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("two" <> rest), do: [2 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("3" <> rest), do: [3 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("three" <> rest), do: [3 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("4" <> rest), do: [4 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("four" <> rest), do: [4 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("5" <> rest), do: [5 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("five" <> rest), do: [5 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("6" <> rest), do: [6 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("six" <> rest), do: [6 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("7" <> rest), do: [7 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("seven" <> rest), do: [7 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("8" <> rest), do: [8 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("eight" <> rest), do: [8 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("9" <> rest), do: [9 | to_digits_2(rest)]
|
|
||||||
def to_digits_2("nine" <> rest), do: [9 | to_digits_2(rest)]
|
|
||||||
|
|
||||||
def to_digits_2(<<_::binary-size(1), rest::binary>>),
|
for {n, w, v} <- numbers do
|
||||||
do: to_digits_2(rest)
|
wr = String.reverse(w)
|
||||||
|
def to_digits_reversed(unquote(n) <> rest), do: [unquote(v) | to_digits_reversed(rest)]
|
||||||
|
def to_digits_reversed(unquote(wr) <> rest), do: [unquote(v) | to_digits_reversed(rest)]
|
||||||
|
end
|
||||||
|
|
||||||
def to_digits_3(""), do: []
|
def to_digits_reversed(<<_::binary-size(1), rest::binary>>), do: to_digits_reversed(rest)
|
||||||
def to_digits_3("1" <> rest), do: [1 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("eno" <> rest), do: [1 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("2" <> rest), do: [2 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("owt" <> rest), do: [2 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("3" <> rest), do: [3 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("eerht" <> rest), do: [3 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("4" <> rest), do: [4 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("ruof" <> rest), do: [4 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("5" <> rest), do: [5 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("evif" <> rest), do: [5 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("6" <> rest), do: [6 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("xis" <> rest), do: [6 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("7" <> rest), do: [7 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("neves" <> rest), do: [7 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("8" <> rest), do: [8 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("thgie" <> rest), do: [8 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("9" <> rest), do: [9 | to_digits_3(rest)]
|
|
||||||
def to_digits_3("enin" <> rest), do: [9 | to_digits_3(rest)]
|
|
||||||
|
|
||||||
def to_digits_3(<<_::binary-size(1), rest::binary>>),
|
|
||||||
do: to_digits_3(rest)
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue