從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