1
0
Fork 0
advent-of-code/2017/day2/day2.erl

75 lines
3.6 KiB
Erlang

-module(day2).
-export([start/0]).
split_string_into_list_of_integers(Input)
-> io:fwrite("~s ", [Input]),
[ Z || Z <- lists:map(fun(X) -> {Y,_} = string:to_integer(X), Y end, re:split(Input, "\t")), is_integer(Z) ].
split_string_into_rows(Input)
-> re:split(Input, "\n").
row_checksum(Row)
-> Min = lists:min(Row),
Max = lists:max(Row),
Difference = Max - Min,
io:fwrite("~p ~B~n", [Row, Difference]),
Difference.
factor_row_checksum(Row)
-> [Factors|_] = [Z || Z <- lists:map(fun(X) -> DifferentFactors = lists:filter(fun(Y) -> X /= Y end, Row),
T = lists:filter(fun(Y) -> (X / Y) == (X div Y) end, DifferentFactors),
if length(T) > 0 -> [U|_] = T, [X,U] ; true -> [] end
end, Row),
length(Z) > 0 ],
io:fwrite("~p~n", [Factors]),
Min = lists:min(Factors),
Max = lists:max(Factors),
Max div Min.
parse_matrix(Input)
-> Checksum = lists:foldl(fun(Row, Sum) -> Sum + row_checksum(split_string_into_list_of_integers(Row)) end, 0, split_string_into_rows(Input)),
io:fwrite("~B~n", [Checksum]),
Checksum.
parse_matrix_factors(Input)
-> Checksum = lists:foldl(fun(Row, Sum) -> Sum + factor_row_checksum(split_string_into_list_of_integers(Row)) end, 0, split_string_into_rows(Input)),
io:fwrite("~B~n", [Checksum]),
Checksum.
start()
-> parse_matrix("5 1 9 5
7 5 3
2 4 6 8"),
parse_matrix("116 1259 1045 679 1334 157 277 1217 218 641 1089 136 247 1195 239 834
269 1751 732 3016 260 6440 5773 4677 306 230 6928 7182 231 2942 2738 3617
644 128 89 361 530 97 35 604 535 297 599 121 567 106 114 480
105 408 120 363 430 102 137 283 123 258 19 101 181 477 463 279
873 116 840 105 285 238 540 22 117 125 699 953 920 106 113 259
3695 161 186 2188 3611 2802 157 2154 3394 145 2725 1327 3741 2493 3607 4041
140 1401 110 119 112 1586 125 937 1469 1015 879 1798 122 1151 100 926
2401 191 219 607 267 2362 932 2283 889 2567 2171 2409 1078 2247 2441 245
928 1142 957 1155 922 1039 452 285 467 305 506 221 281 59 667 232
3882 1698 170 5796 2557 173 1228 4630 174 3508 5629 4395 180 5100 2814 2247
396 311 223 227 340 313 355 469 229 162 107 76 363 132 453 161
627 1331 1143 1572 966 388 198 2068 201 239 176 1805 1506 1890 1980 1887
3390 5336 1730 4072 5342 216 3823 85 5408 5774 247 5308 232 256 5214 787
176 1694 1787 1586 3798 4243 157 4224 3603 2121 3733 851 2493 4136 148 153
2432 4030 3397 4032 3952 2727 157 3284 3450 3229 4169 3471 4255 155 127 186
919 615 335 816 138 97 881 790 855 89 451 789 423 108 95 116"),
parse_matrix_factors("116 1259 1045 679 1334 157 277 1217 218 641 1089 136 247 1195 239 834
269 1751 732 3016 260 6440 5773 4677 306 230 6928 7182 231 2942 2738 3617
644 128 89 361 530 97 35 604 535 297 599 121 567 106 114 480
105 408 120 363 430 102 137 283 123 258 19 101 181 477 463 279
873 116 840 105 285 238 540 22 117 125 699 953 920 106 113 259
3695 161 186 2188 3611 2802 157 2154 3394 145 2725 1327 3741 2493 3607 4041
140 1401 110 119 112 1586 125 937 1469 1015 879 1798 122 1151 100 926
2401 191 219 607 267 2362 932 2283 889 2567 2171 2409 1078 2247 2441 245
928 1142 957 1155 922 1039 452 285 467 305 506 221 281 59 667 232
3882 1698 170 5796 2557 173 1228 4630 174 3508 5629 4395 180 5100 2814 2247
396 311 223 227 340 313 355 469 229 162 107 76 363 132 453 161
627 1331 1143 1572 966 388 198 2068 201 239 176 1805 1506 1890 1980 1887
3390 5336 1730 4072 5342 216 3823 85 5408 5774 247 5308 232 256 5214 787
176 1694 1787 1586 3798 4243 157 4224 3603 2121 3733 851 2493 4136 148 153
2432 4030 3397 4032 3952 2727 157 3284 3450 3229 4169 3471 4255 155 127 186
919 615 335 816 138 97 881 790 855 89 451 789 423 108 95 116").