Je suis tombé sur un problème en lisant des milliers de lignes de STDIN. Cela aurait été un cas de bord imaginaire jusqu'à ce que j'ai découvert que certains tests pour this problem nécessitent la lecture de milliers de lignes de STDIN. Au début, je pensais que mes algorithmes n'étaient pas optimaux, et c'est seulement par hasard que j'ai découvert que seules les lignes de lecture sans calculs pouvaient faire passer la moitié du temps de test.Comment lire efficacement des milliers de lignes de STDIN à Erlang?
Voici le code partiel que les temps sur:
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
.
J'ai délibérément laissé des commentaires pour montrer que tous ont été désactivés les calculs. Donc, ce code a expiré N=7984
.
Existe-t-il une meilleure façon de lire et de traiter des milliers de lignes à partir de STDIN dans Erlang?
io:get_line
obtient seulement une ligne à la fois.io:get_chars
vous oblige à connaître le nombre de caractères à obtenir.
Je doute qu'un problème lié à hackerrank qui n'existe pas dans le monde réel des problèmes d'Erlang est quelque chose qui va motiver une grande partie de la réponse. Si vous n'obtenez pas un morceau ici, essayez IRC, ou un problème du monde réel. – zxq9