从STDIN读取数千行时,我偶然发现了一个问题。这将是一个假想的边缘情况,直到我发现this problem的一些测试需要读取STDIN中的数千行。起初我认为我的算法不是最优的,只是偶然发现只有没有任何计算的读线才能使测试的一半时间结束。如何在Erlang中有效地读取STDIN中的数千行代码?
下面是部分代码超时:
process_queries(0, _) -> ok;
process_queries(N, A) ->
case io:fread("", "~s~d~d") of
{ok, _} -> process_queries(N - 1, A)
%{ok, ["Q", L, R]} -> process_queries(N - 1, apply_q(L, R, A));
%{ok, ["U", Idx, Val]} -> process_queries(N - 1, apply_u(Idx, Val, A))
end
.
我故意留下评论表明,所有的计算被禁用。所以这个代码超时给出N=7984
。
有没有更好的方式来读取和处理Erlang中的数千行STDIN?
io:get_line
一次只得到一行。io:get_chars
要求你知道要获得多少个字符。
我怀疑在Erlang问题的实际世界中不存在的hackerrank相关问题会激发很多回应。如果您在这里没有找到答案,请尝试IRC或真实世界的问题。 – zxq9