-module(doukaku7723). -export([main/1]). main(Filename) -> {ok, Bin} = file:read_file(Filename), A1 = string:tokens(binary_to_list(Bin), "\r\n"), [H | T] = lists:map(curry(flip(fun string:tokens/2), "\t"), A1), A2 = lists:map(fun swap23inc4/1, T), A3 = lists:sort(fun([E1|_], [E2|_]) -> list_to_integer(E1) < list_to_integer(E2) end, A2), A4 = lists:map(func_comp(fun lists:concat/1, curry(fun intersperse/2, "\t")), [swap23(H) | A3]), A5 = lists:concat(intersperse("\r\n", A4)), io:format("~s~n", [A5]). swap23([A,B,C,D | Rest]) -> [A,C,B,D|Rest]. swap23inc4([A,B,C,D | Rest]) -> [A,C,B,integer_to_list(1+list_to_integer(D)) | Rest]. intersperse(_, []) -> []; intersperse(_, [X]) -> [X]; intersperse(Sep, [X | XS]) -> [X, Sep | intersperse(Sep, XS)]. curry(F, A) -> fun(B) -> F(A, B) end. flip(F) -> fun(A, B) -> F(B, A) end. func_comp(F, G) -> fun(X) -> F(G(X)) end.