-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1.ex
59 lines (49 loc) · 1.4 KB
/
1.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
defmodule Captha do
def sum do
input = File.read!("1.input") |> String.trim()
num_list = String.graphemes(input) |> Enum.map(&String.to_integer/1)
[first | _] = num_list
do_sum(num_list, 0, first)
end
def do_sum([x], sum, x) do
sum + x
end
def do_sum([_], sum, _) do
sum
end
def do_sum([x | [x | _] = rest], sum, first) do
do_sum(rest, sum + x, first)
end
def do_sum([_ | rest], sum, first) do
do_sum(rest, sum, first)
end
end
defmodule Captha2 do
def sum do
input = File.read!("1.input") |> String.trim()
num_list = String.graphemes(input) |> Enum.map(&String.to_integer/1)
half_len = div(length(num_list), 2) + 1
do_sum(num_list, 0, num_list, half_len)
end
def do_sum([], sum, _, _) do
sum
end
def do_sum([first | rest] = next_list, sum, list, half_len) when length(next_list) < half_len do
sub_list = next_list ++ Enum.take(list, half_len - length(next_list))
calc_sum(sub_list, first, rest, sum, list, half_len)
end
def do_sum([first | rest] = next_list, sum, list, half_len) do
sub_list = Enum.take(next_list, half_len)
calc_sum(sub_list, first, rest, sum, list, half_len)
end
def calc_sum(sub_list, first, rest, sum, list, half_len) do
sum =
if first == Enum.at(sub_list, -1) do
sum + first
else
sum
end
do_sum(rest, sum, list, half_len)
end
end
IO.inspect Captha2.sum()