projects

[2024 AoC] Day 1: Historian Hysteria

ketrewq 2024. 12. 2. 23:27

 

서론

 

ChatGPT한테 쓸만한 프로그래밍 언어들을 출력하라고 한 뒤 그걸로 돌림판을 만들어서 나온 언어로 2024년의 advent of code를 풀기로 했다. 인생이 너무 재미없었기 때문이다 

 

https://wheelofnames.com/dqm-59z

 

Wheel of Names

Enter names, spin wheel to pick a random winner. Customize look and feel, save and share wheels.

wheelofnames.com

 

돌림판을 공유하니 하실 분들은 하시길 

 

 

Erlang은 써본 적이 없기 때문에 문서부터 읽어야 했다.

 

Documentation - Erlang/OTP  

 

문제 설명 

대충 스토리를 설명하자면, 팀장 역사가가 사라짐. 걔가 돌아다닌 역사적인 장소가지고 어쩌구했는데 장소마다 고유한 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을 쓰지말라는 룰이 있어서 코드를 쓰는데는 쓰지 않았지만, 중간에 에러나면 묻긴 했다.

 

https://onecompiler.com/

 

OneCompiler - Write, run and share code online | Free online compiler with 70+ languages and databases

Users from world's top companies and schools + thousands of other companies and schools

onecompiler.com

 

-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