【发布时间】:2022-12-10 23:45:58
【问题描述】:
如果标题没有意义,我深表歉意,我正在努力准确地描述它是什么,但希望以下内容能给您带来启发。
这是 AoC 挑战的一部分,但我相信这是一个足够具体的问题,无论如何都可能会遇到。对于挑战,我认为我的处理方式不正确,建造一棵树会更好,但现在我只想知道如何解决这个问题。
我在哪里
我的数据如下所示:
iex(249)> Day7.part1
[
%{path: ["/", "a", "e"], size: 584},
%{path: ["/", "a"], size: 94269},
%{path: ["/", "d"], size: 24933642},
%{path: ["/"], size: 23352670}
]
我想做的是遍历比较 :path 值的位置,如果它们匹配,则较短的列表必须是父级,并且父级 :size 将更新为 size: parent.size + child.size。或者至少是类似的东西。
期望的输出
iex(249)> Day7.part1
[
%{path: ["/", "a", "e"], size: 584},
%{path: ["/", "a"], size: 94853},
%{path: ["/", "d"], size: 24933642},
%{path: ["/"], size: 48381165}
]
到目前为止我尝试过的
def child_dirs([], system), do: system
def child_dirs([head | tail] = dirs, system) do
Enum.map(dirs, fn x ->
if x.path == List.delete_at(head.path, -1) do
system = system ++ [%{path: x.path, size: head.size + x.size}]
end
end)
child_dirs(tail, system)
end
结果如下
iex(281)> Day7.part1 |> Day7.child_dirs([])
[]
但是如果我更改system = system ++ ...来检查它,就像IO.inspect(system = system ++ [%{path: x.path, size: head.size + x.size}])一样。我得到以下信息:
iex(284)> Day7.part1 |> Day7.child_dirs([])
[%{path: ["/", "a"], size: 94853}]
[%{path: ["/"], size: 23446939}]
[%{path: ["/"], size: 48286312}]
[]
所以它在某些方面显然是有效的,但只是没有将更新的值添加到正在进行的累加器名为system。
任何帮助或建议将不胜感激:)
【问题讨论】:
标签: elixir comparison