서론
ChatGPT한테 쓸만한 프로그래밍 언어들을 출력하라고 한 뒤 그걸로 돌림판을 만들어서 나온 언어로 2024년의 advent of code를 풀기로 했다. 인생이 너무 재미없었기 때문이다
https://wheelofnames.com/dqm-59z
돌림판을 공유하니 하실 분들은 하시길
Erlang은 써본 적이 없기 때문에 문서부터 읽어야 했다.
문제 설명
대충 스토리를 설명하자면, 팀장 역사가가 사라짐. 걔가 돌아다닌 역사적인 장소가지고 어쩌구했는데 장소마다 고유한 ID가 숫자로 있고 두개의 리스트별로 나눠서 써봤더니 어쩌구저쩌구
결국 두 리스트 소팅한다음에 대조해서 같은 인덱스끼리에 있는 것끼리 차를 구하란다 (좀 스토리가 개억지)
인풋은 대충 이렇게 생겼다
(...)
71611 49839
41787 68086
98937 95605
15634 78884
38019 25226
40301 68031
64868 55162
20353 28773
52004 20088
33605 36752
52954 97498
22677 92974
35007 86399
16229 14776
92840 67007
53192 70030
14342 89825
83874 20965
(...)
중간에 하다가 현타와서 그만둘뻔했다.
AoC 룰 중에 LLM을 쓰지말라는 룰이 있어서 코드를 쓰는데는 쓰지 않았지만, 중간에 에러나면 묻긴 했다.
-module(distance_calculator).
-export([main/1]).
main(_Args) ->
{LeftList, RightList} = read_input([], []),
SortedLeft = lists:sort(LeftList),
SortedRight = lists:sort(RightList),
TotalDistance = sum_distances(SortedLeft, SortedRight),
io:format("~p~n", [TotalDistance]).
read_input(LeftAcc, RightAcc) ->
case io:get_line('') of
eof ->
{lists:reverse(LeftAcc), lists:reverse(RightAcc)};
Line ->
Line1 = string:trim(Line),
Tokens = re:split(Line1, "\\s+", [{return, list}, trim]),
case Tokens of
[LeftStr, RightStr] ->
case {string:to_integer(LeftStr), string:to_integer(RightStr)} of
{{LeftNum, ""}, {RightNum, ""}} ->
read_input([LeftNum|LeftAcc], [RightNum|RightAcc]);
_ ->
%% invalid number
read_input(LeftAcc, RightAcc)
end;
_ ->
%% ignore if not two
read_input(LeftAcc, RightAcc)
end
end.
sum_distances([], []) ->
0;
sum_distances([L|LeftTail], [R|RightTail]) ->
Distance = erlang:abs(L - R),
Distance + sum_distances(LeftTail, RightTail);
sum_distances(_, _) ->
io:format("Error: unequal length~n"),
exit(1).
진짜 눈물날뻔
'projects' 카테고리의 다른 글
[V8] Liftoff (0) | 2024.12.03 |
---|